本文是筆者在學習CSS時的一些小白總結css
咱們知道的盒子模型主要由4個區域組成,分別是內容區域(content),內邊距區域(padding),邊框區域(border)和外邊距區域(margin)。 對於不瞭解盒子模型的朋友能夠移步到這裏瞭解一下。html
替換元素(replaced element),顧名思義就是內容能夠被替換的元素。react
咱們一般會把一些特殊意義的文本替換成圖片,好比一個網站的logo。併發
::before
和
::after
兩個僞元素,把這些與邏輯不相關的寫在css裏,react dom則專一於數據的表現。
<div className="price-panel">
<span className="price-panel__price">
¥
{(totalPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount-price">
已省¥
{(totalDiscountPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount">
(
{(discount / 10).toFixed(1)}
折)
</span>
</div>
複製代碼
使用了僞元素後的react代碼顯然更加清晰表示數據。 HTML:dom
<div className="price-panel">
<span className="price-panel__price">
{(totalPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount-price">
{(totalDiscountPrice / 100).toFixed(1)}
</span>
<span className="price-panel__discount">
{(discount / 10).toFixed(1)}
</span>
</div>
複製代碼
SCSS:學習
.price-panel {
&__price {
&::before {
content: '¥';
}
}
&__discount-price {
&::before {
content: '已省¥';
}
}
&__discount {
&::before {
content: '(';
}
&::after {
content: '折)';
}
}
}
複製代碼
咱們還能使用僞元素幫助實現一些原本須要多個div實現的樣式,好比下面這個對話框。網站
HTML:spa
<div class="dialog">Hi,I’m a bubble dialog. Can you see me?</div>
複製代碼
CSS:3d
.dialog {
background: #f0f;
padding: 10px;
border-radius: 10px;
color: white;
max-width: 250px;
position: relative;
overflow: visible;
}
.dialog::after {
position: absolute;
content: '';
display: inline-block;
border-width: 5px 10px;
border-style: solid;
border-color: transparent transparent #f0f #f0f;
width: 0;
height: 0;
right: -20px;
}
複製代碼
padding的百分比值是很是有用的。須要注意的padding的百分比值,不管是水平方向仍是垂直方向都是相對於寬度進行計算的不管是水平方向仍是垂直方向都是相對於包含塊(即父元素)寬度進行計算的。(謝謝@熊謝謝 指點)code
若是須要弄一張16:9的等比縮放圖片,能夠利用padding的這個特性,設置一個padding-top
或者padding-bottom
爲56.25%便可(100\16*9)
塊級元素的margin-top
和margin-bottom
有時候會合併爲單個margin,這種現象叫margin合併。 margin合併發生兩個重要元素
margin合併的場景
在實際開發中,父子margin合併頗有可能會帶給咱們麻煩。 以下圖所示,div表現出和咱們預想不一致的結果。
那麼怎麼才能防止這種父子margin合併致使的和預想不一致問題呢? 解決方法以下(這裏直接複製了張鑫旭老師書籍《CSS世界》的原話。): (1)對於margin-top合併(知足一個便可):
border-top
的值(親測transparent也能夠的)padding-top
的值(2)對於margin-bottom合併(知足一個便可):
border-bottom
(transparent也能夠的)padding-bottom
height
、min-height
或者max-height
每當說到margin:auto
,個人第一反應是居中。但這個只是一個淺層應用的表象。 接下來咱們去一塊兒看看這個margin:auto
到底是‘何方神聖’。
margin:auto
的填充規則以下:
我會疑惑爲何我設置了margin: auto
,卻在垂直方向上沒有居中。
這裏《css世界》中給出的答案讓人很是容易理解。假如把.son元素的height去掉,.son的高度會自動變成父元素的200px,顯然不會,因此沒法觸發margin: auto。同理,若是把width爲200px去掉,確實是會和父元素同樣寬。
那麼如何讓垂直居中呢? 子元素使用絕對定位後設置margin: auto
便可
咱們能夠利用border color爲透明來繪製一些圖形,好比三角形
注意border-color
這個屬性。
/* border-color: color; 單值語法 */
border-color: red;
/* border-color: vertical horizontal; 雙值語法*/
border-color: red #f015ca;
/* border-color: top horizontal bottom; 三值語法 */
border-color: red yellow green;
/* border-color: top right bottom left; 四值語法 */
border-color: red yellow green blue;
複製代碼
固然,咱們繪製三角形不限於這種等腰三角。
這裏繪製了一個底邊分別是60px和160px的直角三角形。
文章主要參考了張鑫旭老師的《css世界》並根據本身的業務作出的一些實踐總結。