CSS布局两边固定中间自适应

两边固定中间自适应

利用浮动(float)

让左右元素浮动,缺点是中间元素必须置于二者之后,不然right元素会进入下一行

    <!DOCTYPE html>  
    <html>  
        <head>  
            <meta charset="UTF-8">  
            <title></title>  
            <style type="text/css">
            	.left,.right{
    
    
            		width:200px;
            		height:200px;
            		background-color:#999;
            	}
            	.left{
    
    
            		float:left;
            	}
            	.right{
    
    
            		float:right;
            	}
            	.center{
    
    
            		margin:0 200px;
            		height:300px;
            		background-color:#f00;
            	}
            </style>  
        </head>  
        <body>  
            <!--该布局法的好处是受外界影响小,但是不足是 三个元素的顺序,center一定要放在最后,这是            	
		            和绝对定位不一样的地方,center占据文档流位置,所以一定要放在最后,左右两个元素位置没有关系。
		            当浏览器窗口很小的时候,右边元素会被击倒下一行。-->
            <div class="left">left</div>
            <div class="right">right</div>
            <div class="center">center</div>
            
        </body>  
    </html>  

flex布局

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box{
    
    
				width:100%;
				height:100px;
				display:flex;
				margin:10px;
			}
			#left,#right{
    
    
				width:200px;
				height:100px;
				margin:10px;
				background-color:#999;
			}
			#center{
    
    
				flex:1;
				height:100px;
				margin:10px;/*左右margin不会叠加*/
				background-color:#f00;
			}
		</style>
	</head>
	<body>
		<div id="box">
			<div id="left">left</div>
			<div id="center">center</div>
			<div id="right">right</div>
		</div>
	</body>
</html>

利用绝对定位(position)

center居中并利用margin为左右两边留出位置,左右绝对定位
绝对定位:
优点:结构简单,无需清理浮动;
缺点:两侧高度无法支撑总高度;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>css三列布局</title>
		<style type="text/css">		
			/*左右固定,中间自适应  利用绝对定位*/
			.container{
    
    
			    width: 100%;
			    height: 100%;
			    position: relative;
			}
			.left{
    
    
			    position: absolute;
			    left: 0;
			    top: 0;
			    width: 400px;
			    height: 200px;
			    background-color: black;
			    color:#fff;
			}
			.center{
    
    
			    /*width: auto;*/   /*如果没有这一句,那么,center这个div的文字就不会自动换行*/
			    margin: 0 400px;
			    height: 400px;
			    background-color: yellow;
			}
			.right{
    
    
			    position: absolute;
			    top: 0;
			    right: 0;
			    width: 400px;
			    height: 300px;
			    background-color: red;
			}
		</style>
	</head>
	<body>
		<div class="container">
		    <div class="left">left</div>
		    <div class="center">center</div>
		    <div class="right">right</div>
		</div>
	</body>
</html>

对中间的宽度进行calc计算

三个元素都向左浮动,左右定宽,中间的对其进行计算,让100%宽度减去左右宽度,即为中间宽度。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			.container{
    
    
				overflow: hidden;
			}
			.left,.right{
    
    
				float: left;
				width: 100px;
				background:red;
			}
			.center{
    
    
				float: left; 
				width:calc(100% - 200px);
				background:yellow;
			}
		</style>
	</head>
	<body>
	    <div class="container">
		<div class="left">left</div>
	        <div class="center">center</div>
	        <div class="right">right</div>
	    </div>
	</body>
</html>

双飞翼布局

先构建中间main部分,但由于布局原因,将left置于center左边,故而出现了双飞翼布局。
这种布局的好处是:两边(left和right)不会盖住中间(center)部分,left和right盖住的是wrap元素的两边,即main-wrap的margin部分。
双飞翼:
优点:支持各种宽高变化,通用性强;
缺点:dom结构多余,增加渲染树生产的计算量;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			body {
    
    min-width: 550px;}
			.col {
    
    float: left;}			
			#main {
    
    
				width: 100%;
				height: 200px;
				background-color: #ccc;
			}			
			#main-wrap {
    
    
				margin: 0 190px;/*这是圣杯和双飞翼最明显的区别,在main内部使用的是margin,而圣杯是直接在container部分使用padding*/		
			}
                        #left,#right {
    
    
				width: 190px;
				height: 200px;
				background-color: #0000FF;
			}	
			#left{
    
    
				margin-left: -100%;
			}		
			#right {
    
    
				margin-left: -190px;
				background-color: #FF0000;
			}
		</style>
	</head>
	<body>
		<div id="container">
		    <div id="main" class="col">
		        <div id="main-wrap"> #main </div>
		    </div>
		    <div id="left" class="col">#left</div>
		    <div id="right" class="col">#right</div>
		</div>
	</body>
</html>

圣杯布局

圣杯布局:
优点:结构简单,无多余dom层;
缺点:中间部分宽度小于左侧时布局混乱;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css"> 
		.wrapper {
    
    
			padding: 0 100px; 
			overflow:hidden;
		}
		.col {
    
    
			position: relative; 
			float: left;
		}
		.main {
    
    
			width: 100%;
			height: 200px;
			background:yellow;
		}
		.left,.right {
    
    
			width: 100px; 
			height: 200px; 
			background:red;
		}
		.left{
    
    
			margin-left: -100%;
			left: -100px;
		}
		.right {
    
    
			margin-left: -100px; 
			right: -100px;
		}
		
		</style>
	</head>
	<body>
		<section class="wrapper">
		    <section class="col main">main</section>
		    <aside class="col left">left</aside>
		    <aside class="col right">right</aside>
		</section>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/Menqq/article/details/115249029