實現兩欄佈局一般指的是左邊固定,右邊自適應,這裡給出幾個案例給大家參考
.left {
width: 200px;
background: red;
height: 100px;
float: left;
}
.right {
width: calc(100% - 200px);
background: black;
float: left;
height: 100px;
}
.left {
width: 200px;
background: red;
height: 100px;
float: left;
}
.right {
background: black;
margin-left: 200px;
width: auto;
height: 100px;
}
.left {
width: 200px;
background: red;
height: 100px;
float: left;
}
.right {
background: black;
overflow: hidden;
height: 100px;
}
.outer {
display: flex;
}
.left {
width: 200px;
background: red;
height: 100px;
}
.right {
background: black;
flex: 1;
height: 100px;
}
.outer {
position: relative;
}
.left {
width: 200px;
background: red;
height: 100px;
position: absolute;
left: 0;
top: 0;
}
.right {
background: black;
height: 100px;
position: absolute;
left: 200px;
top: 0;
right: 0;
}
一般是指兩邊固定寬度,中間自適應的佈局
注意這裡必須將中間的盒子 center 放到最後,因為如果放在第二位它會獨佔一行,下一個浮動元素將會換行
<div class="outer">
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</div>
.left {
float: left;
width: 100px;
height: 100px;
background: red;
}
.right {
float: right;
width: 200px;
height: 100px;
background: pink;
}
.center {
height: 100px;
margin-left: 100px;
margin-right: 200px;
background: orange;
}
與第一種類似,只不過動態計算了 center 寬度
.left {
float: left;
width: 100px;
height: 100px;
background: red;
}
.right {
float: right;
width: 200px;
height: 100px;
background: pink;
}
.center {
height: 100px;
width: calc(100% - 300px);
margin-left: 100px;
background: orange;
}
給父容器設定左右 padding 留出空間,然後再給 left 和 right 設定負 margin 讓其移上來
.outer {
padding: 0 200px 0 100px;
}
.left {
width: 100px;
height: 100px;
float: left;
margin-left: -100px;
background: red;
}
.center {
height: 100px;
float: left;
background: orange;
width: 100%;
}
.right {
width: 200px;
height: 100px;
float: right;
background: pink;
margin-right: -200px;
}
雙飛翼佈局和聖盃佈局的不同之處是通過給 center 套個盒子,通過它的 margin 來留出空間,注意,它要放在最前面
.left {
width: 100px;
height: 100px;
float: left;
margin-left: calc(-100% + 200px);
background: red;
}
.center_wrap {
margin: 0 200px 0 100px;
}
.center {
height: 100px;
float: left;
background: orange;
width: 100%;
}
.right {
width: 200px;
height: 100px;
float: left;
background: pink;
margin-right: -200px;
}
<div class="outer">
<div class="center_wrap">
<div class="center"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</div>
使用 flex 佈局是非常容易實現的,兩邊設定寬度,中間 flex:1,寬度撐滿整個容器
.outer {
display: flex;
}
.left {
width: 100px;
height: 100px;
background: red;
}
.center {
height: 100px;
flex: 1;
background: orange;
}
.right {
width: 200px;
height: 100px;
background: pink;
}
.outer {
position: relative;
}
.left {
width: 100px;
height: 100px;
position: absolute;
left: 0;
top: 0;
background: red;
}
.center {
height: 100px;
left: 100px;
position: absolute;
right: 200px;
top: 0;
background: orange;
}
.right {
width: 200px;
height: 100px;
background: pink;
position: absolute;
right: 0;
top: 0;
}
使用 grid 則是最簡單的,給父元素設定:display:grid
,grid-template-colums:左盒子寬度 auto 右盒子寬度
,grid-template-rows:高度
.outer {
display: grid;
grid-template-columns: 100px auto 200px;
grid-template-rows: 100px;
}
.left {
background: red;
}
.center {
background: orange;
}
.right {
background: pink;
}
CSS 繪製三角形主要用到的是 border 屬性,border 屬性是由三角形組成的,如果設定很粗的話就能看出來,比如
div {
width: 0;
height: 0;
border: 100px solid;
border-color: red black pink green;
}
所以可以利用這個特性來繪製三角形,如
div {
width: 0;
height: 0;
border: 100px solid;
border-color: red transparent transparent transparent;
}
很簡單,加個 border-radius 即可
div {
width: 0;
height: 0;
border: 100px solid;
border-color: red transparent transparent transparent;
border-radius: 50%;
}
正常情況下最小單位是 1px,當然也有現代瀏覽器也支援 0.5px 的,為了考慮相容性,有以下幾種方案
transform: scale(0.5, 0.5);
我們經常可以看到 meta viewport 中有initial-scale=1
這樣一個熟悉,其實它是用來規定頁面的初始縮放的,可以設定成 0.5,這樣頁面的 1px 其實就是 0.5px 了
<meta name="viewport" content="width=device-width, initial-scale=0.5" />
css 的實現場景題還有很多,由於篇幅原因先寫這些,後續會持續更新,歡迎關注公眾號web 前端進階