目录
1.弹性布局
1.1 弹性布局案例
1.2flex 布局基本概念
1.3常用属性
1.3.1justify-content
1.3.2align-items
2.案例实现:小广告
3.案例实现:百度热榜
1.弹性布局
弹性布局(Flex布局)是一种用于创建自适应和响应式布局的CSS布局模型。它提供了一种简单而强大的方式来排列和对齐页面中的元素,使其在不同的屏幕尺寸和设备上能够保持良好的显示效果
弹性布局的主要特点包括:
- 简单易用:相比传统的布局方式,弹性布局使用相对简单的属性来控制布局,减少了复杂的 CSS 代码。
- 响应式设计:能够自动适应不同的屏幕尺寸和设备,使布局在各种情况下都能保持良好的显示效果。
- 灵活的排列方式:可以通过设置主轴和交叉轴的方向,以及项目在轴上的对齐方式,实现各种不同的排列效果。
- 支持换行:可以控制项目在容器中是否换行,以及换行的方式。
- 子元素属性失效:当元素设置为弹性布局时,一些传统的 CSS 属性,如 float、clear 和 vertical-align 可能会失效。
1.1 弹性布局案例
创建一个div,内部包含三个span
<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
设置主轴上的子元素排列方式、使用前一定要确定好主轴方向
属性取值
代码示例:
<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 的默认值. 如果子元素没有被显式指定高度, 那么就会填充满父元素的高度、形如:
<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.案例实现:小广告
预期效果
测量结果:
代码示例:
<!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.案例实现:百度热榜
预期效果:
代码实现:
<!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>