第4章 深入理解 content
4.1 content - 替換元素
- 替換元素是指內(nèi)容可以被替換银觅。如:
<img>,<object>,<video>,<iframe>,表單元素
界斜。所有替換元素都是內(nèi)聯(lián)水平元素涯雅。 - 替換元素特點
- 外觀不受css控制包吝,如無法改變單選復(fù)選的樣式
- 有默認(rèn)的尺寸,大多為300px*150px刁品,img為0傀蚌,表單元素根據(jù)瀏覽器本身
- css屬性有自身的一套規(guī)則,替換元素的基線為元素下邊緣脱衙,非替換元素是字符x的下邊緣
- 沒有
::afte
r和::before
-
<input type="button">
和<button>
區(qū)別在于前者的white-space
是pre
后者是normal
侥猬,內(nèi)容足夠多時<button>自動換行例驹。 - 無法改變替換元素內(nèi)容的固有尺寸。
<div class="div"></div>
<!--這個 div 的圖片大小不會變-->
<style>
div:before {
content: url(1.jpg);
display: block;
width: 200px;
height: 200px;}
</style>
- 替換元素img沒有src時退唠,火狐瀏覽器下就是一個內(nèi)聯(lián)標(biāo)簽鹃锈,而谷歌瀏覽器要有一個不為空的alt值,IE則有一個默認(rèn)的占位符瞧预。
- 谷歌瀏覽器下所有元素都支持content屎债,但其他瀏覽器只有::after和::before支持。
- content屬性生成的對象叫匿名替換元素垢油,有如下特點
- content生成的文本不能復(fù)制和選中
- 能左右:empty元素盆驹,即使用content生成了文字,但依然當(dāng)做空
- content動態(tài)生成值無法獲取
- css counter
counter-reset
counter-increment
counter()/counters()
<style>
.reset { padding-left: 20px; counter-reset: wangxiaoer; line-height: 1.6; color: #666; }
.counter:before {
content: counters(wangxiaoer, '-') '. ';
counter-increment: wangxiaoer;
}
</style>
<div class="reset">
<div class="counter">我是王小二
<div class="reset">
<div class="counter">我是王小二的大兒子</div>
<div class="counter">我是王小二的二兒子
<div class="reset">
<div class="counter">我是王小二的二兒子的大孫子</div>
<div class="counter">我是王小二的二兒子的二孫子</div>
<div class="counter">我是王小二的二兒子的小孫子</div>
</div>
</div>
<div class="counter">我是王小二的三兒子</div>
</div>
</div>
<div class="counter">我是王小三</div>
<div class="counter">我是王小四
<div class="reset">
<div class="counter">我是王小四的大兒子</div>
</div>
</div>
</div>
4.2 溫和的 padding
內(nèi)聯(lián)元素的 clientHeight
和clientWidth
永遠(yuǎn)是0,垂直方向的行為表現(xiàn)完全受line-height
和vertical-align
的影響, 而設(shè)置 padding
可以對background
產(chǎn)生影響
技巧:
- 增加鏈接或按鈕的可點擊大小同時不影響當(dāng)前的內(nèi)容布局
artical a { paddingL .25em 0;}
2.登錄 | 注冊
垂直分格符號 在這里 css 模擬出的管道符號的vertical-align
是從 baseline 起步的,然后向下走1px,向上走10px
a + a:before {
content: "";
font-size: 0;
padding: 10px 3px 1px;
margin-left: 6px;
border-left: 1px solid gray;
}
自身變化卻不影響周圍元素定位的方法有
relative
box-shadow
outline
inline 元素的 padding
,其中inline 元素的 padding
會影響外部尺寸(增加可點擊面積), 而box-shadow
和outline
不會
4.2.2 padding的百分比值
-
padding
的百分比值是相對于父元素寬度計算的 - 內(nèi)聯(lián)元素的
padding
會斷行 , 參見 P78 -
padding:50%
沒顯示為正方形的原因是內(nèi)聯(lián)元素的垂直 padding
會讓幽靈空白節(jié)點顯現(xiàn), 那么設(shè)置font-size:0
即可顯示為正方形
4.2.3 標(biāo)簽元素內(nèi)置的 padding
-
ol/ul
列表內(nèi)置padding-left
且單位是px
, Chrome 下是40px
- 很多表單元素內(nèi)置
padding
:- 所有瀏覽器
<input> <textarea> <button>
內(nèi)置padding
- 部分瀏覽器
<select>
內(nèi)置padding
- 所有瀏覽器
<radio> <checkbox>
無內(nèi)置padding
-
<button>
按鈕的padding
最難控制! 表現(xiàn)為 Firefox 設(shè)置 padding 為0但左右仍然有;IE7下button 里文字變多時左右 padding 逐漸增大(可通過設(shè)置overflow:visible
消除). - 可使用
<label>
來解決上述<button> padding
兼容性問題, 參見P80
- 所有瀏覽器
4.2.4 padding 與圖形繪制
帶動畫的三道杠:
原書中使用
padding
繪制的確可行,不過要追求動畫的話還是選擇創(chuàng)建三個標(biāo)簽比較好
.line{
width: 150px;
height: 3px;
background-color: #00CCFF;
position: absolute;
top:50%;
left:50%;
margin-left: -75px;
transition : all 0.3s ease-in-out;
}
.line-middle{ margin-top: 0px;}
.line-top{ margin-top:-40px; }
.line-bottom{ margin-top:40px; }
.wrap:hover .line-top{transform: translateX(0) translateY(40px) rotate(-45deg);}
.wrap:hover .line-bottom{transform: translateX(0) translateY(-40px) rotate(45deg);}
.wrap:hover .line-middle{opacity:0}
雙層圓點效果 比較簡單所以不貼代碼了,只是說可以用 padding 實現(xiàn)
4.3 激進(jìn)的 margin
- 可以用
margin-left:auto
來替代float:left
實現(xiàn)右對齊效果 - 塊級元素垂直居中的一種方法
.father{width:300px;height:150px;position:relative;}
.son{
position:absolute:
top:0;right:0;left:0;bottom:0;
width:200px;height:100px;
margin:auto;
}
此時 .son
自動填充父級元素可用尺寸為300x150
,但是它寬高被限制, 那么多余的空間就是margin:auto
計算的空間, 也就是說,
為什么原始情況下margin: auto 0
不會讓元素垂直居中?
答: 因為width
和height
的對應(yīng)方向填充特性不同, width:auto
會填充至100%
,但height:auto
會使得元素高度變?yōu)?. 而margin:auto
的計算規(guī)則是對應(yīng)方向可用填充空間-元素實際大小
,剩余部分進(jìn)行 auto劃分
4.3.5 margin 無效情形
詳細(xì)情況建議看書
-
inline
的非替換元素(例如span
)的垂直margin
無效, 但inline 替換元素
(如img
)的垂直 margin 有效,而且沒有margin 合并
問題 -
display: table-cell | table-row
的marigin 無效
-
margin 合并
的時候, 若父元素設(shè)置margin-top:50px
則子元素嘗試設(shè)置的margin-top:30px
無效 - 絕對定位元素
非定位方位
的margin 無效. 例如img{ top:10%; left:30%}
,此時right
和bottom
處于auto
狀態(tài),也就是右側(cè)和底部沒有定位, 此時在這兩個方位上設(shè)置margin
就看不到定位變化.可以結(jié)合前面的top:0 ; bottom:0; left:0; right:0
的 margin計算規(guī)則來理解 - 定高容器的子元素的
margin-bottom
無效 , 定寬容器的子元素的margin-right
無效 - 書中6.4節(jié)和5.3節(jié)(圖片的位置被
vertical-align:baseline
限制死了導(dǎo)致margin-top
不起作用)相關(guān)的內(nèi)容
4.4 功勛卓越的 border
- 實現(xiàn)一個沒有下邊框的邊框效果時, 結(jié)合設(shè)置
寬度為0
和style 為 none
會使得渲染性能最高div{border:1px solid; border-bottom:0 none;}
-
border-color
的默認(rèn)值會使用當(dāng)前元素的color
值, 據(jù)此可以簡化hover
時的 css 代碼 - 可以用
border
繪制梯形和三角形
第5章 內(nèi)聯(lián)元素與流
5.2 內(nèi)聯(lián)元素的基石 line-height
-
行距
=line-height
-font-size
-
半行距
= (line-height
-font-size
) /2
例如設(shè)計師標(biāo)注了文字字形上邊緣到圖片下邊緣間距
20px
, 同時font-size: 14px; line-height:1.5
, 那么文字的實際margin-top
值應(yīng)該是17px
, 因為(14*1.5 - 14)/2
再向下取整是3px. 一般文字上間距向下取整, 文字下邊距向上取整
-
line-height
可以影響替換元素(如圖片高度)嗎? 答案是 不可以. 圖文混排時line-height
只能決定最小高度, 剩下的替換元素帶來的高度增加還會受到vertical-align
的影響 - 對于塊級元素
line-height
對其本身是沒有任何作用的, 如果改變line-height
的時候塊級元素的高度跟著變化 , 實際上是通過改變塊級元素里面的內(nèi)聯(lián)元素占據(jù)的高度實現(xiàn)的 - 設(shè)置
display:inline-block
的時候會重置從父元素繼承來的line-height
, 同時該'行框盒子'會附帶一個幽靈空白節(jié)點
來使父元素的line-height
生效, 該效果在實現(xiàn)多行文本居中的時候有體現(xiàn) -
line-height
的值為150% | 1.5em | 18px
時先在父元素計算后再繼承 , 為1.5
時先繼承再在子元素里計算 - CSS 中計算行高的時候, 行高值不要向下舍入,而要向上舍入,例如下面的代碼,在 Chrome 中
1.42857*14px
就會以19px 呈現(xiàn), Firefox 是20px 倒沒錯, 為了讓Chrome它們都呈現(xiàn)20px設(shè)置1.42858
更好一點
body{
line-height:1.42858; /* 20px/14px ~ 1.4285714 */
font-size: 14px;
}
- 幾個靠在一起的
inline
元素會共同組成一個"行框盒子",該行框盒子表現(xiàn)出來的line-height
會取它們(包括幽靈空白節(jié)點)的最大值
5.3 line-height 的好朋友 vertical-align
-
vertical-align:baseline
相當(dāng)于vertical-align:0
-
vertical-align
只能對內(nèi)聯(lián)元素以及table-cell
元素起作用. 有些屬性會在背后默默改變display
的計算值從而導(dǎo)致vertical-align
不起作用(例如浮動
和絕對定位
會讓元素塊狀化) - 一個
inline-block
元素滩愁,如果里面沒有內(nèi)聯(lián)元素躯喇,或者overflow
不是visible
, 則該元素的基線就是其margin
底邊緣;否則其基線就是元素里面最后一行內(nèi)聯(lián)元素的基線硝枉。 - 掘金
為什么 span{ font-size:20px ; line-height:20px}
后auto
計算的高度是28px
或其它不等于20的數(shù)值?
- 測試發(fā)現(xiàn),
PingFang SC
的文字形成的content-area
的高度大小= font-size*1.4
例如50px 對應(yīng)70px , 而 Arial 就是font-size:100px
對應(yīng)113px , 另外 Firefox 瀏覽器可能會比 Chrome多1px - W3C 說 行內(nèi)盒內(nèi)容區(qū)域高度在規(guī)范里面沒有定義廉丽,瀏覽器可以自己折騰
- 結(jié)論是: 行內(nèi)盒的內(nèi)容區(qū)域高度計算沒有統(tǒng)一的標(biāo)準(zhǔn),不同的字體或者不同的瀏覽器都可能導(dǎo)致不同的結(jié)果妻味,且其高度與 line-height 無關(guān)正压。由此我們無法確切地獲得一個跨瀏覽器的行內(nèi)盒的內(nèi)容區(qū)域高度。同樣我們也無法確切獲得一個跨瀏覽器的行內(nèi)盒高度(因為其計算式里面就包括了不定變量內(nèi)容區(qū)域高度)
- 但是, 我們應(yīng)該準(zhǔn)確計算行盒高度(最好把幽靈空白節(jié)點設(shè)為
line-height:0
)
為什么 span 的父元素高度受到父元素的 font-size 和自身的 font-size 影響?
答:因為對字符而言, font-size
越大字符的基線位置就越往下, 因為文字默認(rèn)全部都是基線對齊, 所以當(dāng)字號大小不一樣的兩個文字在一起的時候, 彼此就會發(fā)生上下位移
清除幽靈空白節(jié)點給圖片帶來的圖片間隙方法 間隙示意
- 圖片塊狀化
- 設(shè)置
line-height:0
或者通過font-size:0; line-height:默認(rèn)浮點數(shù)
的途徑來間接得到line-height:0
- 圖片設(shè)置其它
vertical-align
屬性, 例如top | middle | bottom
不定長定寬彈框 垂直居中
.container{
position:fixed;
top:0;left:0;right:0;bottom:0;
overflow:auto;
}
/* inline-block配合偽類的解決方案*/
.container{
font-size: 0;
text-align:center;
}
.container:before{
content:'';
display:inline-block;
width: 0;
height:100%;
vertical-align:middle;
}
.dialog{
display:inline-block;
vertical-align:middle;
font-size: 14px;
}
/* flex 的解決方法 如果有2個 dialog,他們會先左右平分空間,再居中顯示*/
.container{
display:flex;
}
.dialog{
margin : auto;
}
/* flex 還能這樣寫 如果有兩塊 dialog,它們會按照 flex 的指定對齊方式兩個人一起顯示在中間*/
.container{
display:flex; justify-content:center; align-items:center;
}
.dialog{}
/* 父元素設(shè)置 table-cell 子元素設(shè)置 inlne-block 也可以, 但是這樣父元素就不兼容 fixed 全屏顯示了, 定寬高的話倒是還不錯*/
第6章 流的破壞與保護
6.1 魔鬼 float
-
float
會讓幾乎所有元素的display
變成block
(除了inline-table
會變成table
以外) , 因此如果再多寫一句display:block
就浪費空間了. -
float
的本意是構(gòu)建"文字環(huán)繞效果" , 不推薦依賴它來布局, 但是有必要了解它來解釋一些樣式 bug - "文字環(huán)繞效果"是"父級高度塌陷"和"行框盒子區(qū)域限制"共同作用的結(jié)果
-
如果行框盒子和浮動元素的垂直高度有重疊, 則行框盒子在正常定位狀態(tài)下只會跟隨浮動元素, 而不會發(fā)生重疊 . 例如文字會自動避開左側(cè)的
float:left
的圖片,此時無論給文字的行框盒子設(shè)置margin-left
為負(fù)多少甚至是負(fù)無窮也不會生效(但是設(shè)置大于圖片寬度的正值是有效的). - 在 CSS 世界中,
float 元素
的"浮動參考"是"行框盒子" , 具體表現(xiàn)為: 三行文字的右側(cè)有個float:right
的元素的話, 它會緊跟在第3行的行框盒子
右側(cè). 若float 元素
周圍都是塊級元素, 那么可視為它正在依賴一個叫做浮動錨點(float anchor)
的點,這個點就表現(xiàn)而言像一個沒有 magin border padding 的空內(nèi)聯(lián)元素
6.2 float 的天然克星 clear
- 官方文檔定義: "clear 元素的邊不和前面的浮動元素相鄰"
經(jīng)典例子: 10個設(shè)置了
float:left
的li
, 再設(shè)置li:nth-of-type(3){ clear:both}
, 結(jié)果表現(xiàn)為2行:
■ ■
■ ■ ■ ■ ■ ■ ■ ■
即clear 屬性
讓自身不和前面的浮動元素相鄰, 但對后面的浮動元素不聞不問
-
clear
屬性只對塊級元素有效
6.3 BFC
- 實用設(shè)置方法:
overflow:auto/hidden
-
display:inline-block
forIE6/IE7
display:table-cell
- 能發(fā)揮作用的場景:
- 消除父子元素
margin 合并
: 在父元素上設(shè)置 BFC - 消除兄弟元素
margin 合并
在其中一個節(jié)點外包裹一層 BFC - 清除浮動
- 消除父子元素
6.4 overflow
-
overflow-x
和overflow-y
的visible
值和其他值不共存 - 雖然文字打點的效果核心是
text-overflow:ellipsis
但是該表現(xiàn)依賴于overflow:hidden; white-space : nowrap;
-
tabindex
值相同時, 越靠前越在外的元素越先被訪問 ,tabindex="-1"
的元素不會被tab 到 詳解
6.5 position:absolute
-
absolute
和float
一樣具有包裹性-
讓寬度表現(xiàn)從"包裹性"切換為"最大可用寬度"
正常情況下责球,文檔流中的文字內(nèi)容不可超過包含塊焦履,元素的大小也不可超過包含塊。但存在一種特殊情況棕诵,即是連續(xù)的英文字符和數(shù)字是可以突破這個限制的。除此之外我們也可以手動設(shè)置white-space:nowrap
讓寬度表現(xiàn)從包裹性變成最大可用寬度 可以參考 P182 關(guān)于包含塊的部分
-
讓寬度表現(xiàn)從"包裹性"切換為"最大可用寬度"
-
absolute
也有"塊狀化"特性, 所以經(jīng)常一起出現(xiàn)的一句display:block
可以說是多余的 -
提問:absolute 和 relative 相對的是 content-box / padding-box / border-box / margin-box?
答: 被定位元素拿自己的margin-box
去撞參考元素的padding-box
. 參考 P183 & demo -
"無依賴絕對定位"
: 即absolute
的元素未設(shè)置top/left/right/bottom
時所處的狀態(tài), 也不需要設(shè)置position:relative
的父元素, 特別適合用來加New Hot 圖標(biāo)
等腳標(biāo),無依賴絕對定位元素會自動跟在文字的前面或后面,再用margin-top
和margin-left
微調(diào)位置即可. 腳標(biāo) demo 下拉列表 demo
6.6 absolute 的流體特性
-
position:absolute;top:0;right:0;bottom:0;left:0
相比position:absolute;top:0;left:0;width:100%;height:100%
的區(qū)別在于前者保留了流體特性, 換句話說前者充滿了可用空間的是虛擬的margin-box
, 而后者是content-box
,即使強制設(shè)置box-sizing:border-box
也還是和margin-box
差了一點.
6.9 大哥position:relative
-
relative
設(shè)置固定px
單位的偏移時是相對自身, 而百分比
值是相對于包含塊 -
top
和bottom
這兩個垂直方向的百分比值是相對高度計算的 - 與絕對定位的拉伸表現(xiàn)不同,
relative
的top/bottom
或left/right
同時設(shè)置時, 要整個你死我活,只有一個能生效(與文檔流順序有關(guān)) . 默認(rèn)的文檔流是自上而下\從左往右, 因此top/bottom
同時使用只有top
生效, 同理left
-
relative 最小化影響原則:
- (1) 盡量不使用 relative , 定位元素時優(yōu)先使用"無依賴的絕對定位"
- (2) 如果場景受限一定要用relative, 則務(wù)必
relative 最小化
<div class="box2" style ="position:relative">
<img src="https://eleme.setsuna.wang/touma2.jpg" alt="" style="position:absolute;right:0;top:0">
<p>some thing</p>
<p>some thing</p>
<p>some thing</p>
<p>some thing</p>
</div>
<!-- relative最小化原則, 把上面的代碼按照下面的方式來定位 img, 能保持更好的 index 層級 -->
<div class="box1">
<div style ="position:relative">
<img src="https://eleme.setsuna.wang/touma2.jpg" alt="" style="position:absolute;right:0;top:0">
</div>
<div class="box1">sth</div>
<div class="box1">sth</div>
<div class="box1">sth</div>
<div class="box1">sth</div>
</div>
6.10.3 fixed 背景鎖定
具體參考書中 P209 , 思路是 移動端@touchmove.prevent
PC 端根元素 overflow:hidden
, 同時在 window 系統(tǒng)中要注意解決滾動條消失帶來的寬度變化以及頁面晃動問題, 可使用透明的 border-right 來填充windows 滾動條的原位置
第7章 CSS 世界的層疊規(guī)則
對于relative / absolute
元素, 當(dāng)其index
不為auto
的時候 , 就會創(chuàng)建一個層疊上下文, 如下面的例子,后者判斷層級時優(yōu)先比較了所在的層疊上下文
<div style="position:relative; z-index:auto;">
<!-- 美女 -->
<img src="1.jpg" style="position:absolute; z-index:2;">
</div>
<div style="position:relative; z-index:auto;">
<!-- 美景 -->
<img src="2.jpg" style="position:relative; z-index:1;">
</div>
<div style="position:relative; z-index:0;">
<!-- 美女 -->
<img src="1.jpg" style="position:absolute; z-index:2;">
</div>
<div style="position:relative; z-index:0;">
<!-- 美景 -->
<img src="2.jpg" style="position:relative; z-index:1;">
</div>
- z-index值不為auto的flex項(父元素
display:flex|inline-flex
).- 元素的
opacity
值不是1.- 元素的
transform
值不是none.- 元素
mix-blend-mode
值不是normal.- 元素的
filter
值不是none.
-元素的isolation
值是isolate.will-change
指定的屬性值為上面任意一個凿将。- 元素的
-webkit-overflow-scrolling
設(shè)為touch.
再看一個例子:
<style>
.container{
background: white;
box-shadow: 0 0 5px rgba(0,0,0,0.3);
width:400px;
height: 150px;
position:relative;
z-index:-1;
}
.container:before,.container:after{
content:'';
position: absolute;
width: 90%;
height: 20%;
background-color: antiquewhite;
bottom:0;
}
.container:before{
transform: skewX(12deg) rotate(4deg);
box-shadow: 0 0 20px rgba(0,0,0,0.7);
z-index:-1;
transform-origin: bottom right;
right:0;
bottom:0;
}
.container:after{
transform: skewX(-12deg) rotate(-4deg);
box-shadow: 0 0 20px rgba(0,0,0,0.7);
z-index:-1;
transform-origin: bottom left;
left:0;
bottom:0;
}
.box{
width: 300px;
height: 200px;
}
.fixed{
z-index:-50;
margin-top:-70px;
background: red;
width: 400px;
height: 400px;
}
</style>
<body>
<div class="container">
ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl ashgelkasdzghgkjhdsxfhl
</div>
</body>
表現(xiàn)為:
這里其實
.container
的z-index:-1
設(shè)為多少都是一樣的效果, 但是如果把.container
的z-index:-1
去掉, .container
就 不再是層級上下文了, 表現(xiàn)為:7.7 z-index "不犯二" 準(zhǔn)則
"不犯二準(zhǔn)則" :
"對于非浮層元素,避免設(shè)置z-index
值,z-index
沒有任何理由超過2
換句話說, 對于頁面上的主體元素遵循 z-index不犯二 準(zhǔn)則 , 而對于浮層元素(小圖標(biāo)定位
->彈框組件層
->彈框中的出錯提示效果
層級越來越高)使用層級計數(shù)器來遞增, 也不要太大, 9就差不多了
第8章 強大的文本處理能力
使用和系統(tǒng)相同的字體:
html { font:menu; }
body { font-size: 16px; }
個人喜歡:
body { font-family: "Helvetica","Microsoft Yahei",sans-serif; }
8.5 @font-face
@font-face {
font-family: 'sell-icon';
src: url('fonts/sell-icon.eot?s6c1hl');
src: url('fonts/sell-icon.eot?s6c1hl#iefix') format('embedded-opentype'),
url('fonts/sell-icon.ttf?s6c1hl') format('truetype'),
url('fonts/sell-icon.woff?s6c1hl') format('woff'),
url('fonts/sell-icon.svg?s6c1hl#sell-icon') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'sell-icon' !important;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-arrow_lift:before {
content: "\e900";
}
-
eot
是 IE 私有的,IE6~8僅支持這一種字體格式, 如果無需兼容 IE8可以果斷舍棄 eot -
?
: IE9之前的版本會把?
之后的內(nèi)容當(dāng)做 url 的參數(shù),#iefix
可以讓請求地址短一些,因為請求地址是不包含錨點標(biāo)志#
及其后面的內(nèi)容的 -
寫兩個 src
: 測試工程師測試低版本的 IE 瀏覽器喜歡使用兼容模式, 而兼容模式的 IE7和 IE8不認(rèn)識問號解決方案,導(dǎo)致第二個 src 無法識別, 因此多了第一行 -
svg
為了支持iOS 4.1
及其之前版本, 現(xiàn)在可以果斷舍棄 -
ttf
作為系統(tǒng)安裝字體比較多, Web 開發(fā)也能用 , 尺寸略大, 不需兼容安卓4.3之前版本的話可以舍棄 -
woff
和woff2
是web open font format
的縮寫, 加載速度快, Web 開發(fā)首選字體 -
format
讓瀏覽器提前知道字體的格式, 以決定是否加載這個字體,而不是加載完了再判斷. -
font-family
和font-style
在擁有同字體名的多字體設(shè)置時才有用,例如響應(yīng)式圖標(biāo)字體效果 參見 P252
響應(yīng)式圖標(biāo)字體效果 -
unicode-range
可以針對指定字符使用其它字體替換, 例如替換中文引號
8.6 文本控制
-
letter-spacing
控制字符間距, 可以用來制作字符飛入效果 -
word-spacing
原意是控制單詞之間距離, 但實際上只控制了空格
的寬度
-
word-break:break-all
所有都換行 ,word-wrap:break-word
如果有"空格 CJK 字符"之類的換行點存在就不打英文的主意了 -
一本萬利的
text-transform: uppercase
, 適用于身份證輸入x 的時候自動轉(zhuǎn)換為大寫 X / 驗證碼輸入時轉(zhuǎn)換大寫 demo
雖然顯示為大寫了但是 value 值還是小寫, 所以傳后臺時要轉(zhuǎn)換一下
-
:first-letter
的顏色權(quán)重總是多了一層 P277-
:first-letter
可以用來單獨調(diào)整¥
這類控制價格的字符的樣式 , 而不必額外創(chuàng)造一個 dom 結(jié)構(gòu)了
-
-
white-space
不同取值意義
屬性 | 換行 | 空格和制表符 | 文本環(huán)繞 |
---|---|---|---|
normal | 合并 | 合并 | 環(huán)繞 |
nowrap | 合并 | 合并 | 不環(huán)繞 |
pre | 保留 | 保留 | 不環(huán)繞 |
pre-wrap (可用來顯示代碼片段) | 保留 | 保留 | 環(huán)繞 |
pre-line | 保留 | 合并 | 環(huán)繞 |
9 元素的裝飾和美化
-
CSS1-CSS3 <color>顏色知識知多少校套?
CSS1&2的時候只支持17個顏色關(guān)鍵字, CSS3新增的顏色關(guān)鍵字在IE8中是不支持的.
9.2.2 與眾不同的background-position
百分比計算方式
-
positionX
= (容器的高度
-圖片的高度
) *percentX
-
positionY
= (容器的寬度
-圖片的寬度
) *percentY
11 cursor
- 可以使用各種各樣的 cursor 來提高用戶體驗,例如
zoom-in zoom-out default none help text move nwse-resize
等等 -
direction
可以改變元素左右排序 -
writing-mode:vertical-rl
古詩豎版樣式
附
- 改變元素的收縮性可通過
object-fit(替換元素)
或
width:-webkit-fit-content | fill-available | min-content
來操作,具體內(nèi)容去翻鑫空間
寬度類型 | 對應(yīng)屬性 | css3 width:
|
---|---|---|
充分利用可用空間 | <div> <p> |
fit-available |
包裹性(收縮到合適) |
float absolute inline-block table
|
fit-content |
收縮到最小 | table-cell |
\ |
超出容器限制 |
white-space:nowrap 取消環(huán)繞 |
\ |