目录
[1.1 弹性布局案例](#1.1 弹性布局案例)
[1.2flex 布局基本概念](#1.2flex 布局基本概念)
1.弹性布局
弹性布局(Flex布局)是一种用于创建自适应和响应式布局的CSS布局模型。它提供了一种简单而强大的方式来排列和对齐页面中的元素,使其在不同的屏幕尺寸和设备上能够保持良好的显示效果
弹性布局的主要特点包括:
- 简单易用:相比传统的布局方式,弹性布局使用相对简单的属性来控制布局,减少了复杂的 CSS 代码。
- 响应式设计:能够自动适应不同的屏幕尺寸和设备,使布局在各种情况下都能保持良好的显示效果。
- 灵活的排列方式:可以通过设置主轴和交叉轴的方向,以及项目在轴上的对齐方式,实现各种不同的排列效果。
- 支持换行:可以控制项目在容器中是否换行,以及换行的方式。
- 子元素属性失效:当元素设置为弹性布局时,一些传统的 CSS 属性,如 float、clear 和 vertical-align 可能会失效。
1.1 弹性布局案例
创建一个div,内部包含三个span
html
<style>
div {
width: 100%;
height: 150px;
background-color:red;
}
span {
background-color: green;
width: 100px;
}
</style>
<div>
<span>111</span>
<span>222</span>
<span>333</span>
</div>
此时看到的效果为:
当我们给div加上display: flex之后,效果为:
此时看到, span 有了高度, 不再是 "行内元素了"
再给 div 加上justify-content: space-around; 此时效果为:
此时可以看到这些 span 已经能够水平隔开了.
把 justify-content: space-around; 改为 justify-content: flex-end; 此时三个元素在右侧显示
1.2flex 布局基本概念
lex 是 flexible box 的缩写. 意思为 "弹性盒子".
任何一个 html 元素, 都可以指定为 display:flex 完成弹性布局.
flex 布局的本质是给父盒子添加 display:flex 属性, 来控制子盒子的位置和排列方式****.
基础概念 :
· 被设置为 display:flex 属性的元素, 称为 flex container
· 它的所有子元素立刻称为了该容器的成员, 称为 flex item
· flex item 可以纵向排列, 也可以横向排列, 称为 flex direction (主轴)
注意 :
当父元素设置为 display: flex 之后, 子元素的 float, clear, vertical-align 都会失效.
1.3常用属性
1.3.1justify-content
设置主轴上的子元素排列方式、使用前一定要确定好主轴方向
属性取值
代码示例:
html
<style>
div {
width: 100%;
height: 150px;
background-color:red;
display: flex;
}
span {
background-color: green;
width: 100px;
height: 100px;
}
</style>
<div>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</div>
未指定 justify-content 时, 默认按照从左到右的方向布局.
设置 justify-content: flex-end , 此时元素都排列到右侧了.
设置 jutify-content: center , 此时元素居中排列
设置 justify-content: space-around;
平分了剩余空间.
设置 justify-content: space-between;
先两边元素贴近边缘, 再平分剩余空间.
1.3.2align-items
设置侧轴上的元素排列方式
在上面的代码中, 我们是让元素按照主轴的方向排列, 同理我们也可以指定****元素按照侧轴方向排列.
取值和 justify-content 差不多.
理解 stretch(拉伸):
是 align-content 的默认值. 如果子元素没有被显式指定高度, 那么就会填充满父元素的高度、形如:
html
<style>
div {
width: 500px;
height: 500px;
background-color: green;
display: flex;
justify-content: space-around;
}
div span {
width: 150px;
background-color: red;
}
</style>
<div>
<span>1</span>
<span>2</span>
<span>3</span>
</div>
可以在div中加上align-items: center 实现垂直居中.并且在span中需要加上元素高度和宽度
注意: align-items 只能针对单行元素来实现. 如果有多行元素, 就需要使用 item-contents
2.案例实现:小广告
预期效果
测量结果:
代码示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Comatible" content="IE=edge"
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
width: 308px;
height: 209px;
border: #d8dad8 solid 2px;
background-color: #fcfffc;
margin: auto;
}
.title {
height: 40px;
border-bottom: 2px dotted #e8ebe8;
font-size: 18px;
padding-left: 20px;
padding-top: 15px;
}
.item {
font-size: 16px;
flood-color: #898b76;
padding-left: 25px;
line-height: 28px;
padding-top: 10px;
}
</style>
</head>
<body>
<div class="box">
<div class="title">广告板</div>
<div class="content">
<div class="item">赔钱清仓甩卖,全场一律八折</div>
<div class="item">赔钱清仓甩卖,全场一律八折</div>
<div class="item">赔钱清仓甩卖,全场一律八折</div>
<div class="item">赔钱清仓甩卖,全场一律八折</div>
</div>
</div>
</body>
</html>
3.案例实现:百度热榜
预期效果:
代码实现:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>百度热榜</title>
<style>
a {
color: blue;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
table {
width: 536px;
}
.title .col-1 {
font-size: 20px;
font-weight: bolder;
}
.col-1 {
width: 80%;
text-align: left;
}
.col-2 {
width: 20%;
text-align: center;
}
.icon {
background-image: url(./refresh.png);
width: 20px;
height: 20px;
background-size: 100% 100%;
display: inline-block;
vertical-align: bottom;
}
.content {
font-size: 18px;
line-height: 40px;
}
.content .col-1,.content .col-2 {
border-bottom: 2px solid #f3f3f3;
}
.num {
font-size: 20px;
color: #fffff3;
}
.first {
background-color: #f54545;
padding-right: 8px;
}
.second {
background-color: #ff8547;
padding-right: 8px;
}
.third {
background-color: #ffac38;
padding-right: 8px;
}
.other {
background-color: #8eb9f5;
padding-right: 8px;
}
</style>
</head>
<body>
<table cellspacing="0px">
<th class="titile col-1">百度热榜</th>
<th class="title col-2"><a href="#">换一换<span class="icon"></span></a></th>
<tr class="content">
<td class="col-1"><span class="num first">1</span><a href="#">黑子说话黑子说话黑子说话</a></td>
<td class="col-2">474万</td>
</tr>
<tr class="content">
<td class="col-1"><span class="second first">2</span><a href="#">黑子说话黑子说话黑子说话</a></td>
<td class="col-2">474万</td>
</tr>
<tr class="content">
<td class="col-1"><span class="third first">3</span><a href="#">黑子说话黑子说话黑子说话</a></td>
<td class="col-2">474万</td>
</tr>
<tr class="content">
<td class="col-1"><span class="other first">4</span><a href="#">黑子说话黑子说话黑子说话</a></td>
<td class="col-2">474万</td>
</tr>
</table>
</body>
</html>