三栏布局中,经典中的经典应该就是圣杯布局、双飞翼布局没跑了。双飞翼布局和圣杯布局其实是一样的,只不过在写法上有些不同,其布局都是左右固定宽度,中间宽度自适应。

先熟悉一下圣杯布局、双飞翼布局中的特点:

  • 两侧定宽,中间自适应
  • 主要内容优先渲染

圣杯布局

<div class="container">
<div class="main">main</div>
<div class="left">left</div>
<div class="right">right</div>
</div>

第一步

首先设置好.main、.left、.right的宽度并浮动,为左右两列预留出空间。

.container {
padding-left: 200px; /* 预留左侧空间,为.left宽度*/
padding-right: 300px; /* 预留右侧空间,为.right宽度*/
}
.main {
float: left;
width: 100%;
height: 300px;
background: #67c23a;
}
.left {
float: left;
width: 200px;
height: 300px;
background: #e6a23c;
}
.right {
float: left;
width: 300px;
height: 300px;
background: #f56c6c;
}

第二步

通过负margin、position把<div class="left">left</div>移动到左侧预留位置。

.left {
float: left;
margin-left: -100%; /* 移动到左侧,100%是一个父元素宽度,这里也就是.container的宽度 */
position: relative; /* 因为.container设置了padding */
right: 200px; /* 所以需要再向左移动自身宽度,left: -200px;也是可以的 */
width: 200px;
height: 300px;
background: #e6a23c;
}

第三步

通过负margin把<div class="right">right</div>移动到右侧预留位置。

.right {
float: left;
margin-right: -300px; /* 移动到右侧,自身宽度*/
width: 300px;
height: 300px;
background: #f56c6c;
}

完整代码:

.container {
padding-left: 200px; /* 预留左侧空间,为.left宽度*/
padding-right: 300px; /* 预留左侧空间,为.right宽度*/
}
.main {
float: left;
width: 100%;
height: 300px;
background: #67c23a;
}
.left {
float: left;
margin-left: -100%; /* 移动到左侧,100%是一个父元素宽度,这里也就是.container的宽度 */
position: relative; /* 因为.container设置了padding*/
right: 200px; /* 所以需要再向左移动自身宽度,left: -200px;也是可以的 */
width: 200px;
height: 300px;
background: #e6a23c;
}
.right {
float: left;
margin-right: -300px; /* 移动到右侧,自身宽度*/
width: 300px;
height: 300px;
background: #f56c6c;
}

双飞翼布局

<div class="main-wrap">
<div class="main">main</div>
</div>
<div class="left">left</div>
<div class="right">right</div>

第一步

首先设置好.wrap、.main-wrap、.left、.right的宽度并浮动,为左右两列预留出空间。

.main-wrap {
float: left;
width: 100%; /* 这个必须设置,不然浮动起来,没宽度 */
}
.main {
margin-left: 200px; /* 预留左侧空间,为.left宽度 */
margin-right: 300px; /* 预留左侧空间,为.right宽度 */
height: 300px;
background: #67c23a;
}
.left {
float: left;
width: 200px;
height: 300px;
background: #e6a23c;
}
.right {
float: left;
width: 300px;
height: 300px;
background: #f56c6c;
}

第二步

通过负margin把<div class="left">left</div>移动到左侧预留位置。

.left {
float: left;
margin-left: -100%; /* 移动到左侧,100%是一个父元素宽度,这里也就是body的宽度*/
width: 200px;
height: 300px;
background: #e6a23c;
}

第三步

通过负margin把<div class="right">right</div>移动到右侧预留位置。

.right {
float: left;
margin-left: -300px; /* 移动到右侧,自身宽度*/
width: 300px;
height: 300px;
background: #f56c6c;
}

完整代码:

.main-wrap {
float: left;
width: 100%;
}
.main {
margin-left: 200px; /* 预留左侧空间,为.left宽度*/
margin-right: 300px; /* 预留左侧空间,为.right宽度*/
height: 300px;
background: #67c23a;
}
.left {
float: left;
margin-left: -100%; /* 移动到左侧,100%是一个父元素宽度,这里也就是body的宽度*/
width: 200px;
height: 300px;
background: #e6a23c;
}
.right {
float: left;
margin-left: -300px; /* 移动到右侧,自身宽度*/
width: 300px;
height: 300px;
background: #f56c6c;
}

