两栏和三栏布局

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):

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会产生这样的效果:

然后将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;
}

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 三栏布局 三列自适应布局通常指两边定宽,中间部分宽度自适应。这里主要分为两大类,一类是基于position传统的实...
    ninja梅梅阅读 9,219评论 0 4
  • 定位 1、流动模型(Flow) 流动(Flow)模型是默认的网页布局模式。也就是说网页在默认状态下的 HTML 网...
    jiujiumi阅读 147评论 0 0
  • 三栏是CSS布局中常见的一种布局模式,顾名思义,就是将网页内容以三列的形式呈现。通常,三栏布局中的左栏和右栏是固定...
    bmwz110阅读 865评论 0 6
  • 为了提高工作效率,不在CSS布局上多次耗费时间,故记录此练习笔记。借鉴了大神【浪里行舟】的博客,文末有链接。 CS...
    月上秦少阅读 1,097评论 2 13
  • 海淀镇:最早记载于元初王恽的《中堂纪事》,距今720多年。海淀最初并不是聚落的名称,而是一滩浅水湖。“海淀”在历史...
    成功思维力阅读 278评论 0 0