一、CSS布局的概述
Layout布局是什么?
- 确定内容的大小和位置的算法
- 根据元素、容器、兄弟节点和内容等元素来计算
- 根元素、浮动和绝对定位的元素不在常规流里面
- 常规流里面的元素都有一定的排版规则
- 行级、块级排版上下文
- Grid排版上下文
- Flex排版上下文
- Table排版上下文
二、Flexible Box
flexible:
- 可以设置子项的弹性:当容器有剩余空间时,会伸展;当容器空间不够时,会收缩;
- flex-grow:有剩余空间时的伸展能力
- flex-shrink:容器空间不足时的收缩能力
- flex-basis:没有伸展或收缩时的基础长度
display:flex
使元素生成一个块级的Flex容器
display:line-flex
使元素生成一个行级的Flex容器
可以使用flex-direction控制元素的摆放
flex-direction:
row
(默认)从左到右摆放
row-reverse
从右向左
column
从上到下
column-reverse
从下到上
flex-wrap:
表示是否允许排版里面的元素换行
nowrap
:不允许换行
wrap
:允许换行
justify-content:
控制主轴元素对齐方式
flex-start
:左对齐
flex-end
:右对齐
center
:居中
space-between
:在元素中间加上空白
space-around
:在元素中间和两边加上空白(当两边空白小于中间)
space-evenly
:同上,但是两边和中间空白相等。
align-item:在侧轴方向对齐
flex-start:上对齐
flex-end:下对齐
center:居中对齐
stretch:将每个容器都拉伸到上级容器这么高
baseline:基线对齐
align-self:让其中的某个元素设置不一样的对齐方式
order:按顺序排放,默认值为0是最优先的。
eg:
<header>
<h1 class="logo">My Blog</h1>
<nav>
<a href="#">Home</a>
<a href="#">Posts</a>
<a href="#">About</a>
</nav>
</header>
<div class="wrapper">
<main>
<article>
<h2>My blog title</h2>
<p>Some content in paragraph 1</p>
<p>Some content in paragraph 2</p>
<p>Some content in paragraph 3</p>
</article>
</main>
<aside>
<h3>Hot topics</h3>
<ul>
<li><a href="#">Topic 1</a></li>
<li><a href="#">Topic 2</a></li>
</ul>
</aside>
</div>
<footer>
Copyrigths © 2018
</footer>>
<style>
hearder {
display: flex;
align-items: content;
background: coral;
}
nav {
flex-grow: 1;
text-align: rigth;
}
.wrapper {
display: flex;
}
main {
flex-grow: 1;
order: 1;
background: lightblue;
}
aside {
width: 180px;
background: lightgreen;
}
footer {
text-align: center;
background: gray;
}
</style>
结果显示如下:
三、Grid布局
- display:grid使元素生成一个块级的Grid容器
- 使用grid-template相关属性将容器划分为网格
- 设置容器中的元素占据哪些行和列
1.网格划分
grid-template-rows:100px,100px
grid-template-columns: 100px,200px,100px
表示将容器划分为两行三列
.a {
grid-row-start:1;
grid-row-end:3;
grid-column-start:1;
grid-column-end:3;
}
/*或者*/
.a {
grid-area:1/1/3/3;
}
.a{
grid-template-columns:
[left] 100px [center] 200px [rigth];##表示占据两列,共有三条线,没列的宽度为100px、200px
grid-template-rows:
[top]100px [middle] 200px [bottom];
}
表示a占据容器的两行两列
注意!!如果没有指定时,一个元素占据一个网格。
grid-gap
:设置网格之间的间距
grid-gap,grid-row-gap,grid-column-gap.
四、表格样式
1.表格table长宽设置:
table th{
width:100px;
}
table th,td {
width:100px;
}
2.table边框设置:
table{
border: 1px solid red;/*像素为1,粗线红色边框
}
table {
border: 1px solid red;
}
td,th {
border: 1px solid red;/*表示给每个表格设置边框*/
}
table {
border: 1px solid red;
border-collapse: collapse;/*表示当有多个边框堆叠时,合并边框*/
}
五、浮动
绝对定位模式:
常规流
浮动
绝对定位
浮动源自传统的印刷排版中文字与图片的关系。
float:left,rigth
clear:left
表示不可以和左浮动的元素同行
clear:rigth
表示不可以和右浮动的元素同行
clear: both
表示不可以和两者的元素同行
六、定位
使用position设置是否绝对定位
static :默认值,非定位元素
relative: 相对于自身原本位置的偏移,不脱离文档流
absolute:绝对定位,相对于非static父元素的定位
fixed:相对于视口绝对定位
七、堆叠层级
当重叠时,需要指定谁在上面,谁在下面,其中z表示距离用户的距离。
z-index
:
- 为定位元素指定其在z轴的上下层级
- 用一个整数表示,数值越大,越靠近用户
- 初始值为auto,可以为负数、0、正数