博主信息
博文 36
粉丝 4
评论 3
访问量 39050
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
7.8 默写双飞翼布局理解思路和实现代码
大灰狼的博客
原创
991人浏览过

双飞翼布局 后面还有一个圣杯实例 (大灰狼相对喜欢双飞翼布局)

圣杯和双飞翼在前端布局中属于基础必备技能~两者的功能相同,都是为了实现一个 两侧宽度固定,中间宽度自适应的三栏布局。

双飞翼布局 三列布局 有三个特点 :

1.让中间内容优先渲染 

2.让2侧固定宽度中间能自适应宽度 

3.三列任意一个高度可以撑开中间区域


先来看看效果图~

1.png

2.png

实例

<!DOCTYPE html>
<html lang="zh-cn">

	<head>
		<meta charset="UTF-8">
		<title>7.8 双飞翼布局</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			
			main {
				overflow: hidden;
			}
			/*因为中间三列浮动 所以通过overflow: hidden;清除浮动 */
			header,
			footer {
				background: skyblue;
				line-height: 60px;
				text-align: center;
			}
			
			.wrap,
			.left,
			.right {
				float: left;
				min-height: 300px;
			}
			/* 中间区域.main的父容器 .wrap .left .right 三个都需要设置左浮动 和最小高度 */
			
			.wrap {
				width: 100%;
			}
			/* .wrap必须要设置宽度100% */
			
			.main {
				min-height: 300px;
				margin: 0 180px 0 200px;
				background: salmon;
			}
			/*通过左右边距 让自身被左右遮挡的部分缩回中间可见区域*/
			
			.left {
				margin-left: -100%;
				width: 200px;
				background: seagreen;
			}
			/*通过给左边距设置负值 让自己回到上一行起点 关键是上一行宽度可变所以 一定要设置成-100%*/
			
			.right {
				margin-left: -180px;
				width: 180px;
				background: steelblue;
			}
			/*自身想回到上一行 只要设置左边就大于自身宽度的负值就可以。*/
		</style>
		<script type="text/javascript">
			function changeDivHeight() { 
				//宽度               
				var o = document.getElementById("m");
				var w = o.clientWidth || o.offsetWidth;
				document.getElementById("m").innerHTML = '因为你改变了浏览器窗口大小 我也变化了 我现在宽度是:' + w + 'px';
			}
			//当浏览器窗口大小改变时,触发 window.onresize事件 
			window.onresize = function() {
				changeDivHeight()
			}
			
		</script>
	</head>

	<body>
		<header> 忽略我header 我只是路人甲</header>
		<main>
			<div class="wrap">
				<div class="main" id="m">
					<h1>我是中间区域</h1>
					<p>双飞翼布局实现后特点:两侧宽度固定,中间宽度自适应的三栏布局。三列任意一个高度可以撑起中间高度!</p>
				</div>
			</div>
			<div class="left" id="l">我是左边</div>
			<div class="right" id="r">我是右边</div>
		</main>
		<footer> 忽略我footer 我只是路人乙 </footer>
	</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

在线实例 无法展示浏览器窗口大小变化 可以通过以下网址 来看变化
http://www.xdidc.com/test0707/7.8.html


圣杯布局实例

其实我不太喜欢圣杯 虽然少了一个div包裹标签 看起来结构简洁了 但是缩小到一定程度布局会乱哦。当然要解决也可以的撒 给以下实例main标签设置最小宽度就可以。

1.jpg

2.jpg

实例

<!DOCTYPE html>
<html lang="zh-cn">

	<head>
		<meta charset="UTF-8">
		<title>7.8 圣杯布局</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			
			main {
				overflow: hidden;
				padding-left: 200px;
				padding-right: 180px;
			}
			/*因为中间三列浮动 所以通过overflow: hidden;清除浮动  因为div.main会设置100%设置容器内边距把它挤压回去*/
			header,
			footer {
				background: skyblue;
				line-height: 60px;
				text-align: center;
			}
			
			.main,
			.left,
			.right {
				float: left;
				min-height: 600px;
			}
			/* 中间区域.main .left .right 三个都需要设置左浮动 和最小高度 */		
			.main {
				width: 100%;
				background: salmon;
			}
			/*通过左右内边距 让自身被左右遮挡的部分缩回中间可见区域*/
			
			.left {
				margin-left: -100%;
				width: 200px;
				position: relative;
				left: -200px;
				background: seagreen;
			}
			/*通过给左边距设置负值 让自己回到上一行起点 关键是上一行宽度可变所以 一定要设置成-100%*/
			
			.right {
				margin-left: -180px;
				width: 180px;
				position: relative;
				left: 180px;
				background: steelblue;
			}
			/*自身想回到上一行 只要设置左边就大于自身宽度的负值就可以。*/
		</style>
		<script type="text/javascript">
			function changeDivHeight() { 
				//宽度               
				var o = document.getElementById("m");
				var w = o.clientWidth || o.offsetWidth;
				document.getElementById("m").innerHTML = '圣杯布局<br/>-因为你改变了浏览器窗口大小 我也变化了 我现在宽度是:' + w + 'px';
			}
			//当浏览器窗口大小改变时,触发 window.onresize事件 
			window.onresize = function() {
				changeDivHeight()
			}
			setTimeout(function() {
				alert("同学 别光看 改变浏览器窗口大小 看看红色背景区域 \n\n\n                  --大灰狼")
			}, 2000);
		</script>
	</head>

	<body>
		<header> 忽略我header 我只是路人甲</header>
		<main>
			<div class="main" id="m">
				<h1>我是中间区域</h1>
				<p>圣杯布局实现后特点:两侧宽度固定,中间宽度自适应的三栏布局。三列任意一个高度可以撑起中间高度!</p>
			</div>
			<div class="left" id="l">我是左边</div>
			<div class="right" id="r">我是右边</div>
		</main>
		<footer> 忽略我footer 我只是路人乙 </footer>
	</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:思路是对的,尝试一下用圣杯来做
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学