三列布局

本篇讲三列布局,面试常考题,自己总结的,如有什么问题,欢迎指出!我会用红色标注出主要作用部分,都是最精简的写法,,没有多余的修饰。

布局方式一:两边固定中间自适应

1.flex布局

思路:将父元素box设为display:flex;可将box设置为弹性盒模型进行布局(如果对flex不了解,可点击打开链接学习)

#box{

width:100%;

height:100px;

display:flex;

margin:10px;

}

#left,#right{

width:200px;

height:100px;

margin:10px;

background-color:#999;

}

#center{

flex:1;

height:100px;

margin:10px;/*左右margin不会叠加*/

background-color:#f00;

}

left
center
right

2.利用浮动(float)

让左右元素浮动,缺点是中间元素必须置于二者之后,不然right元素会进入下一行

.left,.right{

width:200px;

height:200px;

background-color:#999;

}

.left{

float:left;

}

.right{

float:right;

}

.center{

margin:0 200px;

height:300px;

background-color:#f00;

}

left
right
center

3.利用绝对定位(position)

center居中并利用margin为左右两边留出位置,左右绝对定位

css三列布局

/*左右固定,中间自适应 利用绝对定位*/

.container{

width: 100%;

height: 100%;

position: relative;

}

.left{

position: absolute;

left: 0;

top: 0;

width: 400px;

height: 200px;

background-color: black;

color:#fff;

}

.center{

/*width: auto;*/ /*如果没有这一句,那么,center这个div的文字就不会自动换行*/

margin: 0 400px;

height: 400px;

background-color: yellow;

}

.right{

position: absolute;

top: 0;

right: 0;

width: 400px;

height: 300px;

background-color: red;

}

left
center
right

4.对中间的宽度进行calc计算

三个元素都向左浮动,左右定宽,中间的对其进行计算,让100%宽度减去左右宽度,即为中间宽度。

.container{

overflow: hidden;

}

.left,.right{

float: left;

width: 100px;

background:red;

}

.center{

float: left;

width:calc(100% - 200px);

background:yellow;

}

left
center
right

5.双飞翼布局(重点来了)

目的:为了优先显示中间主要部分,浏览器渲染引擎在构建和渲染渲染树是异步的(谁先构建好谁先显示),故在编写时,先构建中间main部分,但由于布局原因,将left置于center左边,故而出现了双飞翼布局。

body {min-width: 550px;}

.col {float: left;}

#main {

width: 100%;

height: 200px;

background-color: #ccc;

}

#main-wrap {

margin: 0 190px;/*这是圣杯和双飞翼最明显的区别,在main内部使用的是margin,而圣杯是直接在container部分使用padding*/

}

#left,#right {

width: 190px;

height: 200px;

background-color: #0000FF;

}

#left{

margin-left: -100%;

}

#right {

margin-left: -190px;

background-color: #FF0000;

}

#main
#left
#right

这种布局的好处是:两边(left和right)不会盖住中间(center)部分,left和right盖住的是wrap元素的两边,即main-wrap的margin部分。

6.圣杯布局(也是重点)

优先渲染主要部分,此部分参考了木羽zwwill

.wrapper {

padding: 0 100px;

overflow:hidden;

}

.col {

position: relative;

float: left;

}

.main {

width: 100%;

height: 200px;

background:yellow;

}

.left,.right {

width: 100px;

height: 200px;

background:red;

}

.left{

margin-left: -100%;

left: -100px;

}

.right {

margin-left: -100px;

right: -100px;

}

main

left

right

圣杯布局的缺点:正常情况下是没有问题的,但是特殊情况下就会暴露此方案的弊端,如果将浏览器无线放大时,「圣杯」将会「破碎」掉。如图,当main部分的宽小于left部分时就会发生布局混乱。

圣杯布局和双飞翼的区别:(按我自己理解)

圣杯布局是整体使用了一个container(上例的wrapper),将三列放入其中,left和right占据的是wrapper的padding-left和 padding-right(上例第八行padding:0 100px;)。

双飞翼布局是在center部分多加了一个节点元素,left和right部分的位置在main-wrap的margin(magin-left和margin-right)部分。

#main

布局方式二:两边自适应中间固定

1.css3布局

目前没有浏览器支持 box-flex 属性。Firefox 支持替代的 -moz-box-flex 属性。Safari、Opera 以及 Chrome 支持替代的 -webkit-box-flex 属性。

box-flex 属性规定框的子元素是否可伸缩其尺寸。提示:可伸缩元素能够随着框的缩小或扩大而缩写或放大。只要框中有多余的空间,可伸缩元素就会扩展来填充这些空间。

div[class=me] {

display: -webkit-box;

}

div div {

background: red;

height: 100px;

}

div div:nth-child(1) {

-webkit-box-flex:1;

}

