响应式布局
# 响应式布局
参考链接:https://www.yuque.com/fe9/basic/hqbhn3 (opens new window)
https://juejin.im/post/5b39905351882574c72f2808
响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局。传统的开发方式是PC端开发一套,手机端再开发一套,而使用响应式布局只要开发一套就够,缺点就是CSS
比较重。
响应式设计与自适应设计的区别:响应式开发一套界面,通过检测视口分辨率,针对不同客户端在客户端做代码处理,来展现不同的布局和内容;自适应需要开发多套界面,通过检测视口分辨率,来判断当前访问的设备是pc端、平板、手机,从而请求服务层,返回不同的页面。
[TOC]
# 一、响应式图片
- max-width 属性用来给元素设置最大宽度值。
- 定义了max-width的元素会在达到max-width值之后避免进一步按照width属性设置变大。
max-width
会覆盖width
设置, 但min-width
设置会覆盖max-width
。
图片随时显示区域的变小而变小。
img{
/* 父级宽度大于1200px时,图像大小仍然为1200px,避免模糊 */
width: 1200px;
/* 图片的宽度等于父级的宽度 */
max-width: 100%;
}
1
2
3
4
5
6
2
3
4
5
6
# 二、首屏内容始终填充整个窗口(视口单位)
单位 | 含义 |
---|---|
vw | 相对于视窗的宽度,1vw 等于视口宽度的1%,即视窗宽度是100vw |
vh | 相对于视窗的高度,1vh 等于视口高度的1%,即视窗高度是100vh |
vmin | vw和vh中的较小值 |
vmax | vw和vh中的较大值 |
<div class="intro">
<h1>首屏内容</h1>
</div>
1
2
3
2
3
.intro {
background: #e0ebe8;
text-align: center;
/* height + padding-top -> 100vh */
height: 55vh;
padding-top: 45vh;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 三、媒体查询(@media)
- 如果视窗的宽度小于
480px
时,将背景色变为淡绿色。
@media (max-width: 480px) {
body{
background-color: lightgreen;;
}
}
1
2
3
4
5
2
3
4
5
# 四、百分比
# 4.1 百分比
# 4.1.1 height、width
width相对于父元素的width,height相对于父元素的height。
# 4.1.2 top和bottom 、left和right
子元素的top和bottom如果设置百分比,则相对于直接非static定位(默认定位)的父元素的高度。
子元素的left和right如果设置百分比,则相对于直接非static定位(默认定位的)父元素的宽度。
# 4.1.3 padding 和 margin
不论是垂直方向或者是水平方向,都相对于直接父亲元素的width,而与父元素的height无关。
margin亦如此。
# 4.1.4 border-radius
相对于自身的宽度。
# 4.2 应用
- 固定长宽比的长方形
.trangle{
height: 0;
width: 100%;
padding-top: 75%;
}
1
2
3
4
5
2
3
4
5
但是啊,计算会比较麻烦~
# 五、rem单位
默认情况下,html的元素都为16px。
1 rem = 12 px;
1
为了方便计算
html{ font-size: 62.5% }
1
此时
1 rem = 10 px;
1
# 5.1 使用vw定制rem自适应布局
- 要点:移动端使用
rem布局
需要通过JS设置不同屏幕宽高比的font-size
,结合vw
单位和calc()
可脱离JS的控制 - 场景:rem页面布局(不兼容低版本移动端系统)
- 兼容:vw、calc()
/* 基于UI width=750px DPR=2的页面 */
html {font-size: calc(100vw / 7.5);}
1
2
2