前端学习之旅(3)

网友投稿 557 2022-05-30

问题:假设容器的高度默认100px,其中左栏、右栏的宽度各为300px,中间的宽度自适应的三栏布局如何写?

左右固定,中间自适应

中间栏放在文档流前面,保证优先加载。

方法1:浮动

方法2:绝对定位。

方法3:flexbox。移动开发里经常用到。

方法4:表格布局 table。已经淘汰

方法5:网格布局 grid

方法6:双飞翼布局

方法7:圣杯布局

HTML代码:

//注意元素次序

Left
Right
Main

CSS 代码:

//CSS reset body,html { height:100%; padding: 0; margin: 0 } //左栏左浮动 .left { float: left; width: 300px; height: 100px; background: red; } //中间自适应 .main { background: blue; height: 100px; margin:0px 200px 0px 100px; } //右栏右浮动 .right { background: red; width: 300px; float: right; height: 100px; }

这种方式代码足够简洁与高效,也容易理解

HTML 代码

我是 left
我是 right

绝对定位解决方案

我是 center

CSS 代码

.layout.absolute .left-center-right { position: relative; } .layout.absolute .left { position: absolute; left: 0; width: 300px; background: red; } /* 【重要】中间的区域,左侧定位300px,右侧定位为300px,即可完成。宽度会自使用 */ .layout.absolute .center { position: absolute; left: 300px; right: 300px; background: green; } .layout.absolute .right { position: absolute; right: 0; width: 300px; background: blue; }

该方法有个明显的缺点,就是如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况。

将中间盒子放置html最开始,保证优先加载

使用flex order属性决定三个盒子顺序,左,中,右

左盒子和右盒子固定宽度,中间盒子flex:1

HTML 代码:

CSS 代码:

HTML 代码:

我是 left

网格布局解决方案

我是 center
我是 right

CSS 代码:

HTML 代码

双飞翼布局

CSS 代码:

.container { min-width: 600px;//确保中间内容可以显示出来,两倍left宽+right宽 } .left { float: left; width: 300px; height: 100px; background: red; margin-left: -100%; } .center { float: left; width: 100%; height: 100px; background: yellow; } .center .inner { margin: 0 300px; //新增部分 } .right { float: left; width: 300px; height: 100px; background: blue; margin-left: -200px; }

HTML 代码

圣杯布局

CSS 代码:

.container { padding-left: 300px;//为左右栏腾出空间 padding-right: 300px; } .left { float: left; width: 300px; height: 100px; background: red; margin-left: -100%; position: relative; left: -300px; } .center { float: left; width: 100%; height: 100px; background: yellow; } .right { float: left; width: 300px; height: 100px; background: blue; margin-left: -300px; position: relative; right: -300px; }

相关解释如下:

(1)中间部分需要根据浏览器宽度的变化而变化,所以要用100%,这里设左中右向左浮动,因为中间100%,左层和右层根本没有位置上去

(2)把左层margin负300后,发现left上去了,因为负到出窗口没位置了,只能往上挪

(3)按第二步这个方法,可以得出它只要挪动窗口宽度那么宽就能到最左边了,利用负边距,把左右栏定位

(4)但由于左右栏遮挡住了中间部分,于是采用相对定位方法,各自相对于自己把自己挪出去,得到最终结果

圣杯布局是利用父容器的左、右内边距+两个从列相对定位; 双飞翼布局是把主列嵌套在一个新的父级块中利用主列的左、右外边距进行布局调整

HTML web前端 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LiteOS双向链表使用详解
下一篇:【F#从入门到实战】03. F#自定义操作符
相关文章