圣杯布局和双飞翼布局对比

摘要

今天在刷某公司前端笔试题时,遇到一个编程题,实现双飞翼布局和圣杯布局。双飞翼布局和圣杯布局主要描述的是上下header,中间宽度自适应,左右宽度固定的一类布局方式。这两种布局方式是公司笔试或面试中最基础的也是必考的知识点,因此在这里记录一下,方便以后复习。

HTML结构对比

双飞翼布局和圣杯布局其实最后的效果是一样的,css样式上也基本类似,但是在设计时还是有明显不同的。简单来说,首先对于HTML的标签,双飞翼布局包括:header、middle(内含inside)、left、right、footer,圣杯布局包括:header、container(内含middle、left、right)、footer。代码对比如下:
双飞翼布局:

<body>
	<div class="header">
		<h4>header</h4>
	</div> 
	<div class="middle column">
		<div class="inside">
			<h4>middle</h4>
		</div>
	</div>
	<div class="left column">
		<h4>left</h4>
	</div>
	<div class="right column">
		<h4>right</h4>
	</div>
	<div class="footer">
		<h4>footer</h4>
	</div>
</body>

圣杯布局:

<body>
	<div class="header">
		<h4>header</h4>
	</div>

	<div class="container">
		<div class="middle column">
			<h4>middle</h4>

		</div>
		<div class="left column">
		<h4>left</h4>

		</div>
		<div class="right column">
		<h4>right</h4>

		</div>
	</div>
		
	<div class="footer">
		<h4>footer</h4>
	</div>
</body>

注意:在写HTML标签时,一定切记middle要写在left和right之前。

CSS样式对比

双飞翼布局和圣杯布局在CSS样式上有比较大的不同,代码如下:
双飞翼布局:

*{
	margin:0;
	padding:0
}
h4{
	text-align:center
}
.header, .footer{
	background:pink
}
.column{
	float:left;
}
.middle{
	background:yellow;
	width:100%;
}
.middle .inside{
	margin:0 100px 0 200px
}
.left{
	background:red;
	width:200px;
	margin-left:-100%;
}
.right{
	background:green;
	width:100px;
	margin-left:-100px;
	
}
.footer{
	clear:both
}

圣杯布局:

*{margin: 0;padding: 0;}
body{
	min-width:500px
}
.header, .footer{
	background:pink
}
div{
	text-align:center
}
.container{
	padding:0 100px 0 200px;
}
.container .column {
	float:left
}
.middle{
	background:yellow;
	width:100%;
}
.left{
	background:red;
	width:200px;
	margin-left:-100%;
	position:relative;
	left:-200px
}
.right{
	background:green;
	width:100px;
	margin-left:-100px;
	position:relative;
	left:100px
}
.footer{
	clear:both
}

从区别来看,具体包括以下几点:

  1. 双飞翼布局的middle、left、right的父元素是body,圣杯布局的middle、left、right的父元素是container,因此双飞翼布局需要在middle中内嵌一个inside,方便在middle中写内容,而圣杯布局可以直接在middle中写内容;
  2. 双飞翼布局中的inside,其样式应包含左右外边距margin,为了给left和right留出位置;
  3. 双飞翼和圣杯布局中的left元素所包含的margin-left:-100%样式的含义是使left元素在最左侧浮动。对于双飞翼布局,100%是针对middle而言的,而圣杯布局是针对container而言的;
  4. 圣杯布局为了实现left和right元素在padding的留白中,需要使用position:relative相对定位,通过设置left/right移动,双飞翼布局不需要使用相对定位;
  5. 对于两种布局,middle的width都是100%,左右的width是定值;
  6. 本人在实际编写style时,习惯都用left或者margin-left定位;
  7. 对于圣杯布局来说,为了保证浏览器页面宽度缩小到一定距离时,元素不会窜到下一行,需要增加body的样式min-width,大小为两个left元素的宽度+一个right元素的宽度,双飞翼布局不用考虑这一问题;
  8. footer一定要清除浮动,即clear:both,保证footer元素两边没有浮动元素,这样就可以使footer以块级元素一直在待在下面;
  9. 相比较而言,我觉得双飞翼布局在灵活性上要高于圣杯布局。

效果展示

双飞翼和圣杯布局效果是一样的,只不过对于双飞翼布局来说,中间黄色middle块和left/right块是覆盖关系,即left/right在middle上方,且位于两边;圣杯布局middle块的两边是left和right块,无覆盖关系。如下所示:

具体实际理解我觉得还是多练习几遍,就会加深对上述两种布局的印象了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值