三栏布局、两栏布局都是我们在平时项目里经常使用的,今天我们来玩一下三栏布局的四种写法,以及它的使用场景。

所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式。

1.绝对定位法

<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
    /* 简单的进行CSS reset */
body,
html {
height: 100%;
padding: 0px;
margin: 0px;
} /* 左右绝对定位 */
.left,
.right {
position: absolute;
top: 0px;
background: beige;
height: 100%;
} .left {
left: 0;
width: 100px;
} .right {
right: 0px;
width: 200px;
} /* 中间使用margin空出左右元素所占据的空间 */
.main {
margin: 0px 200px 0px 100px;
height: 100%;
background: gray;
}

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

2. 圣杯布局

//注意元素次序
<div class="main">Main</div>
<div class="left">Left</div>
<div class="right">Right</div>
/* CSS reset */
body,html{
height:100%;
padding: 0;
margin: 0
}
/* 父元素body空出左右栏位 */
body {
padding-left: 100px;
padding-right: 200px;
}
/* 左边元素更改 */
.left {
background: beige;
width: 100px;
float: left;
margin-left: -100%;
position: relative;
left: -100px;
height: 100%;
}
/* 中间部分 */
.main {
background: gray;
width: 100%;
height: 100%;
float: left;
}
/* 右边元素定义 */
.right {
background: beige;
width: 200px;
height: 100%;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}

相关解释如下:

  • (1)中间部分需要根据浏览器宽度的变化而变化,所以要用100%,这里设左中右向左浮动,因为中间100%,左层和右层根本没有位置上去
  • (2)把左层margin负100后,发现left上去了,因为负到出窗口没位置了,只能往上挪
  • (3)按第二步这个方法,可以得出它只要挪动窗口宽度那么宽就能到最左边了,利用负边距,把左右栏定位
  • (4)但由于左右栏遮挡住了中间部分,于是采用相对定位方法,各自相对于自己把自己挪出去,得到最终结果

3. 双飞翼布局

<div class="main">
<div class="inner">
Main
</div>
</div>
<div class="left">Left</div>
<div class="right">Right</div>
/* CSS reset */
body,html {
height:100%;
padding: 0;
margin: 0
}
body {
/*padding-left:100px;*/
/*padding-right:200px;*/
}
.left {
background: beige;
width: 100px;
float: left;
margin-left: -100%;
height: 100%;
/*position: relative;*/
/*left:-100px;*/
}
.main {
background: gray;
width: 100%;
float: left;
height: 100%;
}
.right {
background: beige;
width: 200px;
float: left;
margin-left: -200px;
height: 100%;
/*position:relative;*/
/*right:-200px;*/
}
/* 新增inner元素 */
.inner {
margin-left: 100px;
margin-right: 200px;
}

圣杯布局看起来是复杂的,后期维护性也不是很高,在淘宝UED的探讨下,出来了一种新的布局方式就是双飞翼布局。

代码如上。增加多一个div就可以不用相对布局了,只用到了浮动和负边距。和圣杯布局差异的地方已经被注释。

4. 浮动

    <div class="left">Left</div>
<div class="right">Right</div>
<div class="main">Main</div>
/* CSS reset */
body,html {
height:100%;
padding: 0;
margin: 0
}
/* 左栏左浮动 */
.left {
background: beige;
width: 100px;
float: left;
height: 100%;
}
/* 中间自适应 */
.main {
background: gray;
height: 100%;
margin:0px 200px 0px 100px;
}
/* 右栏右浮动 */
.right {
background: beige;
width: 200px;
float: right;
height: 100%;
}

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

提点

四种方法其实只有圣杯布局和双飞翼布局较难理解,但实际上理解了圣杯布局,双飞翼布局自然就理解了。

CSS系列,三栏布局的四种方法的更多相关文章

  1. CSS三栏布局的四种方法

    总括: 不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具 ...

  2. css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 <div class="left">左边</div> <div class=" ...

  3. Layout 实现三栏布局的几种方法

    https://github.com/ljianshu/Blog/issues/14    布局参考 https://github.com/ljianshu/Blog/issues/38  响应式那点 ...

  4. CSS实现三栏布局(5种)

    常见的布局方式: float布局.Position定位.table布局.弹性(flex)布局.网格(grid)布局 那么我们就是用以上5种方式完成三栏布局,不过前提是左右宽度(假如左右宽度为300px ...

  5. 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应

    前端常问的面试题,题目:假设高度一定,请写出三栏布局,左右宽度300px,中间自适应. 看到这里我希望你能停下来思考几分钟, 1分钟~2分钟~3分钟~4分钟~5分钟! 好了,那么你想出了几种答案呢? ...

  6. css+div制作圆角矩形的四种方法

    圆角矩形一向是设计师最倾心的一种设计,因为他们可以让整个网页生动起来,不那么死板,所以,作为一个优秀的网页设计师,学会一种或多种编辑圆角矩形的方法是必不可少的,而且圆角矩形应用范围极广,一个网页内的所 ...

  7. 【CSS】三栏布局的经典实现

    要求:自适应宽度,左右两栏固定宽度,中间栏优先加载: <!DOCTYPE html> <html> <head> <title>layout</t ...

  8. css实现三栏布局,两边定宽,中间自适应

    1.利用定位实现 css代码如下: .box{overflow: hidden;height: 100px;margin: 10px 0;} .box>div{height: 100%;} #b ...

  9. Spring Ioc源码分析系列--容器实例化Bean的四种方法

    Spring Ioc源码分析系列--实例化Bean的几种方法 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到bean真正通过那些方式实例化出来的时候,并没有继续分 ...

随机推荐

  1. 面试官问我JVM内存结构,我真的是

    面试官:今天来聊聊JVM的内存结构吧? 候选者:嗯,好的 候选者:前几次面试的时候也提到了:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」 候选者:而JVM的内 ...

  2. Tomcat 内存马(二)Filter型

    一.Tomcat处理请求 在前一个章节讲到,tomcat在处理请求时候,首先会经过连接器Coyote把request对象转换成ServletRequest后,传递给Catalina进行处理. 在Cat ...

  3. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  4. css三大特性 & 选择器的权重

    层叠性 层叠性是指当一个标签被设置了多个重复的样式的时候会发生冲突,一个属性会覆盖另外一个属性. 覆盖性原则: 层叠性主要遵循的原则是就近原则,在不考虑优先级的情况下,在多个样式中最终生效的样式是离标 ...

  5. 六问六答理解ForkJoin原理

    摘要:ForkJoin线程池是将任务分割为子任务,有可能子任务还是很大,还需要进一步拆解,最终得到足够小的任务. 本文分享自华为云社区<ForkJoin线程池的学习和思考>,作者:brea ...

  6. js实现一个小游戏(飞翔的jj)

    js实现一个小游戏(飞翔的jj) 源代码+素材图片在我的仓库 <!DOCTYPE html> <html lang="en"> <head> & ...

  7. docker file 笔记

    FROM    # FROM scratch,  FROM centos, FROM ubuntu:latest LABEL RUN  # 每运行一次RUN,image都会生成新的一层,为了美观,避免 ...

  8. Mysql - date、datetime、timestamp 的区别

    date.datetime 的区别 顾名思义,date 日期,datetime 日期时间,所以 date 是 datetime 的日期部分 MySQL 以 YYYY-MM-DD hh:mm:ss 格式 ...

  9. updatexml和extractvalue函数报错注入

    updatexml()函数报错注入 updatexml (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XM ...

  10. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...