面试官:如何实现三栏布局?我能写五种方法!(下)
前言
在上文中我们介绍了三种经典的方法去实现三栏布局,而在本文中我们将介绍更灵活实用的flex布局和grid布局
flex布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.page {
height: 200px;
display: flex;
}
.left,
.right {
width: 200px;
background-color: #98eea4;
order: 2;
}
.content {
background-color: #ea8265;
flex-grow: 1;
order: 1;
}
</style>
</head>
<body>
<div class="page">
<div class="left">广告位</div>
<div class="content">主体内容</div>
<div class="right">广告位</div>
</div>
</body>
</html>
我们依旧先在全局清除所有的内外边距。然后我们在.page中提供display: flex;
的属性,让它成为一个弹性容器。然后我们依旧将左右侧栏的宽度设置成两百,这里我们增加了 order: 2;
样式,这个样式确定了侧栏在布局中的排列顺序,数值越大,排列越靠后。然后我们内容部分添加了order: 1;
确保内容区域在布局中排列在最前面。
Flex布局的内容区域可以自适应宽度并填充剩余空间。Flexbox的
flex-grow
属性和order
属性在布局中起到了关键作用,分别用于自适应宽度分配和元素排序,这体现了Flexbox布局的灵活性和便捷性。
grid布局
<style>
* {
margin: 0;
padding: 0;
}
.page {
height: 200px;
width: 100vw;
display: grid;
grid-template-columns:200px auto 200px;
}
.left,
.right {
height: 200px;
background-color: #98eea4;
}
.content {
height: 200px;
background-color: #fedfc5;
}
</style>
由于只有CSS样式有差异,这里我就只放上css样式的代码。在这个布局的代码中稍有差异的是我们在.page中使用了 display: grid;
样式,将容器转换为了Grid布局容器。然后用grid-template-columns: 200px auto 200px;
定义了三列的宽度。第一列和第三列固定为200像素宽度,中间的.content
为自动调整宽度,会填充剩余空间。我们就不用麻烦的去调整样式。
除了这5种方法外还有没有其他的布局方式呢? -当然是有的,我们可以自己用定位的方法来实现三栏布局
<style>
7 *{
8 margin: 0;
9 padding: 0;
10 }
11 .page{
12 height: 200px;
13 font-size: 0; /* 用于消除 inline-block 间的空白 */
14 }
15 .item{
16 display: inline-block;
17 vertical-align: top; /* 保证垂直对齐 */
18 font-size: initial; /* 重置内部字体大小 */
19 }
20 .one, .three{
21 width: 200px;
22 height: 100%;
23 background-color: green;
24 }
25 .two{
26 width: calc(100% - 400px); /* 改为相对于父元素宽度计算 */
27 background-color: pink;
28 height: 100%;
29 }
30</style>
在这里我们添加了vertical-align: top;
确保所有inline-block元素顶部对齐。在.two中我们将宽度计算方式改为calc(100% - 400px)
,这样中间栏的宽度计算基于父元素的百分比宽度,更加灵活且符合预期的三栏布局逻辑。
总结
以上就是我们介绍三栏布局的全部内容了。在这两篇文章中我们介绍了多种三栏布局的方法。以后当面试官让你手搓一个三栏布局的方法时,你能不能想起其中的一种方法呢?如果这篇文章对你有帮助的话,那就留下你的点赞和收藏吧!^_^
转载自:https://juejin.cn/post/7372084329080012810