大家好,我是翟路佳。全栈工程师,编程爱好者。
互联网高速发展,海量用户涌入,刺激厂商和开发者绞尽脑汁以网页为平台提供商品。
这些商品多半功能丰富、交互复杂,对 UI 要求很高。
创造好的 UI 需要善用 CSS 布局,然而 CSS 布局却有着各种奇奇怪怪的设定,早期开发者只有随着这些诡异的节奏起舞……
display:block
<div>
<table>
<h1>
<p>
以及大部分我们会拿来做布局的元素display:inline
<strong>
<i>
<em>
display: block;
它有以下特点:
块级元素格式化上下文,BFC
margin
决定,属于同一 BFC 的相邻 Box 的 margin
会叠加margin-box
左边与包含块 border-box
的左边相接,即使存在浮动也如此<body>
启动 BFC其它元素默认没有触发 BFC,需要我们手动触发。
臆断之:
position
static
静态文档流relative
相对定位absolute
绝对定位fixed
相对于屏幕绝对定位sticky
相对于滚动条绝对定位position:absolute
position:static
元素定位aside
position absolute
top 0
bottom 0
width 200px
&.left
left 0
&.right
right 0
.content
margin 0 200px
范例文件:./sample/shengbei.html
position:fixed
absolute
,脱离文档流position:sticky
static
fixed
box-sizing
声明盒子的尺寸以哪个层级计算。再看一眼 盒模型。
content-box
border-box
html, body {
height: 100%;
}
作为前端开发者,我们必须与时俱进,眼下这个时刻,flexbox 无疑是比浮动好得多得多的选择。
赋予元素弹性,使其更适应多种多样的分辨率。
.container
display flex // 声明容器是个 flex 容器
justify-content center // 子元素在主轴上的排列方式
align-items center // 子元素在测轴上的排列方式
flex-direction row/column // 横向/纵向 分布,主轴
flex-wrap wrap // 是否允许换行
.item
flex-basis 100px // 子元素的初始宽度
flex-grow 1 // 当容器宽度大于一行总宽度时,元素扩张的比例
flex-shrink 1 // 当容器宽度小于一行总宽度时,元素收缩的比例
order 1 // 子元素的显示顺序
史上最强大的布局系统,以二维为基础的布局系统。
.container
grid-template-columns 1fr 1fr 1fr // 每列宽度
grid-template-rows 100px 100px 100px // 每行宽度
grid-template-areas // 声明每个分块的名称
"header header header"
"aside main main"
"footer footer footer"
grid-column-gap 10px //列间距
grid-row-gap 1rem //行间距
.item
grid-column 1/2 // 占据哪几列,以线为标记
grid-row 2/4 // 占据哪几行,以线为标记
grid-area header // 占据哪些区域
justify-self center // 在这一块里,横向对齐的方式
align-self center // 在这一块里,总想对齐的方式
我认为不会。原因有三:
float
、postition:abosulut
的元素自动转化为块级元素。限于篇幅,本教程中未全面介绍这些会互相影响的属性,希望大家自行查阅文档。Q&A