前言:這是筆者學習以後本身的理解與整理。若是有錯誤或者疑問的地方,請你們指正,我會持續更新!css
border:border-width border-style border-color;css3
邊框能夠根據方向單獨設置,上下左右,border-top | border-bottom | border-left | border-right ;瀏覽器
因此屬性也能夠單獨設置,border-top-width | border-top-style | border-top-color ;app
單屬性也能夠有組合寫法:性能
還能夠根據方向來用組合寫法:學習
邊框的交界處是斜線,大師們用這個特性作出了三角形,配合其餘屬性,能夠作出各類圖形;測試
原理就是:控制四個方向的邊框顏色,就能夠作出三角形。再控制寬度,就能夠作出各類不一樣的鈍角、銳角三角形;spa
.triangle { border-style: solid; border-width: 30px 50px 60px 80px; /*咱們能夠控制各方向邊框的寬度,作出各類不一樣的三角形*/ border-color: #f00 #0f0 #00f #0ff; /*四個方向的顏色自由設置,當設置其餘三個方向或兩個方向的顏色爲transparent(透明色)時,另外一方向就成了一個三角形*/ width: 0; /*盒子寬度爲0,四個方向的border寬度一致,能夠用border作正方形*/ margin: 100px; }
我比較喜歡根據方向來寫三角形,這樣容易理解:設計
.triangle { border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #0ff; /*咱們通常根據方向來寫三角形,這樣容易記憶;箭頭指向的反方向的顏色設置爲你想要的,而後箭頭方向不要寫,另外兩個方向的顏色設置爲transperent透明*/ }
三角形作出來了,可是當咱們給元素定義一個 box-shadow,會出現以下狀況:code
若是不想要陰影,很好解決,刪掉三角形的 box-shadow 就行了;
而在實際應用中,咱們不少狀況下是須要陰影的,只是陰影出如今三角形的兩條邊上,下圖給容器設置了陰影;
咱們能夠在加一個元素,也寫成三角形,設置層級比箭頭和容器元素都小,而且設置濾鏡,位置比箭頭稍高,露出邊緣部分就能夠了;
當咱們把以前的箭頭刪掉,就是如右圖:
完成品:
PS:濾鏡也有兼容性問題,建議用谷歌瀏覽器測試;
<style type="text/css"> .note { margin: 100px; width: 200px; height: 80px; background: #f60; position: relative; border-radius: 5px; box-shadow: 0 0 10px 0px #000; /*水平偏移---垂直偏移---模糊度---擴張半徑---顏色*/ } .triangle { border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #f60; /*咱們通常根據方向來寫三角形,這樣容易記憶;箭頭指向的反方向的顏色設置爲你想要的,而後箭頭方向不要寫,另外兩個方向的顏色設置爲transperent透明*/ position: absolute; top: -10px; left: 50%; margin-left: -10px; } .filter { border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #000; position: absolute; top: -10px; left: 50%; margin-left: -10px; z-index: -1; filter: blur(2px); /*這又設計到濾鏡的知識*/ } </style> <div class="wrapper"> <div class="note"> <span class="triangle"></span> <span class="filter"></span> </div> </div>
仍是 filter,可是設置 drop-shadow;
drop-shadow 不支持內陰影,可是支持不規則圖形的陰影。
<style type="text/css"> .note { margin: 100px; width: 200px; height: 80px; background: #f60; position: relative; border-radius: 5px; /*box-shadow: 0 0 10px 0px #000;*/ /*水平偏移---垂直偏移---模糊度---擴張半徑---顏色*/ filter: drop-shadow(0 0 6px #000); /*看清楚哦,drop-shadow沒有擴張半徑*/ } .triangle { border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #f60; /*咱們通常根據方向來寫三角形,這樣容易記憶;箭頭指向的反方向的顏色設置爲你想要的,而後箭頭方向不要寫,另外兩個方向的顏色設置爲transperent透明*/ position: absolute; top: -10px; left: 50%; margin-left: -10px; } </style> <div class="wrapper"> <div class="note"> <span class="triangle"></span> </div> </div>
三角形陰影問題解決方法如上。
同理,三角形的邊框也能夠這樣寫:寫個三角形,沉在箭頭下邊,顏色設置成邊框顏色,位置比箭頭稍高一些(容器邊框寬度值),就能夠了;
接下來我使用 :after 和 :before 寫的三角形和邊框,同理上面的陰影也能夠這樣;
<style type="text/css"> .note { margin: 100px; width: 200px; height: 80px; background: #f0f; position: relative; border-radius: 5px; border: 1px solid #000; } .note:after { content: ""; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #f0f; /*咱們通常根據方向來寫三角形,這樣容易記憶;箭頭指向的反方向的顏色設置爲你想要的,而後箭頭方向不要寫,另外兩個方向的顏色設置爲transperent透明*/ position: absolute; top: -10px; left: 50%; margin-left: -10px; } .note:before { content: ""; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #000; position: absolute; top: -11px; /*寫個三角形,沉在箭頭下邊,顏色設置成邊框顏色,位置比箭頭稍高一些(容器邊框寬度值),就能夠了*/ left: 50%; margin-left: -10px; z-index: -1; } </style> <div class="wrapper"> <div class="note"></div> </div>
css3 屬性 border-radius,「邊框半徑」,值能夠用 px、em、pt、百分比等。
border-radius 支持四個角使用不一樣弧度,方向依次是左上--右上--右下--左下(是從左上開始,順時針)。
border-radius 還能夠單獨對每一個角設置:
單獨設置能夠寫兩個值,第一個值是水平半徑,第二個值是垂直半徑;若是隻有一個值,那麼水平和垂直相等。
<style type="text/css"> * { padding: 0; margin: 0; } .test { width: 200px; height: 80px; margin: 100px; background: #f0f; border-radius: 15px 20px 35px 50px / 10% 25% 1em 50%; /*水平-----/-----垂直,中間用「/」隔開*/ /*左上水平 右上水平 右下水平 左下水平 / 左上垂直 右上垂直 右下垂直 左下垂直*/ /*這種方法不推薦使用,太亂了,傻傻分不清楚*/ } </style> <div class="test"></div>
固然,這個屬性咱們用的最多的就是畫圓形,把值設成寬度的一半及以上(50%及以上)。
有的需求是邊框外面還有邊框,咱們能夠用 outline 來寫,有一個相關的屬性 outline-offset,能夠控制描邊與邊緣的位置關係,能夠設置成負值;
outline 製做多重邊框,最多隻能兩層,並且不能是弧形的;
.test { margin: 100px; width: 200px; height: 80px; border: 10px solid #f0f; outline: 15px solid #f90; outline-offset: -25px; }
box-shadow 能夠作不少層(多了會很卡,電腦性能問題),並且配合 border-radius 屬性能夠作出弧形;
box-shadow 是不佔據空間的,因此沒法響應事件,咱們能夠利用 inset 設置成內陰影,在擴大空間就行了;
.test { margin: 100px; width: 200px; height: 80px; border: 10px solid #f0f; border-radius: 25% 30% 50% 29%; box-shadow: 0 0 0 10px #0f0, 0 0 0 20px #ff0, 0 0 0 10px #0ff inset; /*水平偏移---垂直偏移---擴張半徑---模糊度---顏色*/ /*能夠寫多個陰影,用逗號隔開*/ /*inset是內陰影*/ /*因爲box-shadow屬性並不佔據空間,因此是沒法響應事件的,咱們能夠利用inset內陰影,再用padding擴充空間就行了*/ }