.parent { position: relative; } .child { width: 200px; height: 200px; position: absolute; left: 0; top: 0; bottom: 0; right: 0; margin: auto; }復(fù)制代碼
2.margin 負(fù)間距
.child{ width:200px; height: 200px; position: absolute; left:50%; top:50%; margin-left:-100px; margin-top:-100px; }復(fù)制代碼
.child { width: 200px; height: 200px; position:absolute; left:50%; /* 定位父級(jí)的50% */ top:50%; transform: translate(-50%,-50%); /*自己的50% */ }復(fù)制代碼
.parent { display: flex; justify-content:center; align-items:center; }復(fù)制代碼
.parent { display: flex; } .child { margin: auto }復(fù)制代碼
父元素設(shè)置teable-cell元素,利用三層結(jié)構(gòu)模擬父子結(jié)構(gòu)
.parent { display: table; width: 200px; height: 200px; } .child { display: table-cell; text-align: center; vertical-align: middle; } .box { display: inline-block; }復(fù)制代碼
grid布局.parent { display: grid; } .child { justify-self: center; align-self: center; }復(fù)制代碼
.parent { display: grid; } .child { margin: auto; }復(fù)制代碼
二、自適應(yīng)布局右邊寬度固定,左邊自適應(yīng)
float布局實(shí)現(xiàn)方式
實(shí)現(xiàn)步驟:
<style> .container > div { height: 200px; } .left { background-color: #ce5a4b; float: left; width: 100px; } .right { background-color: #499e56; margin-left: 100px; } </style><body> <div class='container'> <div class='left'></div> <div class='right'></div> </div></body>復(fù)制代碼
flex實(shí)現(xiàn)方式:
<style> .container { display: flex; } .left { background-color: #ce5a4b; height: 200px; width: 100px; } .right { background-color: #499e56; height: 200px; flex: 1; } </style><body> <div class='container'> <div class='left'></div> <div class='right'></div> </div></body>復(fù)制代碼
上部高度固定,下部高度自適應(yīng)
絕對(duì)定位實(shí)現(xiàn)方式:
實(shí)現(xiàn)步驟:
<style> .container { height: 100%; padding: 100px 0 0; box-sizing: border-box; position: relative; } .top { height: 100px; background: #ce5a4b; position: absolute; top: 0; left: 0; width: 100%; } .bottom { height: 100%; background: #499e56; } </style><body> <div class='container'> <div class='top'></div> <div class='bottom'></div> </div></body>復(fù)制代碼
普通布局實(shí)現(xiàn):
實(shí)現(xiàn)步驟:
<style> .container { height: 500px; padding-top: 100px; box-sizing: border-box; } .top { height: 100px; background: #ce5a4b; margin: -100px 0 0; } .bottom { height: 100%; background: #499e56; } </style><body> <div class='container'> <div class='top'></div> <div class='bottom'></div> </div></body>復(fù)制代碼
三、三欄式布局三欄式布局的七種布局方式:float布局、絕對(duì)定位布局、圣杯布局、雙飛翼布局、Flex布局、表格布局、網(wǎng)格布局
實(shí)現(xiàn)步驟:
1.左右兩欄設(shè)置float屬性使其脫離文檔流左邊欄設(shè)置 float:left, 右邊欄設(shè)置float: right
2.給中間元素設(shè)置margin-left、和margin-right,設(shè)置margin的原因是當(dāng)中間元素高度超出左右兩邊時(shí),中間元素會(huì)被覆蓋
3.為了不影響其他元素,給父元素清除浮動(dòng)
<style> .left { float: left; width: 100px; height: 200px; background: #ce5a4b; } .right { float: right; width: 200px; height: 200px; background: #499e56; } .main { margin-left: 120px; margin-right: 220px; height: 200px; background: #f8cf5f; } .container::after { content: ''; display: block; clear: both; } </style><body> <div class='container'> <div class='left'></div> <div class='right'></div> <div class='main'></div> </div></body>復(fù)制代碼
缺點(diǎn):使用的時(shí)候只需要注意一定要清除浮動(dòng)
實(shí)現(xiàn)步驟
<style> .container { position: relative; } .left { position: absolute; left: 0; width: 100px; height: 300px; background-color: #ce5a4b; } .main { position: absolute; left: 120px; right: 220px; height: 300px; background-color: #f8cf5f; } .right { position: absolute; right: 0; width: 200px; height: 300px; background-color: #499e56; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
float和BFC配合圣杯布局缺點(diǎn):絕對(duì)定位是脫離文檔流的,意味著下面的所有子元素也會(huì)脫離文檔流,導(dǎo)致了這種方法的有效性和可使用性是比較差的
實(shí)現(xiàn)步驟
<style> .container { overflow: hidden; padding: 0 220px 0 120px; } .container>div { position: relative; float: left; height: 300px; } .main { width: 100%; background-color: #f8cf5f; } .left { width: 100px; margin-left: -100%; left: -120px; background-color: #ce5a4b; } .right { width: 200px; background-color: #499e56; margin-left: -200px; right: -220px; } </style> <div class='container'> <div class='main'></div> <div class='left'></div> <div class='right'></div> </div>復(fù)制代碼
實(shí)現(xiàn)步驟
<style> .container { overflow: hidden; } .container>div { position: relative; float: left; height: 300px; } .main { width: 100%; } .main::after { content: ''; display: block; clear: both; } .left { width: 100px; background-color: #ce5a4b; margin-left: -100%; } .right { width: 200px; background-color: #499e56; margin-left: -200px; } .content { height: 100%; margin: 0 220px 0 120px; overflow: hidden; background-color: #f8cf5f; } </style> <div class='container'> <div class='main'> <div class='content'></div> </div> <div class='left'></div> <div class='right'></div> </div>復(fù)制代碼
flex布局和圣杯布局類(lèi)似,只是處理中間欄部分內(nèi)容被遮擋問(wèn)題的解決方案有所不同
實(shí)現(xiàn)步驟
<style> .container { display: flex; } .main { background-color: #f8cf5f; width: 100%; height: 300px; order: 2; } .left { background-color: #ce5a4b; width: 100px; height: 300px; margin-right: 20px; flex-shrink: 0; order: 1; } .right { background-color: #499e56; width: 200px; height: 300px; flex-shrink: 0; margin-left: 20px; order: 3; } </style><body> <div class='container'> <div class='main'></div> <div class='left'></div> <div class='right'></div> </div></body>復(fù)制代碼
table-cell布局極其靈活(還有其他實(shí)現(xiàn)方式),需要注意瀏覽器兼容性
實(shí)現(xiàn)步驟
<style> .container { width: 100%; display: table; } .container > div { display: table-cell; height: 300px; } .content { height: 100%; margin: 0 20px; background: #f8cf5f; } .left { width: 100px; min-width: 100px; background-color: #ce5a4b; } .right { width: 200px; min-width: 200px; background-color: #499e56; } </style> <body> <div class='left'></div> <!-- 這時(shí)的main要放在中間 --> <div class='main'> <div class='content'></div> </div> <div class='right'></div> </body>復(fù)制代碼
網(wǎng)格布局這種布局方式能使得三欄的高度是統(tǒng)一的,但不能使main放在最前面得到最先渲染
實(shí)現(xiàn)步驟
<style> .container { display: grid; width: 100%; grid-template-rows: 300px; grid-template-columns: 100px auto 200px; } .left { background-color: #ce5a4b; margin-right: 20px; } .main { background-color: #f8cf5f; } .right { background-color: #499e56; margin-left: 20px; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
四、多列等高利用背景圖片使用起來(lái)極其方便,代碼簡(jiǎn)介,但是兼容性很差
<style> .container { background: url('column.png') repeat-y; width: 960px; margin: 0 auto; } .left { float: left; width: 220px; } .main { float: left; width: 480px; } .right { float: left; width: 220px; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
使用正padding和負(fù)margin對(duì)沖實(shí)現(xiàn)多列布局方法實(shí)現(xiàn)步驟:
<style> .container { overflow: hidden; } .container>div { /** * padding-bottom 設(shè)置比較大的正值。 * margin-bottom 設(shè)置絕對(duì)值大的負(fù)值。 **/ padding-bottom: 10000px; margin-bottom: -10000px; float: left; width: 30%; } .left { background-color: #ce5a4b; } .main { background-color: #f8cf5f; } .right { background-color: #499e56; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
實(shí)現(xiàn)思路:
<style> .container { display: flex; } .left { width: 200px; background-color: #ce5a4b; } .main { flex: 1; height: 400px; background: #f8cf5f; } .right { width: 300px; background: #499e56; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
table-cell等高布局實(shí)現(xiàn)步驟:
1.父元素設(shè)置dispaly:table, table布局天然就具有等高的特性。
<style> .container { display: table; } .left { display: table-cell; width: 300px; background-color: #ce5a4b; } .main { display: table-cell; width: 300px; height: 400px; background: #f8cf5f; } .right { display: table-cell; width: 300px; background: #499e56; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
<style> .container { display: grid; grid-auto-flow: column; } .left { background-color: #ce5a4b; } .main { background-color: #f8cf5f; height: 300px; } .right { background-color: #499e56; } </style><body> <div class='container'> <div class='left'></div> <div class='main'></div> <div class='right'></div> </div></body>復(fù)制代碼
五、品字形布局實(shí)現(xiàn)步驟:
實(shí)現(xiàn)方式一:
<style> .container > div { height: 300px; width: 300px; } .top { margin: 0 auto; background-color: #f8cf5f; } .left { display: inline-block; // float: left; margin-left: 150px; background-color: #499e56; } .right { display: inline-block; // float: left; background-color: #ce5a4b; } </style><body> <div class='container'> <div class='top'>上</div> <div class='left'>左</div> <div class='right'>右</div> </div></body>復(fù)制代碼
實(shí)現(xiàn)方式二:
// 與上述實(shí)現(xiàn)道理基本相同,不同的是left和right元素布局 <style> .container>div { height: 300px; width: 300px; } .top { margin: 0 auto; background-color: #f8cf5f; } .left { display: inline-block; // float: left; margin-left: -600px; background-color: #499e56; } .right { display: inline-block; // float: left; margin-left: 50%; background-color: #ce5a4b; } </style><body> <div class='container'> <div class='top'>上</div> <div class='right'>右</div> <div class='left'>左</div> </div></body>復(fù)制代碼
全屏的品字布局缺點(diǎn):使用inline-block會(huì)有小的間隙
實(shí)現(xiàn)步驟:
<style> .container>div { height: 200px; } .top { width: 100%; background-color: #f8cf5f; } .left { // display: inline-block float: left; width: 50%; background-color: #499e56; } .right { // display: inline-block float: left; width: 50%; background-color: #ce5a4b; } </style><body> <div class='container'> <div class='top'>上</div> <div class='left'>左</div> <div class='right'>右</div> </div></body>復(fù)制代碼
實(shí)現(xiàn)步驟:
<style> .container { -moz-column-count: 3; /* Firefox */ -webkit-column-count: 3; /* Safari 和 Chrome */ column-count: 3; -moz-column-gap: 2em; -webkit-column-gap: 2em; column-gap: 2em; width: 70%; margin: 2em auto; } .item { padding: 2em; margin-bottom: 2em; -moz-page-break-inside: avoid; -webkit-column-break-inside: avoid; break-inside: avoid; background: #ce5a4b; color: #fff; text-align: center; } .item .content-lar { height: 200px; } .item .content-mid { height: 100px; } .item .content-sma { height: 50px; } @media screen and (max-width: 800px) { .container { column-count: 2; /* two columns on larger phones */ } } @media screen and (max-width: 500px) { .container { column-count: 1; /* two columns on larger phones */ } } </style> <body> <div class='container'> <div class='item'> <div class='item_content content-lar'> 1 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 2 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 3 我中等 </div> </div> <div class='item'> <div class='item_content content-sma'> 4 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 5 我中等 </div> </div> <div class='item'> <div class='item_content content-lar'> 6 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 7 我最小 </div> </div> <div class='item'> <div class='item_content content-lar'> 8 我最大 </div> </div> <div class='item'> <div class='item_content content-lar'> 9 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 10 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 11 我中等 </div> </div> <div class='item'> <div class='item_content content-mid'> 12 我中等 </div> </div> <!-- more items --> </div></body>復(fù)制代碼
flex布局實(shí)現(xiàn)步驟:
<style> .container { height: 800px; display: flex; flex-flow: column wrap; width: 70%; margin: 2em auto; } .item { padding: 2em; margin-bottom: 2em; break-inside: avoid; background: #f60; color: #fff; text-align: center; margin: 10px; } .item .content-lar { height: 200px; } .item .content-mid { height: 100px; } .item .content-sma { height: 50px; } @media screen and (max-width: 1100px) { .masonry { height: 800px; } } @media screen and (max-width: 800px) { .masonry { height: 1100px; } } @media screen and (max-width: 600px) { .masonry { height: 1300px; } } @media screen and (max-width: 460px) { .masonry { height: 1600px; } } </style><body> <div class='container'> <div class='item'> <div class='item_content content-lar'> 1 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 2 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 3 我中等 </div> </div> <div class='item'> <div class='item_content content-sma'> 4 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 5 我中等 </div> </div> <div class='item'> <div class='item_content content-lar'> 6 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 7 我最小 </div> </div> <div class='item'> <div class='item_content content-lar'> 8 我最大 </div> </div> <div class='item'> <div class='item_content content-lar'> 9 我最大 </div> </div> <div class='item'> <div class='item_content content-sma'> 10 我最小 </div> </div> <div class='item'> <div class='item_content content-mid'> 11 我中等 </div> </div> <div class='item'> <div class='item_content content-mid'> 12 我中等 </div> </div> <!-- more items --> </div></body>復(fù)制代碼
缺點(diǎn):兩種實(shí)現(xiàn)方式都只能從上往下排列,不能從左往右排列
聯(lián)系客服