舉個例子:css
<div class="box a">Box A</div> <div class="box b">Box B</div> <style> .box { width: 100px; height: 100px; padding: 10px; border: 10px solid #f66; background: #f99; margin: 1em; } .b { box-sizing: border-box; } </style>
演示結果:html
box-sizing mdn文檔css3
<p>Some text</p> <style> p { height: 100%; background: red; } </style>
解析:默認狀況下body是沒有高度只有寬度。因此p
標籤的父級是body默認高度爲0,因此p
的高度也是0。
解決辦法:能夠設置height: 100vh
,使用一些屏幕的單位如vh
vw
,一個屏幕的高度是100vh
。canvas
<div> </div> <style> div { background: red; padding-top: 100%; } </style>
以上代碼padding-top等於父容器body的寬度,實現了一個響應式的正方形 瀏覽器
解析:padding
不論是padding-top
仍是padding-left
,它的百分比都是根據父容器的'寬度'來決定的。ide
使用場景:能夠利用padding的百分比來作出一些固定寬高比的盒子。svg
<div class="a"></div> <div class="b"></div> <style> .a{ background: lightblue; height: 100px; margin-bottom: 100px; } .b { background: coral; height: 100px; margin-top: 100px; } </style>
<div class="box"></div> <style> .box { border-width: 50px; border-style: solid; border-color: #f35 #269 #649 #fa0; width: 0px; height: 0px; margin: 1em auto; } </style>
經過給border的其餘的三條邊設置透明色,就能夠製做任意角度的三角形。佈局
思考題:這個圖標怎麼作?字體
方法1:使用border構造相間的三角形,而後使用overflow-hidden
和border-radius
剪裁成圓。另外注意水平、垂直居中的實現方式。flex
<div id="warning"> <div class="bg"></div> <div class="bg"></div> <div class="bg"></div> </div> <style> #warning { position: relative; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 200px; height: 200px; overflow: hidden; border-radius: 50%; } #warning .bg { position: absolute; width: 0; height: 0; top: -73.2px; left: 0px; border-top: solid 173.2px rgb(246, 226, 54); border-left: solid 100px transparent; border-bottom: solid 173.2px black; border-right: solid 100px transparent; } #warning .bg:nth-child(1) { transform: rotate(0deg); } #warning .bg:nth-child(2) { transform: rotate(120deg); } #warning .bg:nth-child(3) { transform: rotate(240deg); } </style>
方法2:利用svg的虛線來作,這個方法比較靈巧,不容易理解,請屢次調試stroke和stroke-dasharray的值加深理解。
<svg viewBox="0 0 64 64" class="warning"> <circle r="25%" cx="50%" cy="50%"/> </svg> <style> .warning { width: 300px; background: black; border-radius: 50%; } .warning circle { fill: none; stroke: yellow; stroke-width: 32; stroke-dasharray: 26%; } </style>
方法3:利用css3新特性:錐形漸變。
<div></div> <style> div { padding-top: 100%; background: repeating-conic-gradient(black 0 60deg, yellow 0 120deg); border-radius: 50%; } </style>
方法4:也可使用canvas和js等等。
塊級元素
p
div
section
display
設置爲block
、list-item
、table
將元素變爲塊級行級元素
inline
、inline-block
、inline-table
使元素變爲行級盒子的生成
塊級盒子中的子盒子的生成
<p>Some <em>Text</em></p>
,some在塊級盒子裏,而且沒有被行級元素包裹,因此會生成匿名的行級盒子。<div><h1>標題</h1><span>2018-5-12</span></div>
行級盒子內的子盒子的生成
<span> aaaaa <div> bbb </div> ccc </span>
行級盒子span
被div
分割成兩個行級盒子aaa,bbb,這兩個行級盒子又被匿名塊級盒子包含,因此呈三個塊級元素佈局。
display屬性
經過css生成盒子
::before
在元素內部的前面添加一個行盒::after
在元素內部的後面添加一個行盒display:list-item
這個就是列表前方的小圓點,就是給li前面添加一個行盒,生成小圓點。<p><span>Learn to Code HTML & CSS is a simple and comprehensive guide dedicated to helping beginners learn HTML and CSS. Outlining the fundamentals, this guide works through all common elements of front-end design and development.</span></p> <style> p { line-height: 2; padding: 1em; border: 2px solid #00f; background: #ccf; } span { background: #fcc; border: 2px solid #f00; } </style>
塊級盒子能夠包含多個行級盒子,行級盒子能夠分佈多行。
margin
,border
和 padding
都有效text-align
屬性決定inline-block
),該元素會被做爲一個總體決定分佈在哪個行盒總結一下:浮動元素後面的塊級元素不會‘發現’浮動元素,而行級盒子會避開前面的浮動元素。
舉個栗子🌰:
<section> <img src="http://p0.qhimg.com/t0117c2689d8703d551.jpg" width="120" alt="house"> <p><span>莫哈韋沙漠不只緯度較高,並且溫度要稍微低些,是命名該公園的 短葉絲蘭——約書亞樹的特殊棲息地。約書亞樹以從茂密的森林到遠遠 間隔的實例等各類形式出現。除了約書亞樹森林以外,該公園的西部包 括加州沙漠裏發現的最有趣的地質外觀。</span></p> </section> <style> img { float: left; } p { font-size: 14px; line-height: 1.8; border: 1px solid; } </style>
代碼演示
解釋一下:
上述代碼中,<p>
沒有由於<img>
的而影響定位,<p>
並無‘發現’<img>
圖片,而<span>
裏的文字‘避開’了<img>
利用float能夠作圖文混排效果
/* 凡是遇到清除浮動,就這麼寫 */ .clearfix::after { content: ' '; display: block; clear: both; height:0; overflow: hidden; }
下面這些屬性會觸發bfc,bfc裏面的浮動不會溢出影響外部的盒子的排版,這樣與清除浮動的效果是同樣的。
overflow: hidden/auto
display: inline-block
float: left/right
overflow:hidden
等方法建立inline-block
overflow
屬性非 visible
的塊框bfc就是爲了把本身裏面的東西‘封閉’起來,不與外界作過多的‘干擾’。
margin
摺疊position
z-index 堆疊層次
來看下面一坨代碼,重點看有z-index
的元素
<nav> <ul> <li>z-index: 2</li> </ul> </nav> <div id="dialog"> z-index: 1 </div> <style> nav { position: fixed; top: 0; } nav ul { position: absolute; z-index: 2; top: 0; left: 0; background: red; padding: 1em; width: 10em; } #dialog { position: absolute; z-index: 1; top: 5em; left: 5em; background: blue; height: 10em; width: 10em; } body { color: #fff; } li { margin: 1em 0; list-style:none; } #dialog { padding: 1em; } ul { padding: 1em; } </style>
<nav>
與div#dialog
比較,<nav>
中的z-index
是默認值auto
, div#dialog
中的z-index
是1
,因此藍色框在上面。nav
裏面的元素的z-index
再大也不能排在上面,由於他的父級‘不行’😁😀。position
設置爲absolute
呢?你能夠試試改一下上面的代碼,得出結果是否是大吃一驚呢?爲何紅色就上去了呢?
position
爲 fixed
或 sticky
的元素不用z-index
就會建立堆疊上下文,這樣<div>
和<nav>
進行z-index
比較。positiong:absolute
的元素須要同時設定z-index
纔會建立堆疊上下文,nav
中沒有設置z-index
,因此不會建立堆疊上下文,而<nav>
裏面的<ul>
既包含了定位與z-index
屬性,因此div
就會和<nav>
裏面的<ul>
做比較,這樣紅色框會在藍色框上面。有以上特色的都會建立堆疊上下文
在每個堆疊上下文中,從下到上:
若是想改變對齊方式怎麼辦呢?
baseline
| sub
| super
| top
| text-top
| middle
| bottom
| text-bottom
| <percentage>
| <length>
由上圖舉例說明:
vertical-align
爲middle
,middle這根線的位置是x-height的一半(x-height在font-metrics圖片中有定義)。vertical-align
設置爲text-top
,那麼它的上邊緣與text-top這條線對齊。<p> <img src="https://p5.ssl.qhimg.com/t013753a42172e3170a.jpg" alt="car" width="400" /> </p> <style> p { padding: 0; background: red; } </style>
代碼演示:
能夠看出img圖片是基於p標籤中的文字基線來排版的,那麼如何讓圖片下面這段紅線去掉呢?
img
設置成block
,這樣塊級與塊級就不會涉及(行內排版)這種狀況。p
設置vertical-align
設置middle
屬性,這樣img
的中線與p
的中線對齊,就不會出現這種問題text-align
left
| right
| center
| justify
(兩端對齊)text-align: justify
生效了麼?<nav> <a href="#">Home</a> <a href="#">Products</a> <a href="#">Contact</a> <a href="#">Help</a> </nav> <style> nav { text-align: justify; background: #dcc } nav a { display: inline-block; line-height: 3; } </style>
答案是並無,這是由於什麼呢?由於nav中的文字僅僅只有一行,它是第一行也是最後一行,text-align:justify
不會對最後一行起做用。
css爲何要這樣設置呢?
咱們能夠想一下,若是咱們有多行文字,最後結尾的文字大多數都是少於一行的,若是css對於最後一行文字也進行兩端對齊的話,豈不是很醜。。。
像這樣:
因此css不給最後一行文字進行兩段對齊。
可使用text-align-last:justify
, 能夠給最後一行文字設置兩端對齊。
若是對你有所幫助,請點個贊呀~~
若是想對css想深刻了解能夠看看張鑫旭老師的博客,關注奇舞週刊~