1.利用浮动
将左右两栏分别设置为向左和向右浮动,然后中间栏通过设置overflow: hidden
来清除浮动的影响,从而实现自适应宽度。
<body><div class="container"><div class="left">左栏</div><div class="right">右栏</div><div class="middle">中间栏</div></div><style>.container {width: 100%;overflow: hidden;}.left {float: left;width: 200px;background-color: lightblue;}.right {float: right;width: 200px;background-color: lightgreen;}.middle {margin-left: 200px;/* 左侧栏的宽度 */margin-right: 200px;background-color: lightyellow;}</style>
</body>
2.postion
用绝对定位将左右两栏固定在两侧,中间栏通过设置左右边距来让出左右两栏的空间,实现自适应
为什么不使用绝对定位:
在三栏布局中,如果使用固定定位,左右两栏会一直固定在视口的两侧,不会随着中间内容的滚动而调整位置,这可能会导致在页面较长时,左右栏与中间内容的关联性变得很弱,视觉上也可能会显得不协调。
通过将包含三栏的容器元素设置为相对定位(position: relative
),然后将左右两栏设置为绝对定位,就可以使左右两栏相对于容器进行定位。这样,当中间内容滚动时,左右两栏会保持与中间内容的相对位置不变,视觉上更加协调
固定定位在布局上相对较为局限,因为它始终固定在视口的特定位置,不会随着页面内容的布局变化而调整。
在三栏布局中,中间自适应的部分可以根据内容的多少自动调整宽度,而左右两栏通过绝对定位可以固定在容器的两侧,不会受到中间内容宽度变化的影响
<body><div class="container"><div class="left">左栏</div><div class="right">右栏</div><div class="middle">中间栏</div></div><style>.container {position: relative;width: 100%;}.left {position: absolute;left: 0;width: 200px;background-color: lightblue;}.right {position: absolute;right: 0;width: 200px;background-color: lightgreen;}.middle {margin: 0 200px 0 200px;background-color: lightyellow;}</style>
</body>
3.display: flex;
将中间栏的flex
属性设置为1
,它会自动占据剩余的空间,实现自适应宽度。
<body><div class="container"><div class="left">左栏</div><div class="middle">中间栏</div><div class="right">右栏</div></div><style>.container {display: flex;}.left {width: 200px;background-color: lightblue;}.right {width: 150px;background-color: lightgreen;}.middle {flex: 1;background-color: lightyellow;}</style>
</body>
4.display: grid;
将中间栏的grid中间
属性设置为1fr
,它会自动占据剩余的空间,实现自适应宽度。
<body><div class="container"><div class="left">左侧栏</div><div class="center">中间栏</div><div class="right">右侧栏</div></div><style>.container {display: grid;grid-template-columns: 200px 1fr 200px;/* 左侧栏200px,中间栏自适应,右侧栏200px */height: 100px;/* 固定高度 */}.left,.right {background-color: #ebc4c4;/* 背景颜色 */}.center {background-color:#a5e1bf ;/* 背景颜色 */}</style>
</body>