css三栏布局方案整理
日常开发中,经常会用到css三栏布局,现将工作中常用的css 三栏布局整理如下:
什么是三栏布局:
三栏布局,顾名思义就是两边固定,中间自适应。
一、 float布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>1. float布局</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
p{
margin: 20px 0;
text-align: center;
}
.container {
border: 1px solid #333333;
} .left {
float: left;
width: 100px;
height: 200px;
background: #bfbfbf;
} .right {
float: right;
width: 100px;
height: 200px;
background: #efefef;
}
.main{
height: 200px;
background:#888888;
}
</style>
</head>
<body> <p>float布局</p>
<p>最简单的三栏布局就是利用float进行布局</p> <div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
</div> <p>优势:简单</p>
<p>劣势:中间部分最后加载,内容较多时影响体验</p> </body>
</html>
二、BFC 规则
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>2. BFC 规则</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
} p {
margin: 20px 0;
text-align: center;
} .left {
float: left;
width: 100px;
height: 200px;
background: #bfbfbf;
} .right {
float: right;
width: 100px;
height: 200px;
background: #efefef;
} .main {
overflow: hidden;
height: 200px;
background: #888888;
}
</style>
</head>
<body> <p>BFC 规则</p>
<p>BFC(块格式化上下文)规则规定:BFC不会和浮动元素重叠,将main元素设定为BFC元素即可</p> <div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
</div> </body>
</html>
三、圣杯布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3. 圣杯布局</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
} p {
margin: 20px 0;
text-align: center;
} .container {
padding-left: 100px;
padding-right: 100px;
} .left {
float: left;
width: 100px;
height: 200px;
margin-left: -100%;
position: relative;
left: -100px;
background: #bfbfbf;
} .right {
float: left;
width: 100px;
height: 200px;
margin-left: -100px;
position: relative;
right: -100px;
background-color: #efefef;
} .main {
float: left;
width: 100%;
height: 200px;
background-color: #888888;
} </style>
</head>
<body> <p>圣杯布局</p>
<p>圣杯布局的核心是左、中、右三栏都通过float进行浮动,然后通过负值margin进行调整</p> <div class="container">
<div class="main">圣杯布局的核心是左、中、右三栏都通过float进行浮动,然后通过负值margin进行调整</div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
四、双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>4. 双飞翼布局</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
} p {
margin: 20px 0;
text-align: center;
} .main {
float: left;
width: 100%;
} .content {
height: 200px;
margin-left: 110px;
margin-right: 220px;
background: #888888;
} .main::after {
display: block;
content: '';
font-size: 0;
height: 0;
clear: both;
zoom: 1;
} .left {
float: left;
height: 200px;
width: 100px;
margin-left: -100%;
background-color: #efefef;
} .right {
width: 200px;
height: 200px;
float: left;
margin-left: -200px;
background: #bfbfbf;
} </style>
</head>
<body> <p>双飞翼布局</p>
<p>双飞翼布局的前两步和圣杯布局一样,只是处理中间栏部分内容被遮挡问题的解决方案有所不同</p>
<p>既然main部分的内容会被遮挡,那么就在main内部再加一个content,通过设置其margin来避开遮挡</p> <div class="main">
<div class="content"></div>
</div>
<div class="left"></div>
<div class="right"></div> </body>
</html>
五、flex布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>5. flex布局</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
} p {
margin: 20px 0;
text-align: center;
} .container {
display: flex;
flex-direction: row;
} .middle {
height: 200px;
background-color: #888888;
flex-grow: 1;
} .left {
height: 200px;
order: -1;
margin-right: 20px;
background-color: #efefef;
flex: 0 1 200px;
} .right {
height: 200px;
margin-left: 20px;
background-color: #bfbfbf;
flex: 0 1 200px;
} </style>
</head>
<body> <p>flex布局</p>
<p>flex布局是趋势,利用flex实现三栏布局也很简单,不过需要注意浏览器兼容性</p> <div class="container">
<div class="middle"></div>
<div class="left"></div>
<div class="right"></div>
</div> <p>有几点需要注意一下:</p>
<p>main要首先加载就必须写在第一位,但因为left需要显示在最左侧,所以需要设置left的order为-1</p>
<p>flex属性的完整写法是:flex: flex-grow flex-shrink flex-basis 。这也是flex实现三栏布局的核心</p>
<p> main设置flex-grow为1,说明多余空间全部给main,而空间不够时,仅缩小left right部分</p>
<p>同时因为指定了left right部分的flex-basis,所以指定了两者的宽度,保证其显示效果</p>
</body>
</html>
六、绝对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>6. 绝对定位</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
} p {
margin: 20px 0;
text-align: center;
} .middle {
position: absolute;
left: 200px;
right: 200px;
height: 300px;
background-color: #888888;
} .left {
position: absolute;
left: 0px;
width: 200px;
height: 300px;
background-color: #bfbfbf;
} .right {
position: absolute;
right: 0px;
width: 200px;
background-color: #efefef;
height: 300px;
} </style>
</head>
<body>
<p>绝对定位</p>
<p>绝对定位的方式也比较简单,而且可以优先加载主体</p>
<div class="container">
<div class="middle"></div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
css三栏布局方案整理的更多相关文章
- Css三栏布局自适应实现几种方法
Css三栏布局自适应实现几种方法 自适应实现方法我们可以从三个方法来做,一个是绝对定位 ,自身浮动法 和margin负值法了,下面我们一起来看看这三个例子吧,希望例子能帮助到各位同学. 绝对定位法三栏 ...
- 三种方法实现CSS三栏布局
本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...
- CSS三栏布局
一.绝对定位 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- CSS三栏布局的四种方法
总括: 不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具 ...
- css常用左右布局方案整理
实际项目开发过程中我们经常会遇到页面div左右布局的需求:左侧 div 固定宽度,右侧 div 自适应宽度,填充满剩余页面,下面整理几种常用的方案 1 左侧 div 设置 float 属性为 le ...
- CSS 三栏布局入门
首先,我是CSS盲[只听说过box model],没动手实践过,关于margin padding只知名称,不明细节.刚看过一叶斋大哥关于css布局的博文,再动手实践,动手记录下点滴积累以备后用. &l ...
- CSS布局 - 三栏布局
CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...
- CSS实现三栏布局(5种)
常见的布局方式: float布局.Position定位.table布局.弹性(flex)布局.网格(grid)布局 那么我们就是用以上5种方式完成三栏布局,不过前提是左右宽度(假如左右宽度为300px ...
- CSS布局:Float布局过程与老生常谈的三栏布局
原文见博客主站,欢迎大家去评论. 使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloa ...
随机推荐
- OI计算几何 简单学习笔记
学习平面几何,首先我们要会熟练地应用向量,其次也要知道一些基本的几何知识.(其实看看数学课本就可以了吧) 因为是看的蓝书,所以很多东西做了引用.(update:还参考了赵和旭dalao的讲义) 下面先 ...
- 实体bean里面不要轻易加transient,反序列回来之后会变成null
实体bean里面不要轻易加transient,反序列回来之后会变成null
- secureCRT颜色方案设置
按照如下设置后vim编辑会有如下颜色提示
- Python的编码详解
一. 编码介绍 计算机只能处理数字(最底层的0和1),如果要处理文本,就必须将文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以一个字节能表示的最大整数就 ...
- java类的基本结构
对象依赖于类存在. 分析过程先有对象后有类,开发过程中先有类后有对象. new是为新建对象开辟内存空间的运算符:以类为模板,开辟空间实例化一个对象,并返回该对象的一个引用. 成员变量 直接在类中定义 ...
- [BZOJ 5158][Tjoi2014]Alice and Bob
传送门 \(\color{green}{solution}\) 贪心 /************************************************************** P ...
- thinkphp5.0升级
之前一些项目是thinkphp5.0的版本.这个版本是有严重漏洞的.根据官方建议会把Request.php下面的 method方法做一个替换.但是实际上为了安全最好是做一个升级.首先必须要先做一个备份 ...
- vue 深度响应初步了解(检测data对象数据变化)
当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为 getter/se ...
- Python学习 day09
一.文件的修改 python中修改文件,可以直接通过write实现,但这种方法均比较局限.若有需求:将文件中的某内容替换为新内容,其他内容保持不变.这种需求write理论上是可以实现的,可以将一个文件 ...
- spark第九篇:Spark操作ES
spark操作es需要elasticsearch-hadoop-xxx.jar,版本需同es版本.从5.0版本开始,支持spark2.0. 把elasticsearch-hadoop-xxx.jar放 ...