美文网首页
两栏和三栏布局

两栏和三栏布局

作者: 萱苏m | 来源:发表于2019-12-14 16:56 被阅读0次

1、两栏布局(左侧固定宽度,右侧自适应)

<div class="box">
    <div class="left-box">left</div>
    <div class="right-box">right</div>
</div>
*{
    padding:0;
    margin:0;
}
.box{
     position: relative;
    width:100%;
    height:300px;
}
.left-box{
    background:pink;
    height:100%;
}
.right-box{
    background: darkcyan;
    height:100%;
}

1)浮动

(1).单浮动

.left-box{
    width:400px;
    float:left;
}
.right-box{
   margin-left:400px;
}

(2).双浮动

 .left-box{
    width:400px;
    float:left;
}
.right-box{
    float: left;
    width:calc(100% - 400px); // 此处如果不写宽度的话,宽度就是被内容撑起来的宽度
}

脱离的文档流,浮动需要在父元素上清除浮动

2)绝对定位

.left-box{
    position: absolute;
    width:400px;
}
.right-box{
    margin-left:400px;
}

绝对定位和浮动基本一致,其两者都脱离的文档流。

3)flex布局

.box{
    display: flex;
}
.left-box{
    width:400px;
}
.right-box{
    flex:1;
}

以上是最常用的三种,还有几种其他的:

4)双inline-block方案

.box{
    box-sizing: content-box;
    font-size: 0;     /* 消除空格的影响 */
}

.box .left-box,
.box .right-box {
    display: inline-block;
    vertical-align: top;    /*顶端对齐*/
    font-size: 14px;
    box-sizing: border-box;
}

.box .left-box {
    width: 400px;
}
.box .right-box {
    width: calc(100% - 400px);
}

5) float+BFC

BFC 规则————块格式化上下文

.box {
    overflow: auto;
}

.box .left-box {
    float: left;
    margin-right: 20px; /*两个div之间的间隔*/
}

.box .right-box {
    margin-left: 0;
    overflow: auto;
}

这种方法左侧可以不设置宽度,右边也不用计算宽度,左边由内容自动撑起,右侧块状元素自适应宽度

6)grid布局

 .box {
    display: grid;
    grid-template-columns: 400px auto;
    /*或者下面这句*/
    grid-template-columns: 400px 1fr;
    align-items: start;
}

7)table布局

 .box{
    display: table;
    width: 100%;
}
.left-box{
    display: table-cell;
    width:400px;
}
.right-box{
    /* width: 100%; */ /*写或者不写都行*/
}

2、三栏布局(左右固定宽度,中间自适应)

<div class="box">
    <div class="left-box">left</div>
    <div class="middle-box">middle</div>
    <div class="right-box">right</div>
</div>
*{
    padding:0;
    margin:0;
}
.box{
    position: relative;
    width:100%;
    height:300px;
}
.left-box{
    background:pink;
    height:100%;
    opacity: 0.5;
}
.middle-box{
    background:rgb(163, 109, 28);
    height:100%;
}
.right-box{
    background: darkcyan;
    height:100%;
}

1) grid布局

.box{
   display: grid;
   grid-template-columns: 100px auto 240px;
}

目前grid布局的兼容性还不是很好。如下图(2019-07-22):

WX20190722-162758.png

2) flex

.box{
    display: flex;
}
.left-box{
    width:100px;
}
.middle-box{
    flex:1;
}
.right-box{
    width:240px;
}

3)浮动

(1) 每个元素都浮动(父元素要清除浮动)--(圣杯布局)

.left-box{
    float:left;
    width:100px;
}
.middle-box{
    float: left;
    width:calc(100% - 340px); /*此处必须计算中间元素的宽度*/
}
.right-box{
    float:right; /*此处float:left;均可以*/
    width:240px;
}

(2) 只两边左右浮动

先看下面一个"奇怪"的结果:

.left-box{
    float:left;
    width:100px;
}
.middle-box{ /*中间div不用写宽度*/
    margin-left:100px;
    margin-right:240px; 
}
.right-box{
    float:right;
    width:240px;
}

html不动,采用上面的css会产生这样的效果:

WX20190722-163812.png

然后将html中中间自适应的div放到左右浮动的两div后面三个div就都可以处于一条线上,且中间div自适应宽度:

