三列布局:两边定宽,中间自适应!

看到这个问题,我第一眼想的就是两边定宽float左右,中间加一个margin宽度自适应或者直接设一个overflow:hidden触发bfc机制,这样也可以,看上去也没什么问题,但是html中div的顺序却是

<div class = "left"></div>

<div class = "right"></div>

<div class = "main"></div>

(就用class名字来代表它的位置)通常我们的主体内容是放在main里面的,但是在html的顺序中确是最后加载,因为如果最先加载main,main占据整行下面的left,right就不会自己浮动上去,所以这样肯定是不完美的!

所以接下来我们介绍的两种方式就是完美的实现这种布局,让main最先加载,而且完美的解决兼容性问题。

第一种叫做圣杯布局:

思路是main left right全部float:left,这样,main就会不再具有块级元素的特性main的宽度设置100%同时,此时给left设置一个margin-left:-100%,给right设置一个margin-right:-它自身的宽度,这样我们就硬性的把它们放到了一行上,但是实际上此时left和right是覆盖在了main的两边,这样肯定是不行的!因为会遮盖一些我门想要展示的东西!所以我们还需要做一些事情。这里有两种方法第一种是将main的box-sizing变成border-box,然后直接给main设置padding,padding-left和padding-right分别是两边定宽元素的宽度,我们做的首先是改变盒模型这样加padding后不会改变自己在浏览器中占的位置,然后在设置padding就可以了,但是box-sizing这个属性是css3的属性,所以兼容性没有那么好,如果你对兼容性的要求没有那么高,这是一种很好的选择!如果你对兼容性要求比较严格,那么就需要用到我们的第二种方法:首先我们得我们的 main left right加一个父盒子,为父盒子设置padding,然后再为left right分别设置为相对定位,然后设置一个margin的负值就达到了目的!这样是不是豁然开朗,原理其实很简单,下面是我们的css代码:

        .box{
padding: 0 200px;
}
.middle{
width: 100%;
background: pink;
height: 200px;
float: left;
}
.left{
float: left;
width: 200px;
height: 200px;
background: skyblue;
margin-left: -100%;
position: relative;
left: -200px;
}
.right{
float: left;
width: 200px;
height: 200px;
background: skyblue;
margin-left: -200px;
position: relative;
right: -200px;
}

html:

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

 我把设置box-sizing的代码也放在这儿,大家可以参考!

        *{
box-sizing: border-box;
}
.middle{
width: 100%;
background: pink;
height: 200px;
float: left;
padding: 0 200px;
}
.left{
float: left;
width: 200px;
height: 200px;
background: skyblue;
margin-left: -100%;
}
.right{
float: left;
width: 200px;
height: 200px;
background: skyblue;
margin-left: -200px;
}

 下面是我们要说的第二种方式:双飞翼布局(名字都不是我起的)

如果你好好看过上一种布局的原理,这个理解起来就很快了!它首先也需要把main left right硬性的放在同一行,不过是换了一种让main内容全部显示的方法,方法就是在main的内部,加一个div,这个div设置一个margin,left rigth的值分别是margin-left和margin-right的值!这样真正要显示的内容实际放在middle>div里!是不是很好理解。

两个原理都明白了之后,双飞翼和圣杯的区别也显而易见!他们都可以完美的实现布局,解决兼容性的问题,但是双飞翼所需的代码明显比圣杯的少,而且思路更加简单一点,所有略胜一筹,实际上双飞翼就是圣杯的优化!青出于蓝而胜于蓝是很正常的事情!

下面是双飞翼布局的代码!大家参考一下

css:

        .middle{
width: 100%;
height: 200px;
float: left;
background: skyblue;
}
.middle>div{
margin:0 100px;
}
.left{
width: 100px;
float:left;
height: 200px;
background: pink;
margin-left: -100%;
} .right{
margin-left:-100px;
width: 100px;
float:left;
height: 200px;
background: pink;
}

html

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

最终效果图!二者是一样的

手打博客,转发要注明噢!