CSS圣杯布局、双飞翼布局详解的更多相关文章

  1. CSS(五)圣杯,双飞翼布局

    双飞翼布局 <style> *{ margin:; padding:; } .main{ width: 100%; height: 200px; background: pink; flo ...

  2. Android组件---四大布局的属性详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4372222.html Android常见布局有下面几种: LinearL ...

  3. CSS布局 -- 圣杯布局 & 双飞翼布局

    按照我的理解,其实圣杯布局跟双飞翼布局的实现,目的都是左右两栏固定宽度,中间部分自适应. 但在这里实现起来还是有一些区别的 [圣杯布局] 在这里,实现了左(200px) 右(220px) 宽度固定,中 ...

  4. CSS 圣杯布局 / 双飞翼布局的实现

    工作的越久,有些基础知识我们可能就逐渐淡忘了,今天我们来回顾一下css的圣杯布局和双飞翼布局, 这两个名词你可能不熟, 那三栏布局你肯定就非常熟悉了, 就是两边定宽, 中间自适应 的 布局 1 , 圣 ...

  5. CSS 之 圣杯布局&双飞翼布局

    圣杯布局 和 双飞翼布局 是重要布局方式.两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局. 遵循了以下要点: 两侧宽度固定,中间宽度自适应 中间部分在DOM结构上优先,以便先行 ...

  6. css布局 -双飞翼布局&圣杯布局

    一,双飞翼布局 左右两边固定,中间可以随着浏览器放大和缩小 <!DOCTYPE html> <html lang="en"> <head> &l ...

  7. 【布局】圣杯布局&双飞翼布局

    背景 随着前端技术的发展推进,web端的布局方式已基本成熟,那么在网站布局方式中,三列布局最为常用,布局方式也有很多,渐渐的开发者们开始从效率的角度优化自己的代码"如果三排布局能将中间的模块 ...

  8. css3伸缩布局中justify-content详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 3种常见的CSS页面布局--双飞翼布局、粘连布局、左右两列布局

    一.左右两列布局 1.代码如下,可先粘贴复制,自行运行 <!DOCTYPE html><html> <head> <meta charset="UT ...

  10. css布局-双飞翼布局

    <div class="header">Header</div> <div class="bd"> <div clas ...

随机推荐

  1. 关于 ECMAScript、JavaScript、ES6、ECMAScript 2015

    ECMAScript 是一种规范,而 JavaScript 是对规范的实现.ECMA 是标准化组织. 最早的 JavaScript 是由 Netscape 公司开发的,并提交给 ECMA 标准化组织, ...

  2. mPDF的简单使用

    1. 基本使用 安装 1  在项目下composer文件中 添加 "mpdf/mpdf":"~7.1.9" 测试环境为Yii项目 其他框架composer安装大 ...

  3. 2017-01-26--编译busybox总结

    错误一: ox@ubuntu:busybox-1.16.0$ make menuconfig Makefile:431: *** mixed implicit and normal rules: de ...

  4. day12 Pyhton学习

    一.昨日内容回顾 1.函数名 函数名是一个变量名 可以作为集合类的元素 可以作为参数进行传递 def  func(fn): fn() 可以作为返回值返回 def outer(): def inner( ...

  5. JSON,数组根据字段分组

    function GroupbyName(data, Name) { //data数据源,Name 根据什么字段分组 var map = {}, dest = []; for (var i = 0; ...

  6. 为Linux的文件管理器创建“在此打开终端”菜单

    有些Linux的GUI文件管理器没有右键菜单"在此打开终端",或者有却不能自行指定某种终端. 因为文件夹也有其MIME类型(inode/directory),通过文件关联的方式,把 ...

  7. linux(centos8):使用cgroups做资源限制

    一,什么是cgroups? 1,cgroups是资源的控制组,它提供了一套机制用于控制一组特定进程对资源的使用.     cgroups绑定一个进程集合到一个或多个限制资源使用的子系统上. 2, cg ...

  8. <audio> 标签

    <audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频:

  9. Jmeter入门(2)- 基本使用

    一. JMeter入门脚本 学习例子 向百度发送请求 添加测试计划,默认会有一个测试计划 添加线程组 在测试计划上右键 ==> 添加 ==> 线程(用户) ==> 线程组 添加HTT ...

  10. s == t 何解?

    Integer s=new Integer(9); Integer t=new Integer(9); Long u=new Long(9);     (s==t) 这个是错的,只要有new这个关键字 ...