<div class="box">
    <div class="left-box">left</div>
    <div class="right-box">right</div>
    <div class="middle-box">middle</div>
</div>

这是因为float的元素不占文档流。如果middle-box在第二个的时候,就占了,所以下一个块级元素会被放在下一行

(3) 圣杯布局

<div class="box">
    <div class="middle-box">middle</div>
    <div class="left-box">left</div>
    <div class="right-box">right</div>
</div>
.box{
    position: relative;
    /* width:100%; */
    height:300px;
}
.left-box{
    background:pink;
    height:100%;
    opacity: 0.5;
}
.middle-box{
    background:rgb(163, 109, 28);
    height:100%;
}
.right-box{
    background: darkcyan;
    height:100%;
}
.box{
    padding-left: 100px;
    padding-right:240px;
}
.left-box{
    float:left;
    width:100px;
    margin-left: -100%;
    position: relative;
    left: -100px;
}
.middle-box{
    float: left;
    width:100%; 
}
.right-box{
    float:left;
    width:240px;
    margin-left: -240px;
    position: relative;
    right: -240px;
}

此时中间的元素在最前面。且父元素不能有width:100%;,中间自适应的元素宽度为100%;(太复杂不好用。)

(4) 双飞翼布局

*{
    padding:0;
    margin:0;
}
.middle-box {
    float: left;
    width: 100%;
}
.content {
    height: 200px;
    margin-left: 110px;
    margin-right: 220px;
    background-color: green;
}
    
.middle-box::after {
    display: block;
    content: '';
    font-size: 0;
    height: 0;
    clear: both;
    zoom: 1;
}
.left-box {
    float: left;
    height: 200px;
    width: 100px;
    margin-left: -100%;
    background-color: red;
}
.right-box {
    width: 200px;
    height: 200px;
    float: left;
    margin-left: -200px;
    background-color: blue;
}  

双飞翼布局的前两步和圣杯布局一样,只是处理中间栏部分内容被遮挡问题的解决方案有所不同:

既然main部分的内容会被遮挡,那么就在main内部再加一个content,通过设置其margin来避开遮挡,问题也就可以解决了;(不好用)

4)绝对定位

.left-box{
    position: absolute;
    width:100px;
}
.middle-box{
    position: absolute;
    left: 100px;
    right: 240px;
}
.right-box{
    position: absolute;
    right:0;
    width:240px;
}

5)table布局

.box{
    display: table;
}
.left-box{
    display: table-cell;
    width:100px;
}
.middle-box{
    display: table-cell;
}
.right-box{
    display: table-cell;
    width:240px;
}

这种布局方式能使得三栏的高度是统一的

相关文章

  • 用CSS实现布局(两栏布局,多栏布局)

    在网页上的布局比较经典的是两栏布局和三栏布局。下面简单总结自己对这两种布局的实现过程。 两栏布局 两栏布局是主内容...

  • 两栏布局和三栏布局

    两栏布局 1、左侧固定宽度,右侧自适应 方法一: 左侧设置float:left,右侧设置margin-left为左...

  • 两栏布局和三栏布局

    一、两栏布局 左边固定长度,右边自适应 1. 浮动布局 + BFC 2. 浮动布局 / 绝对定位 + 外边距 3....

  • 布局

    单栏布局两栏布局三栏布局风景列表卡片

  • 两栏和三栏布局

    1、两栏布局(左侧固定宽度,右侧自适应) 1)浮动 (1).单浮动 (2).双浮动 脱离的文档流,浮动需要在父元素...

  • CSS布局分类

    两栏布局 三栏布局 双飞翼布局 圣杯布局

  • Flex布局

    四栏布局 两栏布局 三栏布局 平均布局 flex布局 flex-direction:定义主轴方向 row: 元素摆...

  • CSS布局

    1. 单栏布局 inline-block Flex布局 2. 两栏布局 Float布局 Flex布局 3. 三栏布...

  • CSS Flex实现各种布局

    实现两栏布局 实现栅格布局 实现三栏布局 附录 双飞翼布局 圣杯布局

  • CSS布局知识点

    双飞翼布局 (淘宝UED对圣杯布局的升级优化) 圣杯布局和双飞翼布局的实现(三栏布局),都是左右两栏固定宽度,中间...

网友评论

      本文标题:两栏和三栏布局

      本文链接:https://www.haomeiwen.com/subject/gjthnctx.html