使用css3的flex布局和rem大小单位
flex
在以前做框架布局的时候, 一般都是使外层元素设置height:100%;width:100%;
, 使用外层元素设置padding
, 内层也可以使用height:100%;width:100%;
来布局(元素需要为border-box
). 对于那些固定的元素, 可以使用calc(100% - npx)
这种方式来动态计算布局.
而在css3
中, 出现了一种新的布局模型flex
, 相关语法可以看这里, 可以比calc
更优雅和简洁的实现动态布局, 不过对于IE
系列只有IE 10+
才支持, IE 9
便只能使用calc
或其他方式了.
flex
可以做到的几种布局 :
- 对某个方向自动填充, 如果超过则压缩元素, 可以设置指定元素需要压缩和比例.
- 如果不超过可以自动拉伸元素, 可设置指定元素拉伸和比例.
- 如果元素全为固定大小, 可以设置如果不填满时的填充方式, 有
flex-start | flex-end | center | space-between | space-around
五种可选, 分别是从起点开始, 终点开始, 居中, 两端对齐且每项间隔相等, 每项两侧间距相等. - 设置在垂直轴上的布局方式, 常见的垂直居中可以很简单的实现.
- 如果设置为
wrap
即换行模式, 可以设置超过一行的情况下的行的布局. - 可以对子项单独设置排序(
order
), 放大比例(flex-grow
), 缩小比例(flex-shrink
), 在计算拉伸时所占实际大小(flex-basis
), 单独的垂直轴布局方式(align-self
)
一般情况下, 如两端固定, 中间可拉伸的布局代码:
1 | <!DOCTYPE html> |
效果图
通过设置flex-direction
属性, 可以设置元素是横向排列还是纵向排列, 从而可以构建出各种动态嵌套布局, 在修改相关元素大小的时候, 也不会影响到整体布局, 不用像之前写calc
一样修改一点以后再去计算每个元素大小, 全交给浏览器自动计算, 省事方便很多.
rem
再看看rem
单位, 之前出现的em
单位是将字体大小与容器大小相匹配的单位, 即容器可以跟着字体大小动态变化, 不会出现字体比容器大的情况. 但是存在的问题是在写每个div
的大小时, 需要知道当前em
的比例, 即文字大小. 而rem
单位出现便解决了这个问题, rem
表示root-em
, 即根节点的字体大小. 只需要设置html
的font-size
, 其他元素则都设置为1rem
即可表示html
的font-size
大小, 在动态改变字体时, 也只需要修改html
的font-size
即可, 不会出现以前em
的修改多处的问题.
vh
以前如果要设置一个元素高度是浏览器页面大小, 只能在外层通过height:100%;
一层层传到内层元素, 或者使用js
设置ele.style.height = window.innerHeight
. 这样会很不方便, 而vh
可以很简单的实现这个需求. 100vh == window.innerHeight
.
vw
vh
是高度单位, 那么vw
则是宽度单位了, 表示100%
的屏幕可见宽度. 在宽度自适应布局中, 比较简单的做法就可以用到vw
了. 再结合flex
布局, 可以说是非常强大的了.
1 | .left-menu{ |
再比如, 图片不能超过页面大小.
1 | .max-img{ |
vm
vm
表示的是vmin
和vmax
, 能想到要用到的地方就是做一个正方形的头部图片了.
1 | .header-img{ |
这几个属性, 除了flex
, 其他都支持IE9+
, 而flex
支持IE10+
, 使用到的情况还是比较多的, 熟悉多用为好.
使用css3的flex布局和rem大小单位