HTML+CSS多種佈局技巧
阿新 • • 發佈:2019-01-27
一、水平居中
水平居中多用於標題以及內容區域的組織形式,以下是五種實現水平居中的方法:
方法一: 使用inline-block和text-align實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(1)</title>
<style>
.parent{
text-align: center;
}
.child{
display: inline-block ;
height: 200px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用inline-block和text-align實現水平居中
</div>
</div>
</body >
</html>
優點:相容性好
缺點:需要同時設定子元素和父元素
方法二: 使用margin:0 auto來實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(2)</title>
<style>
.child{
margin: 0 auto;
width: 300px;
height: 200px;
background : green;
color: white;
}
</style>
</head>
<body>
<div class="child">
使用margin:0 auto來實現水平居中
</div>
</body>
</html>
優點:相容性好
缺點:需要指定寬度
方法三: 使用table和margin:0 auto實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(3)</title>
<style>
.child{
display: table;
margin: 0 auto;
height: 200px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="child">
使用table和margin:0 auto實現水平居中
</div>
</body>
</html>
優點:只需對自身進行設定
缺點:IE6、7不相容需要調整
方法四: 使用絕對定位實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(4)</title>
<style>
.child{
position: absolute;
left: 50%;
transform: translate(-50%);/*也可使用margin-left設定盒子的一半,不過此時要設定盒子的寬度*/
height: 200px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="child">
使用絕對定位實現水平居中
</div>
</body>
</html>
缺點:相容性差,需IE9 及以上可用
* 方法五:* 使用flex 佈局實現
1、只設置父元素
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(5-1)</title>
<style>
.parent{
display: flex;
justify-content: center; /*設定水平方向位置,還有flex-end、flex-start等值*/
}
.child{
height: 200px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用flex 佈局實現水平居中
</div>
</div>
</body>
</html>
2、父元素和子元素都需要設定
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平居中(5-2)</title>
<style>
.parent{
display: flex;
}
.child{
margin: 0 auto;
height: 200px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用flex 佈局實現水平居中
</div>
</div>
</body>
</html>
缺點:相容性差、如果進行大面積的佈局可能會影響效率
二、垂直居中
方法一: 使用vertical-align: middle,由於使用它的時候對齊的基線是用行高的基線作為標記,故需要設定line-height和display:table-cell/inline-block
1、設定
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>垂直居中(1)</title>
<style>
.parent{
display: table-cell;
vertical-align: middle;
height: 500px;
}
.child{
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用vertical-align: middle實現垂直居中
</div>
</div>
</body>
</html>
* 方法二:* 使用絕對定位
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>垂直居中(2)</title>
<style>
.child{
position: absolute;
top: 50%;
transform: translate(0,-50%);
background: green;
color: white;
}
</style>
</head>
<body>
<div class="child">
使用vertical-align: middle實現垂直居中
</div>
</body>
</html>
方法三: 使用flex實現,用它實現垂直居中的時候需要給父元素一個高度
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>垂直居中(3)</title>
<style>
html,body,.parent{
height: 100%; //parent的100%高度是根據父元素body>html 的高度設定的,也可以直接設定具體的高度值,不用百分比
}
.parent{
display: flex;
align-items: center; /*定義body的元素垂直居中*/
}
.child{
width: 300px;
height: 300px;
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用flex實現垂直居中
</div>
</div>
</body>
</html>
三、水平垂直全部居中
方法一:利用絕對定位實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平垂直居中(1)</title>
<style>
.child{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
background: green;
color: white;
}
</style>
</head>
<body>
<div class="child">
使用flex實現水平垂直居中
</div>
</body>
</html>
方法二: 使用flex實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>水平垂直居中(2)</title>
<style>
.parent{
display: flex;
justify-content: center;
align-items: center;
height: 800px;
}
.child{
background: green;
color: white;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
使用flex實現水平垂直居中
</div>
</div>
</body>
</html>
四、多列布局
情況一: 左列定寬,右列自適應
1、使用float+margin-left實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列定寬,右列自適應</title>
<style>
.left{
float: left;
width: 200px;
height: 500px;
background: red;
}
.right{
margin-left: 210px;
height: 500px;
background: green;
}
</style>
</head>
<body>
<div class="left">
定寬
</div>
<div class="right">
自適應
</div>
</body>
</html>
2、使用float+overflow實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左定寬,右自適應(2)</title>
<style>
.left{
width: 200px;
height: 500px;
float: left;
background: red;
}
.right{
overflow: hidden;
height: 500px;
background: green;
}
</style>
</head>
<body>
<div class="left">
定寬
</div>
<div class="right">
自適應
</div>
</body>
</html>
3、使用flex實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左定寬,右自適應(3)</title>
<style>
.parent{
display: flex;
}
.left{
width: 200px;
height: 500px;
background: red;
}
.right{
flex: 1;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
4、使用table實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列自適應,右列定寬</title>
<style>
.parent{
display: table;
table-layout: fixed;
width: 100%;
}
.left{
display: table-cell;
width: 200px;
height: 500px;
background: red;
}
.right{
display: table-cell;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
情況二: 右列定寬,左列自適應
1、使用float+margin-right 實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列自適應,右列定寬</title>
<style>
.left{
float: left;
width: 100%;
height: 500px;
margin-right: -210px;
background: red;
}
.right{
float: right;
width: 200px;
height: 500px;
background: green;
}
</style>
</head>
<body>
<div class="left">
自適應
</div>
<div class="right">
定寬
</div>
</body>
</html>
2、使用flex實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列自適應,右列定寬(2)</title>
<style>
.parent{
display: flex;
}
.left{
flex: 1;
/*margin-right: 20px;*/
height: 500px;
background: red;
}
.right{
width: 200px;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
自適應
</div>
<div class="right">
定寬
</div>
</div>
</body>
</html>
3、使用table實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列自適應,右列定寬</title>
<style>
.parent{
display: table;
table-layout: fixed;
width: 100%;
}
.left{
display: table-cell;
height: 500px;
background: red;
}
.right{
display: table-cell;
width: 200px;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
情況三: 兩列定寬,一列自適應
1、使用float+margin實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>左列自適應,右列定寬(1)</title>
<style>
.left{
width: 200px;
float: left;
background: red;
}
.center{
width: 200px;
float: left;
margin-left: 10px;
background: orangered;
}
.right{
margin-left: 420px;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="center">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
2、使用float+overflow實現
<html>
<head>
<meta charset="UTF-8">
<title>兩列定寬,一列自適應(2)</title>
<style>
.left{
width: 200px;
float: left;
background: red;
}
.center{
width: 200px;
float: left;
margin-left: 10px;
background: orangered;
}
.right{
overflow: hidden;
margin-left: 420px;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="center">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
3、使用table實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>兩列定寬,一列自適應</title>
<style>
.parent{
display: table;
table-layout: fixed;
width: 100%;
}
.left{
display: table-cell;
width: 200px;
background: red;
}
.center{
display: table-cell;
width: 200px;
margin-left: 10px;
background: teal;
}
.right{
display: table-cell;
margin-left: 420px;
background: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="left">
定寬
</div>
<div class="center">
定寬
</div>
<div class="right">
自適應
</div>
</div>
</body>
</html>
4、使用flex實現
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">