文章目录
-
- 概念
- 实现
-
- ①怪异盒模型实现
-
- (1)content-box
- (2)border-box
- ③calc()方法实现
- ②flex实现
- 总结
概念
大概是长这个样子的布局:
一开始是这样的
我们来拉动一下窗口
可见,固比固指的是,左右两边尺寸固定,而中间会根据窗口大小缩放。
实现
①怪异盒模型实现
说起怪异盒模型我们就不得不得不先说一下box-sizing属性
box-sizing属性有两个常用的值:
(1)content-box
标准盒模型,是默认值
(所以图示的css中没有写
box-sizing:content-box)
计算公式:width = content
如果出现padding和border,视觉上的体积会扩张
接下来我们来看看图例:
只有content时:
加上padding:
明显粗了一圈
加上border:
又粗了一圈
所以标准盒模型就是一个向外扩张的类型
(2)border-box
怪异盒模型,
计算公式:
width = content + padding + border
从式子上可以看出,一旦width确定,其他三个只能作为变量调整
接下来我们看看图例:
只有content:
没什么区别
加上padding:
诶,还是原来的大小
加上border:
对比一下标准盒模型
总的体积依旧没有变化
所以怪异盒模型是向内压缩的类型
清楚了概念我们来谈一谈固比固布局的实现
<h1>怪异盒模型实现</h1><div class="box"> <div class="left">左边</div><div class="center">中间</div><div class="right">右边</div></div>
/* 怪异盒模型实现 */.box{
width: 100%;}.left{
background-color: yellow;position: absolute;left: 0;}.center{
width: 100%;padding: 0 200px;background-color: pink;/* 怪异盒模型,内缩而不是外扩 */box-sizing: border-box;}.right{
background-color: skyblue;position: absolute;right: 0;}
这里我们使center为怪异盒子,给它左右加上padding,这样一来正好为left和right提供了一块空间,最终实现固比固.
③calc()方法实现
为什么①过了就是③?
主要是两者差不多所以放到一起讲,但是代码顺序上这又是第三个…(总结起来还是我太懒) ?~
calc是calculate(计算)的简写,效果也是顾名思义,需要强调一下两点:
(1)可以进行带单位的计算
(2)运算符两侧需要留空格,否则无法识别
既然和怪异盒模型的原理差不多,我们直接来看看实现:
<h1>calc实现</h1><div class="box3"> <div class="left3">左边3</div><div class="center3">中间3</div><div class="right3">右边3</div></div>
.box3{
width: 100%;}.left3{
background-color: yellow;position: absolute;left: 0;}.center3{
width: calc(100% - 400px);/* 运算符 两边一定要留空 不然会无法识别 */padding: 0 200px;background-color: pink;}.right3{
background-color: skyblue;position: absolute;right: 0;}
②flex实现
flex的内容比较多,我们这里就粗略地说一下
首先要给父级设置display:flex
子级设置flex属性,flex属性是
flex-grow flex-shrink flex-basis的集合,
默认值是
0, 1, auto
其中flex-gorw是指,
该元素在参与剩余分配空间时的占比,
如果只有一个元素参与分配剩余空间,那么不为0就是占满
(这里就不另外说明了,毕竟有太多质量不错的flex总结,举个例子,点击跳转)
来看看实现:
<!-- flex实现 --><h1>flex实现</h1><div class="box2"> <div class="left2">左边2</div><div class="center2">中间2</div><div class="right2">右边2</div></div>
/* flex实现 */.box2{
display: flex;width: 100%;}.left2{
background-color: yellow;}.center2{
width: 100%;background-color: pink;flex: 1;}.right2{
background-color: skyblue;}
总结
从压缩窗口后的结果来看,还是flex最香,既没有发生错位也没有发生遮挡…
溜了溜了,再不跑就被大佬们喷死了