css三列布局之双飞翼pk圣杯的更多相关文章

  1. CSS三列布局之左右宽度固定,中间元素自适应问题

    最近学到了几种关于左右固定宽度,中间自适应的三列布局的方法,整理了一下,在这里跟大家一起分享分享,其中有什么不足的还望各位给指导指导哈. 首先我想到的是float——浮动布局 使用浮动,先渲染左右两个 ...

  2. [CSS布局]简单的CSS三列布局

    前言 公司终于可以上外网了,近期在搞RN的东西,暂时脑子有点晕,等过段时间再来写点总结.倒是最近有个新学前端的同学经常会问一些基础知识,工作空闲写了小Demo给他看,全是很基础的知识,纯粹是顺便记录在 ...

  3. CSS三列布局

    × 目录 两侧定宽中间自适应 两列定宽一侧自适应 中间定宽两侧自适应一侧定宽两列自适应三列自适应总结 前面的话 前面已经介绍过单列定宽单列自适应和两列自适应的两列布局.本文介绍三列布局,分为两侧定宽中 ...

  4. css 三列布局

    前面的话 前面已经介绍过单列定宽单列自适应和两列自适应的两列布局.本文介绍三列布局,分为两侧定宽中间自适应.两列定宽一侧自适应.中间定宽两侧自适应.一侧定宽两列自适应和三列自适应这五种情况 两侧定宽中 ...

  5. CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼

    今天聊聊一个经典的布局实例: 实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化 可能很多朋友已经笑了,这玩意儿通过双飞翼布局就能轻松实现.不过,还请容我在双飞 ...

  6. css常见的各种布局下----三列布局

    css 三列布局,左右固定宽度右边自适应 1不使用定位,只使用浮动可以实现左右固定,中间宽度自适应布局 1.1.1 自适应部分一定要放第一个位子,使用浮动,并且设置宽度为100%,不设置浮动元素内容不 ...

  7. 两列布局(浮动、定位、flex)和三列布局(圣杯、双飞翼、flex)

    demo 各种布局演示 https://jsfiddle.net/mayufo/qp890peq/1/ 两栏布局 浮动 <div class="box1"> <d ...

  8. CSS如何实现三列布局?如果两端固定、中间是自适应又该如何做?

    使用浮动布局来实现 左侧元素与右侧元素优先渲染,分别向左和向右浮动 中间元素在文档流的最后渲染,并将 width 设为 100%,则会自动压到左右两个浮动元素的下面,随后在中间元素中再添加一个div元 ...

  9. 简单的CSS网页布局--三列布局

    三列布局其实不难,不过要用到position:absolute这个属性,因为这个属性是基于浏览器而言,左右部分各放在左右侧,空出中间一列来实现三列布局. (一)三列布局自适应 <!DOCTYPE ...

随机推荐

  1. thinkphp中插入ueditor编辑器的代码

    1.需要在header中加入以下js内容:<script type="text/javascript" src="{$smarty.const.__ROOT__}/ ...

  2. intellij idea 汉化

    intellij idea是IDEA的全称,现在最新版本的是intellij idea 16.这是一款公认的比较好的用于编程的软件.但是每次软件的发布都是全英文的,这让英文不好的人很是头疼.现在我告诉 ...

  3. win10环境下适应pip安装autobahn提示认证失败的问题

    工作需要看一下websocket的东西,然后使用autobahn三方,但是使用pip install安装怎么也安装不上,问了很多网站,都说的升级pip,可是每一个鸡巴管用的,不过还是谢谢他们,现在我只 ...

  4. 解决uni-app props 传递数组修改后不能使用问题

    1.子组件页面结构 //NoticesMarquee 组件 <view v-for="(item, index) in tempList" :key="index& ...

  5. Vue初接触 stage1

    开始学Vue辣!哈哈哈哈哈真的好好玩啊Vue!这个写法我真的太爱了! stage1 4-27 先写一下安装Vue devtools时遇到的问题(说来神奇,我是写第一个实例的时候试着在控制台打印了这个空 ...

  6. 转发自:一像素 十大经典排序算法(动图演示)原链接:https://www.cnblogs.com/onepixel/articles/7674659.html 个人收藏所用 侵删

    原链接:https://www.cnblogs.com/onepixel/articles/7674659.html     个人收藏所用   侵删 0.算法概述 0.1 算法分类 十种常见排序算法可 ...

  7. Linux部署笔记分享

    # Linux部署 ## 安装lrzsz1. 安装lrzsz: yum -y install lrzsz2. 进入tmp目录3. rz 上传安装文件 jdk-8u65-linux-x64.tar.gz ...

  8. Delphi调用C#编写的WebService 注意事项

                            返回的字段值区分大小写,c#和Delphi的字段要一致

  9. Python学习日记 --day4

    list列表: # # 列表 ''' # 增 # li = [1,'qwer','小明',[1,2,'qwe']] # print(li[0],type(li)) # 跟字符串的操作方法是一样的,返回 ...

  10. Spark环境搭建

    转载:https://blog.csdn.net/songhaifengshuaige/article/details/79480491