.parent {
position: relative;
}
.child {
width: 200px;
height: 200px;
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
margin: auto;
}
複製代碼
2.margin 負間距javascript
.child{
width:200px;
height: 200px;
position: absolute;
left:50%;
top:50%;
margin-left:-100px;
margin-top:-100px;
}
複製代碼
.child {
width: 200px;
height: 200px;
position:absolute;
left:50%; /* 定位父級的50% */
top:50%;
transform: translate(-50%,-50%); /*本身的50% */
}
複製代碼
.parent {
display: flex;
justify-content:center;
align-items:center;
}
複製代碼
.parent {
display: flex;
}
.child {
margin: auto
}
複製代碼
父元素設置teable-cell元素,利用三層結構模擬父子結構css
.parent {
display: table;
width: 200px;
height: 200px;
}
.child {
display: table-cell;
text-align: center;
vertical-align: middle;
}
.box {
display: inline-block;
}
複製代碼
.parent {
display: grid;
}
.child {
justify-self: center;
align-self: center;
}
複製代碼
.parent {
display: grid;
}
.child {
margin: auto;
}
複製代碼
<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>
複製代碼
flex實現方式:java
<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>
複製代碼
<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>
複製代碼
普通佈局實現:
實現步驟:web
<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>
複製代碼
三欄式佈局的七種佈局方式:float佈局、絕對定位佈局、聖盃佈局、雙飛翼佈局、Flex佈局、表格佈局、網格佈局
segmentfault
實現步驟:
1.左右兩欄設置float屬性使其脫離文檔流左邊欄設置 float:left, 右邊欄設置float: right
2.給中間元素設置margin-left、和margin-right,設置margin的緣由是當中間元素高度超出左右兩邊時,中間元素會被覆蓋
3.爲了避免影響其餘元素,給父元素清除浮動瀏覽器
<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>
複製代碼
缺點:使用的時候只須要注意必定要清除浮動ide
實現步驟佈局
<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>
複製代碼
缺點:絕對定位是脫離文檔流的,意味着下面的全部子元素也會脫離文檔流,致使了這種方法的有效性和可以使用性是比較差的post
實現步驟flex
<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>
複製代碼
實現步驟
<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>
複製代碼
和聖盃佈局相似,只是處理中間欄部份內容被遮擋問題的解決方案有所不一樣
實現步驟
<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>
複製代碼
極其靈活(還有其餘實現方式),須要注意瀏覽器兼容性
實現步驟
<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>
<!-- 這時的main要放在中間 -->
<div class="main">
<div class="content"></div>
</div>
<div class="right"></div>
</body>
複製代碼
這種佈局方式能使得三欄的高度是統一的,但不能使main放在最前面獲得最早渲染
實現步驟
<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>
複製代碼
使用起來極其方便,代碼簡介,可是兼容性不好
<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>
複製代碼
實現步驟:
<style>
.container {
overflow: hidden;
}
.container>div {
/**
* padding-bottom 設置比較大的正值。
* margin-bottom 設置絕對值大的負值。
**/
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>
複製代碼
實現思路:
<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>
複製代碼
實現步驟:
1.父元素設置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>
複製代碼
<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>
複製代碼
實現步驟:
實現方式一:
<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>
複製代碼
實現方式二:
// 與上述實現道理基本相同,不一樣的是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>
複製代碼
缺點:使用inline-block會有小的間隙
實現步驟:
<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>
複製代碼
實現步驟:
<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>
複製代碼
實現步驟:
<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>
複製代碼
缺點:兩種實現方式都只能從上往下排列,不能從左往右排列
CSS佈局說——多是最全的
css 多列等高
CSS || 三欄佈局,兩邊固定,中間自適應
三種方式實現聖盃佈局
分享一次純 css 瀑布流 和 js 瀑布流