CSS两列布局的N种实现

时间:2020-07-30 19:14:16 来源:

【摘要】 CSS两列布局的N种实现考必过小编为大家整理了关于CSS两列布局的N种实现的信息,希望可以帮助到大家!

CSS两列布局的N种实现

标签:计算   定位   自适应   over   round   doc   失效   面试   影响   

一、什么是两列布局

两列布局分为两种,一种是左侧定宽、右侧自适应,另一种是两列都自适应(即左侧宽度由子元素决定,右侧补齐剩余空间)。在CSS面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能,下面将分别介绍实现方式。

二、左侧定宽、右侧自适应如何实现?

  1.双inline-block

  原理:两个元素都设置dislpay:inline-block,为了消除html空格的影响,父元素的font-size需要设置为0,右侧自适应元素的宽度使用calc函数计算。如果两个元素的高度不一样,可以给元素设置vertical-align:top调整。

  缺点:由于父元素设置了font-size为0,子元素内文字不会显示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
		   *{
			   padding: 0;
			   margin: 0;
		   }
			.box{
				height: 600px;
				width: 100%;
				font-size:0;
			}
			.left{
				display: inline-block;
				width: 100px;
				height: 200px;
				background-color: red;
				vertical-align: top;
				
			}
			.right{
				display: inline-block;
				width: calc(100% - 100px);
				height: 400px;
				background-color: blue;
				vertical-align: top;
			}
			
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left">
				<span>1234</span>
			</p>
			<p class="right">
				<span>1234</span>
			</p>
		</p>
	</body>
</html>

  2.双浮动

  原理:两个元素设置浮动,右侧自适应元素宽度使用calc函数计算

  缺点:父元素需要清除浮动

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0;
				margin: 0;
			}
			.box{
				height: 600px;
				width: 100%;

			}
			.left{
				float: left;
				width: 100px;
				height: 200px;
				background-color: red;
			}
			.right{
				float: left;
				width: calc(100% - 100px);
				height: 400px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left">
				<span>
					123adadadddddddddddddddddddddddddddddddddddddddd
				</span>
			</p>
			<p class="right"></p>
		</p>
	</body>
</html>

  3.浮动+margin

  原理:左侧定宽元素浮动,右侧自适应元素设置margin-left的值大于定宽元素的宽度即可

  缺点:父元素需要清除浮动

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0;
				margin: 0;
			}
			.box{
				height: 600px;
				width: 100%;

			}
			.left{
				float: left;
				width: 100px;
				height: 200px;
				background-color: red;
			}
			.right{
				margin-left: 100px;
				height: 400px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left">
				<p>1234</p>
			</p>
			<p class="right">
				<p>1234</p>
			</p>
		</p>
	</body>
</html>

  4.浮动+BFC

  原理:父元素设置overflow:hidden,左侧定宽元素浮动,右侧自适应元素设置overflow:auto创建BFC

  缺点:左侧元素的内容如果超过设定宽度会重叠到右侧元素上

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0;
				margin: 0;
			}
			.box{
				height: 600px;
				width: 100%;
				overflow: hidden;
			}
			.left{
				float: left;
				width: 100px;
				height: 200px;
				background-color: red;
			}
			.right{
				overflow: auto;
				height: 400px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left">111111111111111111111111</p>
			<p class="right">111111111111111111111111111111111111111111111</p>
		</p>
		<p class="right"></p>
	</body>
</html>

  5.absolute+margin-left

  原理:父元素相对定位,左侧元素绝对定位,右侧自适应元素设置margin-left的值大于定宽元素的宽度

  缺点:父元素设置了相对定位

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0;
				margin: 0;
			}
			.box{
				height: 600px;
				width: 100%;
				position: relative;
			}
			.left{
				position: absolute;
				width: 100px;
				height: 200px;
				background-color: red;
			}
			.right{
				margin-left: 100px;
				height: 400px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left"></p>
			<p class="right"></p>
		</p>
	</body>
</html>

  6.flex布局

  原理:父元素设置display:flex,自适应元素设置flex:1

  缺点:存在兼容性问题,IE10以下不支持

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			*{
				padding: 0;
				margin: 0;
			}
			.box{
				height: 600px;
				width: 100%;
				display: flex;
			}
			.left{
				width: 100px;
				height: 200px;
				background-color: red;
			}
			.right{
				flex: 1;
				height: 400px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="box">
			<p class="left"></p>
			<p class="right"></p>
		</p>
	</body>
</html>

三、左右两侧元素都自适应

严格来讲,并不算两个元素都是自适应,只是将上面的定宽改为由子元素撑开而已

  1.浮动+BFC

  原理和上面一样,只是左侧元素的宽度没有设置,由子元素撑开

  2.table布局

  原理:父元素display:table,左侧元素外围用一个p包裹,该p设置display:table-cell,width:0.1%(保证最小宽度),左侧元素内部设置margin-right,右侧元素设置display:table-cell。

  缺点:IE7及以下不支持,当display:table时,padding失效,父元素的line-height属性失效,当display:table-cell时,margin失效。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.parent{
				display: table;
				width: 100%;
				
			}
			.box{
				display: table-cell;
				width: 0.1%;
			}
			.left{
				margin-right: 20px;
				background-color: red;
				height: 200px;
			}    
			.right{
				display: table-cell;
				background-color: blue;
				height: 300px;
			}
		</style>
	</head>
	<body>
		<p class="parent">
			<p class="box">
				<p class="left">126545453dddddddd453453453</p>
			</p>
			<p class="right">12121</p>
		</p>
	</body>
</html>

  3.flex布局

  原理、缺点同上面的flex布局

  4.grid布局

  原理:父元素设置display:grid,grid-template-columns:auto 1fr;(这个属性定义列宽,auto关键字表示由浏览器自己决定长度。fr是一个相对尺寸单位,表示剩余空间做等分)grid-gap:20px(行间距)

  缺点:兼容性太差,IE11都不支持,谷歌57以上才可以

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.parent{
				display:grid;
				grid-template-columns:auto 1fr;
				grid-gap:20px
			}  
			.left{
				background-color: red;
				height: 200px;
			}
			.right{
				height:300px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<p class="parent">
			<p class="left">1111111111111111111111111</p>
			<p class="right"></p>
		</p>
	</body>
</html>

 

CSS两列布局的N种实现

标签:计算   定位   自适应   over   round   doc   失效   面试   影响   

以上就是CSS两列布局的N种实现的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net