CSS布局之圣杯与双飞翼布局

所谓圣杯布局和双飞翼布局其实解决的问题是相同的,都是解决左右两栏固定宽度,中间部分自适应,其中某部分内容比其他内容高的时候,保证三者元素等高。
他俩的区别就是:圣杯用padding。双飞翼用在main外层多加了一个div然后改用margin。

圣杯布局

基本HTML结构

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

CSS代码

* {
    box-sizing: border-box;
}
.content {
     overflow: hidden;
     padding-left: 100px;
     padding-right: 100px;
}
.content > div {
     float: left;
     position: relative;
}
.main {
     width: 100%;
     height:100px;
     border:1px solid red;
}
.left {
     width:100px;
     margin-left: -100px;
     right:100%;
     height:100px;
     border:1px solid #000;
}
.right {
     width:100px;
     margin-right: -100px;
     height:100px;
     border:1px solid #000;
}
  • main、left、right全部左浮动,在设置一个position:relative稍后会用到。
  • main的宽度设置为100%。left和right固定宽度(假设100px)。
  • 此时main自己沾满了一行,所以给left拽上来设置marginleft:100%,此时left虽然上来了但是是覆盖在main上面的。
  • 给content设置padding-left等于left的宽,此时左边有100px的空白,main和left都被挤过来了,要想还原,将left向左在移动100px就行了。
  • 此时就剩下right在下面,同理margin-right:-100%就上去了。

双飞翼布局

基本HTML结构

<div class="content">
        <div class="main">
            <div class="main-inner">main</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
 </div>
 
* {
	box-sizing:border-box;
}
.main-inner {
	margin-left:100px;
	margin-right:100px;
}
.content {
	overflow:hidden;
	/* padding-left:100px;
	padding-right:100px;
	*/
}
.content > div {
	float:left;
	/* position:relative;
	*/
}
.main {
	width:100%;
	height:100px;
	border:1px solid red;
}
.left {
	width:100px;
	margin-left:-100%;
	/* right:100px;
	*/
        height:100px;
	border:1px solid #000;
}
.right {
	width:100px;
	/* margin-right:-100px;
	*/
        margin-left:-100px;
	height:100px;
	border:1px solid #000;
}

对比一下css的区别:多了一个.main-inner,少了一些相对定位。

扩展

使用flex实现圣杯布局

基本HTML结构与圣杯布局一致,这里就不追代码了。CSS代码如下

        * {
            box-sizing: border-box;
        }
        .content {
            overflow: hidden;
            display:flex;
            flex:1
        }
   
        .main {
            flex:1;
            height:100px;
            border:1px solid red;
        }
        .left {
            flex:0 0 100px;
            order:-1;
            height:100px;
            border:1px solid #000;
        }
        .right {
            flex:0 0 100px;
            height:100px;
            border:1px solid #000;
        }
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2019年6月18日
下一篇 2019年6月28日

相关推荐

  • CSS多列等高布局

    在项目开发中,经常遇到需要多列等高布局的需求。解决这种的需求的方法有很多,各有利弊,现总结如下。 方法一:使用flex布局 优点:实现方便,还可以方便实现各种比例 ; 缺点: IE…

    2019年6月11日
    2.2K
  • CSS卡片堆栈

    在浏览各种APP及网站,往往会发现很多酷炫的布局及样式。搜集一下,补充自己的技能库,借鉴学习一下。 HTML CSS

    2019年12月31日
    2.1K
  • 外层有一个自适应高度的div,里面有两个div,一个高度固定300px,另一个怎么填满剩余的高度?

    可以设置外层自适应高度的容器为flex布局,利用flex-basis属性即可实现自动填满剩余高度;代码如下:

    2021年2月22日
    1.3K
  • node环境下使用express框架连接MySQL数据库

    目前,越来越多的企业选择使用前后端分离模式新建项目,这样,使得开发工作越来越便捷。那么,作为前端开发,怎样能在后端开发没有完成之前,测试并运行前端项目呢。在这里,小编推荐使用exp…

    2020年8月26日
    1.8K
  • px、em和rem实战经验

    在自适应布局或者移动端网页开发时,我们经常会用到em和rem两个长度单位。接下来我们讨论一下这两个单位和px之间的区别,以及他们的使用场景等。 px px,像素(计算机屏幕上的一个…

    2018年9月11日
    2.1K
  • flex布局详解

    往往在移动端开发过程中,弹性布局是非常实用的一种手段。往往你并不需要去反复的使用媒体查询的。整整的响应式布局是使界面能够自动的根据屏幕进行变化,做到完美的弹性布局,在必要的时候,去…

    2018年9月10日
    2.3K
  • 网页布局之三栏网页宽度自适应布局

    在工作中经常遇到网页布局错乱的问题,往往引发的这种问题都是因为不同设备不同分辨率而导致。归根结底,是因为前端工程师经验不足,代码写得不够完好。以下是我总结及从网络搜集的一些网页布局…

    2018年10月8日
    3.0K
  • 前端开发工程师怎样独立调试前端项目?

    在前后端分离开发的大环境下,前端开发已经不仅仅局限于所谓的切图,写页面的工作,同时,也给前端开发定义了新的含义。有前后端分离项目开发的工程师,都知道,这样的项目开发起来有多么的方便…

    2020年8月31日
    1.6K
  • 一道前端函数面试题

    这题的规则是这样的 拿到这种题目,我先来说说我自己的做题流程,一般会去找它最简单的形态。我们一步一步来拆解。 先去掉 sumOf() 变成了以下形态 嗯&#82…

    2020年11月22日
    1.2K

发表回复

登录后才能评论