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日

相关推荐

  • 一道前端函数面试题

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

    2020年11月22日
    1.3K
  • CSS卡片堆栈

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

    2019年12月31日
    2.1K
  • HTTP三次握手与四次挥手详解

    前端工程师面试的时候,关于HTTP三次握手是最常被询问的一个知识点,往往很多人,都是知道其原理及过程,就是用话语表达不出来,正式一点,就是词不达意。今天浏览到一篇关于HTTP三次握…

    2019年12月6日
    1.8K
  • WEB前端工程师必备技能

    前端开发到底是一个怎样的工作?都需要掌握什么技能?怎样区分初级、中级、高级?作为一名前端开发工程师,应该朝哪个方向发展?怎样提升自己的专业技能…… 你是否也曾有这样一些疑问,你的这…

    2019年6月6日
    3.1K
  • 前端开发工程师怎样独立调试前端项目?

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

    2020年8月31日
    1.7K
  • 浏览器渲染机制

    为什么要了解浏览器渲染页面机制?主要是还是性能的优化。 了解浏览器如何进行加载,我们可以在引用外部样式文件、外部JS时,将它们放到合适的位置,是浏览器以最快的速度,将文件加载完毕。…

    2019年5月31日
    1.7K
  • vue开发小程序项目总结

    最近全权负责一个小程序的前端开发工作,之前小程序使用原生技术开发过一版,当时由于进入项目组晚,且项目开发周期短,没有详细了解项目的各种情况,导致后期开发过程中出现各种各样的让人烦心…

    2020年11月24日
    1.6K
  • 异步神器async-await

    async-await和Promise的关系 async-await是建立在promise机制之上 ,async-await是promise和generator的语法糖。增强了代码…

    2019年6月3日
    1.7K
  • node环境下使用express框架连接MySQL数据库

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

    2020年8月26日
    1.8K
  • css布局基础总结

    前端css布局知识繁杂,实现方式多种多样。想写出高效、合理的布局,必须以深厚的css基础为前提。为了方便记忆和复习,将css布局要点记录如下。内容较多,应用方面说的不太详细,但都是…

    2018年9月13日
    2.4K

发表回复

登录后才能评论