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;
        }
Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2019年6月18日
Next 2019年6月28日

相关推荐

  • CSS多列等高布局

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

    2019年6月11日
    2.1K
  • CSS中的BFC是什么

    定义 一个块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。 触…

    2022年11月5日
    429
  • px、em和rem实战经验

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

    2018年9月11日
    2.0K
  • CSS卡片堆栈

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

    2019年12月31日
    1.9K
  • typeof 和 instanceof的区别

    在前端开发过程中,typeof与instanceof是经常要用到的, 了解两者的区别是每一个合格前端工程师所要掌握的。 JavaScript中typeof和instanceof常用…

    2019年6月18日
    1.6K
  • 两栏布局之左侧固定,右侧自适应的实现方法

    实现左侧固定,右侧自适应的两栏布局的方法有很多。其中经常用到的有float方法、BFC方法、CSS3的flex布局及grid布局。并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点。

    2018年10月13日
    2.5K
  • CSS让内容居中的方法总结

    内容水平居中  分行内元素与块级元素两种情况;其中块级元素又分定宽与不定宽两种情况; 行内元素 首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 te…

    2019年6月28日
    3.2K
  • 简单酷炫的hover效果,值得收藏

    在浏览B站的时候,发现一个简单酷炫的hover效果的制作视频。浏览完之后,发现其中包含的知识点蛮经典的,特此收藏。 HTMl结构布局很普通,就是简单的一个水平垂直方向居中的表单,代…

    2020年7月20日
    1.8K
  • 一道前端函数面试题

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

    2020年11月22日
    1.1K

发表回复

Please Login to Comment