# CSS 布局
# 流式布局
在 body 中 每个块级元素依次排列 每个块级元素占满 width
# 浮动布局 (float)
给块级元素设置 Float 属性
# 高度塌陷和 BFC
注意: 子元素都为 float 时,可能造成父元素高度塌陷,需要清除浮动
给父元素加高度
补充块级空标签,给他加 clear 属性
创建 BFC
BFC(Block Formatting Context),BFC 全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素设置了 float:left,overflow:hidden 或 position:absolute 样式,就会为这个块级元素生产一个独立的块级上下文,使这个块级元素内部的排版完全独立。也就是说独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,就是说包含块会把浮动元素的高度也计算在内,这样就达到了清除浮动的效果,但是 overflow:hidden 本身的意思是溢出的元素隐藏显示,所以说有一定的缺点,大家可以根据情况来使用它。
父元素添加:after 伪类 加上 content: “”;
如何创建 BFC
1、float 的值不是 none。
2、position 的值不是 static 或者 relative。
3、display 的值是 inline-block、table-cell、flex、table-caption 或者 inline-flex
4、overflow 的值不是 visible
# 五个定位布局(position)
- static 静态
- relative 相对
- absolute 绝对
- fixed 固定
- sticky 粘性
-
# static
默认定位,遵循从上到下,从左到右
-
# relative
相对定位,相对块元素自己本身的位置偏移,但本质位置不变,不会挤占
-
# absolute
绝对定位,元素会脱离文档流,其他元素会挤占其空间,本体元素会在挤占它的元素的上方,它的偏移 (left,right… 是相对于它的最近的有 position 的父级元素)—— 子绝父相 。
后定义的 absolute 元素会覆盖在先定义的 absolute 元素之上。
-
# fixed
固定定位,fixed 和 absolute 这种脱离文档流的定位,会把元素的宽和高设置为内容的宽和高,可以设置元素的 left:0; right:0; 使元素左右占满页面。
-
# sticky
粘性定位,使元素正常情况下是 relative 定位,但是当滑动页面时,元素接触到页面边界时,变成 fixed 固定在位置;
z-index
表示元素的 z 轴值,值越大越在上层,能覆盖值小的元素
# Display&Visibility
-
display: none; 隐藏
设置为 none 的元素直接消失,不会占据空间,不在文档流中。
与 visibility 有区别,设置 visibility: hidden; 元素不可见,但占据空间。
-
display:inline; 行级元素
a. 多个元素占一行
b. 不能设置宽高
-
display:block; 块级元素
a. 独占一行
b. 可以设置宽和高
-
display: inline-block; 行级块元素
a. 多个元素占一行
b. 可以设置宽高
# 盒子模型 (Box Model)
-
box-sizing: content-box (默认)
width = content 的宽度
-
box-sizing: border-box
width = content + border + padding
# Flex 布局
- display: flex

给父元素设置 flex 布局,父元素内的所有子元素会沿主轴从左到右依次排列
- **justify-content ** 用于改变主轴方向的布局
居中

平分空间

两端对齐

-
align-items 改变交叉轴方向的布局
-
flex-direction: column 列模式–交叉轴变主轴,主轴变交叉轴
-
子元素占比,设置子元素的 Flex 的值,调整子元素占比
# *Grid 布局
display: grid

给父元素设置 grid 布局,父元素内的所有子元素会按照 grid 布局排列
1 | /* 声明列的宽度,数字3表示的重复3次,即有3列宽度为200px*/ |
# columns,rows
设置 grid-template-columns 可以生成列栅格
1 |
|
# areas
1 | // 父元素设置 |
# 看一个案例
要实现以下布局


如果采用 Grid 布局来实现就非常简单,同时还可以搭配媒体查询
1 | @header-color: #196572; |
# 响应式布局
# MediaQuery 媒体查询
min-width 可视宽度
min-device-width 设备宽度(只与设备本身有关)
1 | @media screen and (min-width: 340px) and (max-width: 768px){ |
# 自适应布局
1 | //获取设备信息 |