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中的BFC是什么

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

    2022年11月5日
    602
  • css布局基础总结

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

    2018年9月13日
    2.4K
  • WEB前端工程师必备技能

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

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

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

    2018年10月13日
    2.7K
  • 一道前端函数面试题

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

    2020年11月22日
    1.3K
  • css如何利用transparent属性设置透明度?transparent属性绘制各种三角形

    想到用css设置元素透明度,大家的第一反应会是:用Opacity属性来设置透明度,其实在css中还有其他设置透明度的方法。本章给大家介绍用transparent属性设置透明度,以及…

    2021年2月25日
    1.4K
  • vue开发小程序项目总结

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

    2020年11月24日
    1.7K
  • Angular与vue对比

    Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面。当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强。如今,已有许多开发…

    2019年6月13日
    1.9K
  • css晦涩难懂的点都在这啦

    CSS大家肯定都是会的但是每个人所撑握的情况都不一样,特别是已经工作几年的前辈(这里指的是我司)很多CSS玩法都不知道,可能他们已经习惯了用组件, 但是面试的时候又不可避免问,所以…

    2021年1月20日
    1.4K
  • CSS卡片堆栈

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

    2019年12月31日
    2.1K

发表回复

登录后才能评论