CSS頁面佈局是web前端開發的最基本的技能,本文將介紹一些常見的佈局方法,涉及到盒子佈局,column佈局,flex佈局等內容。本文中,你可以看到一些水平垂直居中的方法,左側固定寬度,右側自適應的一些方法。如果你有更多關於佈局方面的技巧,歡迎留言交流。
一、神奇的居中
經常看到有一些面試題問如何實現水平垂直居中,還要求用多種方法。唉唉唉!下面介紹一下我所知道的實現居中的方法。
(1)父元素relative;子元素absolute,top:50%;left:50%;margin-left:-自己寬度的一半;margin-right:-自己高度的一半。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中2</title>
<style type="text/css">
.container{
width: 100%;
height: 500px;
background: red;
position: relative;
}
.child{
width: 300px;
height: 300px;
background: blue;
position: absolute;
left: 50%;
margin-left: -150px;
top: 50%;
margin-top: -150px;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
這種方法需要知道子元素的寬高。
(2)父元素:relative;子元素:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中3</title>
<style type="text/css">
.container{
background: red;
width: 100%;
height: 500px;
position: relative;
}
.child{
background: blue;
width: 300px;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
此法跟上面的相似,但是用到了transform,好處是不需要知道子元素的寬高,兼容性方面我查了一下,看着辦吧。
(3)父元素:display: flex;justify-content: center;align-items: center;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中1</title>
<style type="text/css">
.container{
width: 100%;
height: 400px;
background: red;
display: flex;
justify-content: center;
align-items: center;
}
.child{
width: 300px;
height: 300px;
background: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
這種方法看起來有些高大上,根本不用理會子元素。
(4)水平居中的方法,父元素:text-align:center
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中4</title>
<style type="text/css">
.container{
background: red;
width: 100%;
height: 500px;
text-align: center;
}
.child{
background: blue;
width: 300px;
height: 300px;
margin: auto;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
如果子元素裏的文字不要水平居中的話,那麼用此法將遇到不少麻煩。
(5)水平居中方法,子元素:margin:0 auto;這個好說,不上代碼了
好了,關於居中問題就說這麼多,如果你還有更好的方法,請告訴我。
二、左側固定寬度,右側自適應
這是一個比較常見的需求,下面介紹幾種實現方法。
(1)左邊定寬,左浮動,右邊不指定寬。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>做固定,右邊自適應</title>
<style type="text/css">
body{
margin: 0;
}
.aside{
background: red;
width:200px;
height: 500px;
float: left;
}
.main {
background: blue;
height: 500px;
}
</style>
</head>
<body>
<div class="aside">
我是左邊的
</div>
<div class="main">
我是主體
我是主體
我是主體
我是主體
我是主體
</div>
</body>
</html>
做實驗時無意發現了這種方法,意外之喜。
(2)用padding佔位子的方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左側固定右側自適應</title>
<style type="text/css">
.container {
padding-left: 200px;
width: 100%;
position: relative;
}
.left{
position: absolute;
left: 0;
right: 0;
background: red;
height: 500px;
width: 200px;
}
.right{
background: blue;
width: 100%;
height: 500px;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新華社俄羅斯喀山3月23日電(記者 魏良磊)中俄執政黨對話機制第六次會議和第五屆中俄政黨論壇23日在俄羅斯喀山舉行。中共中央總書記習近平和俄羅斯聯邦總統普京分別致賀信。
</div>
</div>
</body>
</html>
注意了,absolute是脫離文檔流的。.right的100%是相對於父容器的內容寬度的,不是整個寬度。
(3)父:display:flex;左定寬;右flex:1。ok
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左邊固定,右邊自適應</title>
<style type="text/css">
.container{
display: flex;
}
.left{
width: 200px;
height: 500px;
background: red;
}
.right{
background: blue;
height: 500px;
flex: 1;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新華社俄羅斯喀山3月23日電(記者 魏良磊)中俄執政黨對話機制第六次會議和第五屆中俄政黨論壇23日在俄羅斯喀山舉行。中共中央總書記習近平和俄羅斯聯邦總統普京分別致賀信。
</div>
</div>
</body>
</html>
彈性盒子很強,有木有。但是有的是要加前綴的,哪些要加自己查去,有一次做實驗,電腦樣式正確,手機就是不對,搞了好半天。
(4)父:display:table;左右:display:table-cell;左:定寬。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左邊固定,右邊自適應</title>
<style type="text/css">
.container{
display: table;
}
.left{
width: 200px;
height: 500px;
background: red;
display: table-cell;
}
.right{
background: blue;
height: 500px;
display: table-cell;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新華社俄羅斯喀山3月23日電(記者 魏良磊)中俄執政黨對話機制第六次會議和第五屆中俄政黨論壇23日在俄羅斯喀山舉行。中共中央總書記習近平和俄羅斯聯邦總統普京分別致賀信。
</div>
</div>
</body>
</html>
據說這是一種古老的方法,我咋不知道呢?可能我比較年輕吧!
三、總結
CSS這個東西看起來挺簡單的,要掌握好還真實不簡單。特別佩服張鑫旭,他對CSS的研究真的非常非常深入,雖然說不太喜歡他的風格。先到這,以後在再補充下相關的內容。