CSS 【详解】响应式布局(含 rem 详解)

简介: CSS 【详解】响应式布局(含 rem 详解)

响应式布局: 同一页面在不同的屏幕上有不同的布局,即一套代码自适应不同的屏幕。

为什么 rem 能用于实现响应式布局?

  • px 绝对长度单位,不同客户端表现都相同,不具有响应式
  • em 相对长度单位,相对于父元素的 font-size 值,不同元素的父元素的尺寸各不相同,没有统一标准。
  • rem 相对长度单位,相对于根元素的 font-size 值,页面中的根元素只有一个(即 html 标签),标准统一,可用于响应式布局。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      html {
        font-size: 20px;
      }
      .box1 {
        font-size: 1rem;
      }
      .box2 {
        font-size: 2rem;
      }
      .box3 {
        font-size: 3rem;
      }
    </style>
  </head>
  <body>
    <div class="box1">1rem</div>
    <div class="box2">2rem</div>
    <div class="box3">3rem</div>
  </body>
</html>
  • rem 除了可用于 font-size 外,还可以用于任意其他表示长度的属性,如 width,height 等

响应式布局的实现

方案一【推荐】 相对根元素响应 = 媒体查询 + rem

  • 使用媒体查询,随屏幕宽度的变化,调整根元素的 font-size
  • 使用单位 rem
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>响应式布局</title>
    <style type="text/css">
      @media only screen and (max-width: 374px) {
        /* iphone5 或者更小的尺寸,以 iphone5 的宽度(320px)比例设置 font-size */
        html {
          font-size: 86px;
        }
      }
      @media only screen and (min-width: 375px) and (max-width: 413px) {
        /* iphone6/7/8 和 iphone x */
        html {
          font-size: 100px;
        }
      }
      @media only screen and (min-width: 414px) {
        /* iphone6p 或者更大的尺寸,以 iphone6p 的宽度(414px)比例设置 font-size */
        html {
          font-size: 110px;
        }
      }

      body {
        font-size: 0.16rem;
      }
      .titleBox {
        width: 3rem;
        background-color: #ccc;
      }
    </style>
  </head>
  <body>
    <div class="titleBox">响应式布局———— 媒体查询 + rem</div>
  </body>
</html>

缺点

  • rem 具有阶梯性,即在某个媒体查询的范围内,其实是没有响应式的,只有超越媒体查询的临界线,进入新的媒体查询范围,才会触发响应式。(无法针对每一个媒体宽度值,都响应式地变化)

方案二【推荐】 相对视口响应 = vh + vw

  • 网页视口宽度 window.innerWidth:客户端浏览器渲染网页的区域中可见部分的宽度(如上图)
  • 网页视口高度window.innerHeight;:客户端浏览器渲染网页的区域中可见部分的高度(如上图)

移动端的网页视口宽度和高度在PC端浏览器的模拟是不准确的(PC端的模拟没有显示移动端浏览器的头部和底部),只能在移动端上用 js 获取

相关概念还有

  • 屏幕的高度 window.screen.height
  • 屏幕的宽度 window.screen.width
  • body 的高度 document.body.clientHeight
  • body 的宽度 document.body.clientWidth
  • vh 相对长度单位, 1vh = 网页视口高度 * 1%
  • vw 相对长度单位, 1vw = 网页视口宽度 * 1%
  • vmin 相对长度单位, 1vmin = 1vh 和 1vw 中的较小值
  • vmax 相对长度单位, 1vmax = 1vh 和 1vw 中的较大值

CSS3 新增 vh 和 vw 就是用于实现真正的响应式布局(随客户端设备宽高的变化,页面自动适配调整变化,呈现预期的页面效果)

移动端的横竖屏切换时,可能需要使用 vmin 和 vmax 实现响应式布局

缺点

需浏览器支持 vh 和 vw 【CSS3 的语法】(某些支持CSS3语法的浏览器,仍不支持 vh 和 vw)

方案三: 百分比

大部分情况下,百分比是相对于父元素进行计算的,但也有很多例外的情况,如vertical-align的百分比是相对当前元素的line-height值来计算的,又因每个元素的父元素各不相同,导致使用百分比实现响应式布局变得更加复杂,所以并不推荐。

方案四【推荐】flex 布局

缺点

  1. flex 布局在响应式方面,主要是实现元素宽高的自适应,无法实现其他属性,如字体大小的自适应。
  2. 需浏览器支持 CSS3

其他方案

  • 使用 JavaScript 动态计算(缺点是工作量比较大)
  • 使用开源框架 bootstrap
目录
相关文章
|
6月前
|
编解码 前端开发 小程序
CSS中rpx、px、em、rem、%、vh、vw各自都代表什么
CSS中rpx、px、em、rem、%、vh、vw各自都代表什么
120 0
|
1月前
|
资源调度 前端开发 搜索推荐
使用Tailwind CSS构建响应式布局
【10月更文挑战第1天】使用Tailwind CSS构建响应式布局
|
1月前
|
前端开发 UED 容器
前端技术分享:利用 CSS Grid 实现响应式布局
【10月更文挑战第1天】前端技术分享:利用 CSS Grid 实现响应式布局
46 2
|
6月前
|
前端开发 架构师 容器
CSS Flexbox与Grid:构建响应式布局的艺术
本文介绍了Flex弹性布局和Grid网格布局。Flex布局中,`display: flex`开启布局,`flex-direction`定义主轴方向,`flex-wrap`控制换行,`justify-content`和`align-items`分别调整主轴和交叉轴对齐。Grid布局中,`display: grid`开启布局,`grid-template-columns/rows`定义网格轨道,`grid-gap`设置间距。两者结合可创建复杂响应式布局。选择Flexbox处理一维布局,Grid则适合二维布局。
54 0
|
3月前
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
247 8
|
4月前
|
编解码 前端开发 C++
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
CSS【详解】布局 display ( 含 flex 布局,grid 布局,table 布局,float 布局,响应式布局 等)
133 0
|
4月前
|
编解码 前端开发
CSS【详解】长度单位 ( px,%,em,rem,vw,vh,vmin,vmax,ex,ch )
CSS【详解】长度单位 ( px,%,em,rem,vw,vh,vmin,vmax,ex,ch )
61 0
|
5月前
|
前端开发 UED 开发者
CSS基础-属性值单位:px, em, rem, %
【6月更文挑战第7天】本文探讨了CSS中四种关键的尺寸单位:像素(px)、相对单位(em)、rem和百分比(%)。px提供稳定显示但不适用于响应式设计;em根据上下文动态调整,但嵌套使用可能导致计算复杂;rem简化了嵌套计算,适合作为响应式设计的选择;%用于流体布局,但可能在复杂结构中引起不稳定。理解各单位特性并结合现代布局技术,能提升网页布局的美观性和用户体验。
77 3
|
4月前
|
前端开发 JavaScript
css相对单位 rem 和 em 的最佳实践
css相对单位 rem 和 em 的最佳实践
28 0
|
5月前
|
移动开发 JavaScript 前端开发
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,

热门文章

最新文章