div div:nth-child(2) {

width: 800px;

background: #ccc;

}

div div:nth-child(3) {

-webkit-box-flex:1;

}

left
center
right

2.flex布局

*{

margin:0;

padding:0;

}

.wrap{

display:flex;

flex-direction:row;

margin-top:20px;

}

.center{

width:800px;

text-align:center;

background:#ccc;

}

.left,.right{

/*flex-grow 属性用于设置或检索弹性盒的扩展比率。*/

flex-grow: 1;

line-height: 30px;

background:red;

}

left
center
right

利用flex-grow进行布局,详见flex-grow属性

3.左右利用calc()函数计算

#container{

height:200px;

width: 100%;

}

#left,#right{

float:left;

background-color:#ccc;

height:100%;

width: calc(50% - 500px);

}

#center{

float:left;

background-color:yellow;

height:100%;

width:1000px;

}

left
center
right

两边自适应中间固定暂时整理到这三种方法。

在php中页面布局 3列左右侧固定中间自适应居中,css三列布局--两边固定中间自适应和中间固定两边自适应...相关推荐

  1. 六种方法实现CSS三栏布局

    方法一:浮动+margin 实现方法:左栏向左浮动,右栏向右浮动,中间栏不设宽度,用左右margin来撑开距离. <!DOCTYPE html> <html><head& ...

  2. css三列布局--两边固定中间自适应和中间固定两边自适应

    三列布局 本篇讲三列布局,面试常考题,自己总结的,如有什么问题,欢迎指出!我会用红色标注出主要作用部分,都是最精简的写法,,没有多余的修饰. 布局方式一:两边固定中间自适应 1.flex布局 思路:将 ...

  3. 【计算机网络】4-41假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):

    [问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示"目的网络"."距离"和"下一跳路由器"): N1 7 A N2 2 C N ...

  4. [问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):

    [问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示"目的网络"."距离"和"下一跳路由器"): N1 7 A N2 2 C N ...

  5. CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子

    CSS三栏布局代码详解 写在前面:博主最近在转头复习最前面学的CSS,整理一下CSS三栏布局的笔记,正好也捋顺自己的逻辑思路.解析我尽量按照思路详细的写了,代码均可正确运行,留给需要的小伙伴进行参考, ...

  6. java制作九行九列表格_将文中后9行文字转换成一个9行4列的表格,设置表格居中,表格列宽为2.5厘米..._考试资料网...

    问答题在考生文件夹下打开文档word.docx,按照要求完成下列操作并以该文件名(word.docx)保存文档. [文档开始] 2009年北平市中考招生计划低于10万人 晨报讯伴随初中毕业生人数连年下 ...

  7. CSS三列布局(五种方式)

    /*前提:左右宽度为300px,高度为100px,中间宽度自适应*/* {margin: 0;padding: 0; } <!DOCTYPE html> <html lang=&qu ...

  8. html5+css 三列布局

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  9. 三种方法实现CSS三栏布局

    本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...

最新文章

  1. Android--SQLite(一)
  2. pika-NoSQL原理概述
  3. 与 Josh Bloch 探讨 Java 未来
  4. 第一个SpringMVC入门程序
  5. 机器物联网的四大价值流
  6. 数据可视化|实验八 实现scatterplot关系图
  7. 集合里面的 E是泛型 暂且认为是object
  8. 日用品 跟帖补充一个单词奖励1Euro,请勿恶意灌水,以保持帖子的连贯.
  9. pr个人宣传片制作思路及常用快捷键
  10. freeswitch APR库
  11. 几种设置开机启动的方法
  12. 特殊的Excel填充序号技巧,总有一种你会遇到【特别实用,赶紧收藏】
  13. php图片生成加密pdf文件,php生成PDF格式文件并且加密
  14. linux sysinfo函数使用方法--获取内存大小
  15. Soot -- 中间代码Jimple介绍
  16. handlebars学习总结
  17. 一、Mahony姿态解算——坐标系变换
  18. C语言——判断是否被5整除
  19. 备赛笔记:Opencv学习:颜色识别
  20. 一款QQ盗号木马分析

热门文章

  1. 融合CDN,纾解数据拥塞之困
  2. ssh 远程登录不用密码 ssh-keygen -t rsa
  3. 校验用户画像的准确性
  4. MNIST数据可视化
  5. Mysql的几个字符串函数【concat、concat_ws、group_concat】
  6. 数组常用方法归纳源代码
  7. 【Java TreeMap】测试TreeMap的使用、Comparabe自定义类的自定义排序方式
  8. troubleshoot之:GC调优到底是什么
  9. 看动画学算法之:排序-基数排序
  10. ajax请求php返回的数据是整个页面的html,Ajax出错并返回整个页面html的问题