CSS布局
# flex:1 解析
可以实现均分外层容器空间的效果。
flex是flex-grow,flex-shrink,flex-basis三个属性值的缩写flex-grow: 1; flex-shrink: 1; flex-basis: 0%;1
2
3flex-grow
- flex-grow用于设置各item项按对应比例划分剩余空间,若flex中没有指定flex-grow,则相当于设置了flex-grow:1
flex-shrink
- flex-shrink用于设置item的总和超出容器空间时,各item的收缩比例,若flex中没有指定flex-shrink,则等同于设置了flex-shrink:1
flex-basis
- flex-basis用于设置各item项的伸缩基准值,可以取值为长度或百分比,如果flex中省略了该属性,则相当于设置了flex-basis:0
# position 绝对/相对/粘性 布局分析
staticrelativeabsolutefixedsticky- sticky元素效果完全受制于父级元素们,
fixed元素直抵页面根元素,其他父元素对其left/top定位无法限制。 - 父级元素不能有任何
overflow:visible以外的overflow设置,否则没有粘滞效果。 - 同一个父容器中的
sticky元素,如果定位值相等,则会重叠;如果属于不同父元素,且这些父元素正好紧密相连,则会鸠占鹊巢,挤开原来的元素,形成依次占位的效果。 sticky定位,不仅可以设置top,基于滚动容器上边缘定位;还可以设置bottom,也就是相对底部粘滞。如果是水平滚动,也可以设置left和right值。- 父级元素设置和粘性定位元素等高的固定的
height高度值,或者高度计算值和粘性定位元素高度一样,也没有粘滞效果。(2019-05-22新增)
- sticky元素效果完全受制于父级元素们,
# display、visibility、opacity 区别分析
transparent:是一种色彩颜色,只不过它是全透明色彩。可以利用这个属性画出三角形。顺带一提
opacity和rgba的区别:opacity是属性,rgba()是函数,计算之后是个属性值。rgba一般修改的是背景色或者文本的颜色,内容不会继承透明度。opacity作用于元素和元素的内容,内容会继承透明度。
针对元素的隐藏分析,即
display:none;visibility:hidden;opacity:0;
属性分析
display:定义建立布局时元素生成的显示框类型。visibility:用来设置元素是否可见。opacity:用来设置透明度。
是否占据页面空间
- 使用
opacity:0和visibility:hidden属性时,元素还是会占据页面空间的,而使用display:none属性时,元素不仅看不见也不占据页面空间。
- 使用
对子元素的影响
父元素分别设置为 display:none;visibility:hidden;opacity:0;子元素设置为 display:block;visibility:visible;opacity:1;
display:子元素不可见,受父元素影响visibility:子元素可见,不受父元素影响opacity:子元素不可见,受父元素影响
自身绑定的事件是否能继续触发
父元素分别设置为 display:none;visibility:hidden;opacity:0;对子元素设置onmouseenter鼠标移入事件触发alert()弹窗
display:不会触发,该属性下的元素不仅看不见,而且也不占据页面空间,所有不会触发事件。visibility:不会触发。opacity:可以正常触发
回流(重布局或者重排)/重绘
回流必将引起重绘,而重绘不一定会引起回流。
- 回流:当页面中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。每个页面至少需要一次回流,就是在页面第一次加载的时候。
dispaly属性会产生回流,而opacity和visibility属性不会产生回流。
- 重绘:当页面中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的时候,比如
background-color。则称为重绘。dispaly和visibility属性会产生重绘,而opacity属性不一定会产生重绘。
- 回流:当页面中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。每个页面至少需要一次回流,就是在页面第一次加载的时候。
上次更新: 2025/09/01, 09:19:57