主题
CSS 相关
1. 左边定宽,右边自适应方案:float + margin ,float + calc
css
/* 方案1 */
.left {
width: 120px;
float: left;
}
.right {
margin-left: 120px;
}
/* 方案2 */
.left {
width: 120px;
float: left;
}
.right {
width: calc(100% - 120px);
float: left;
}2. 左右两边定宽, 中间自适应:float ,float + calc, 圣杯布局 (设置 BFC , margin 负值法) ,flex
css
.wrap {
width: 100%;
height: 200px;
}
.wrap > div {
height: 100%;
}
/* 方案1 */
.left {
width: 120px;
float: left;
}
.right {
float: right;
width: 120px;
}
.center {
margin: 0 120px;
}
/* 方案2 */
.left {
width: 120px;
float: left;
}
.right {
float: right;
width: 120px;
}
.center {
width: calc(100% - 240px);
margin-left: 120px;
}
/* 方案3 */
.wrap {
display: flex;
}
.left {
width: 120px;
}
.right {
width: 120px;
}
.center {
flex: 1;
}3. 左右居中
- 行内元素:
text-align: center - 定宽块状元素: 左右
margin值为auto - 不定宽块状元素:
table布局,position+transform
css
/* 方案1 */
.wrap {
text-align: center;
}
.center {
display: inline;
/* or */
/* display: inline-block; */
}
/* 方案2 */
.center {
width: 100px;
margin: 0 auto;
}
/* 方案2 */
.wrap {
position: relative;
}
.center {
position: absulote;
left: 50%;
transform: translateX(-50%);
}4. 上下垂直居中
- 定高:
margin,position+margin(负值) - 不定高:
position+transform,flex,IFC+vertical-align:middle
css
/* 定高方案1 */
.center {
height: 100px;
margin: 50px 0;
}
/* 定高方案2 */
.center {
height: 100px;
position: absolute;
top: 50%;
margin-top: -25px;
}
/* 不定高方案1 */
.center {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
/* 不定高方案2 */
.wrap {
display: flex;
align-items: center;
}
.center {
width: 100%;
}
/* 不定高方案3 */
/* 设置 inline-block 则会在外层产生 IFC, 高度设为 100% 撑开 wrap 的高度 */
.wrap::before {
content: "";
height: 100%;
display: inline-block;
vertical-align: middle;
}
.wrap {
text-align: center;
}
.center {
display: inline-block;
vertical-align: middle;
}5. 盒模型:content (元素内容) + padding ( 内边距) + border ( 边框) + margin (外边距)
延伸:
box-sizing
content-box:默认值,总宽度 =margin+border+padding+widthborder-box:盒子宽度包含padding和border, 总宽度 =margin+widthinherit:从父元素继承box-sizing属性
6. BFC 、IFC 、GFC 、FFC: FC ( Formatting Contexts) ,格式化上下文
BFC :块级格式化上下文, 容器里面的子元素不会在布局上影响到外面的元素, 反之也是如此(按照这个理念来想, 只要脱离文档流, 肯定就能产生 BFC )。产生 BFC 方式如下
float的值不为none。overflow的值不为visible。position的值不为relative和static。display的值为table-cell,table-caption,inline-block中的任何⼀个
用处?常见的多栏布局, 结合块级别元素浮动, 里面的元素则是在⼀个相对隔离的环境里运行
IFC : 内联格式化上下文, IFC 的 line box ( 线框) 高度由其包含行内元素中最高的实际高度计算而来 (不受到竖直方向的 padding/margin 影响)。
IFC 中的 line box ⼀般左右都贴紧整个 IFC ,但是会因为 float 元素而扰乱 。 float 元素会位于 ImC 与 line box 之间,使得 line box 宽度缩短 。 同个 ifc 下的多个 line box 高度会不同 。 IFC 中时不可能有块级元素的, 当插⼊块级元素时 ( 如 p 中插⼊ div ) 会产生两个匿名块与 div 分隔开, 即产生两个 IFC ,每个 IFC 对外表现为块级元素,与 div 垂直排列。
用处?
水平居中: 当⼀个块要在环境中水平居中时,设置其为
inline-block则会在外层产生IFC, 通过text-align则可以使其水平居中。垂直居中:创建⼀个
IFC,用其中⼀个元素撑开父元素的高度,然后设置其vertical-align : middle, 其他行内元素则可以在此父元素下垂直居中GFC:网格布局格式化上下文 (display: grid)FFC: 自适应格式化上下文 (display: flex)
