摘要:概述在世界這本書中有一些黑魔法給列舉出來,在結合自己的理解。篇幅有點長,希望大家能夠堅持看完,一定會有收獲以下是摘自每章內一些重要的概念與技巧。
概述
在《css世界》這本書中有一些“黑魔法”給列舉出來,在結合自己的理解。篇幅有點長,希望大家能夠堅持看完,一定會有收獲?。?!
以下是摘自每章內一些重要的概念與技巧。其中有解決圖片間隙的問題、小圖標與文字居中問題等;
ps: 特別是 “line-height、vertical-align”內容需要反復仔細研究閱讀
何為“流”成為文檔流,將窗體自上而下分成一行一行,并在每行中按從左至右依次排放元素 (引導元素排列和定位)什么是流體布局
利用元素“流”的特性實現的各類布局效果。因為“流”本身具有自適應特性,所以“流體布局”往往都是具有自適應性。“未定義行為”
元素寬度按照分辨率寬度進行長度、寬度的調整,但布局不變。
當某個瀏覽器中出現與其他瀏覽器不一樣的行為或樣式表現;currentColor 變量
Web應用場景千變萬化,Web標準也是不可能面面俱到的,也會存在規范描述以外的場景,此時,各大瀏覽器廠家只能根據自己的理解與喜好去實現,一旦個性化就會出現差異
當前的文字顏色;凡事需要使用顏色值的地方,都可以使用currentColor替換,比方說背景色 – background-color, 漸變色 – gradient, 盒陰影 – box-shadow, SVG的填充色 – fill等等
div { color:#3c3c3c; border: 1em solid currentColor; }
currentColor-CSS3超高校級好用CSS變量
塊級元素默認情況下,塊級元素會新起一行;占據其父元素(容器)的整個空間
塊級盒子負責結構
內聯盒子負責內容
應用正是由于“塊級元素”具有換行特性,因此理論上它都可以配合clear屬性來清除浮動帶來的影響
.clear:after { content: ""; display: table; // 也可以是block,或者是list-item clear: both; }為什么 list-item 元素會出現項目符號
list-item(“附加盒子”)名“標記盒子”;因為生成了一個附加的盒子,學名“標記盒子”(marker box),專門用來放圓點、數字這些項目符號;display:inline-block 或者 display:xx-xx 理解(容器盒子)
元素都兩個盒子,外在盒子和內在盒子;深藏不露的 width:auto 充分利用可用空間
外在盒子:外在的“內聯盒子”(inline)
內在盒子:內在的“塊級容器盒子”(block)
、這些元素的寬度默認是100%于父級容器的 收縮與包裹
浮動、絕對定位、inline-block元素或table元素收縮到最小出現在table-layout為auto的表格中;當每一列空間都不夠的時候,文字能斷就斷,但中文是隨便斷的,英文單詞不能斷超出容器限制內容很長的連續的英文和數字,或者內聯元素被設置了white-space:nowrap“內部尺寸”和“外部尺寸”“內部尺寸”:尺寸由內部元素決定外部尺寸與流體特性 正常流寬度
“外部尺寸”:寬度由外部元素決定、這些元素的寬度默認是100%于父級容器;display:block; 流動性
寬度100%顯示,格式化寬度margin/border/padding和content內容區域自動分配水平空間
觸發條件
“絕對定位?!保?strong>position屬性值為absolute或fixed的元素中)
表現
絕對定位元素的寬度表現是“包裹性”,寬度由內部尺寸決定特殊
當left/top或top/bottom對立方位的屬性值同時存在,元素的寬度表現為“格式化寬度”,
其寬度大小相對于最近的具有定位特性(position屬性值不是static)的祖先元素計算
div { position: absolute; left: 20px; right: 20px; } div { position: absolute; top: 20px; bottom: 20px; } // 但不知道為什么不行內部尺寸與流體特性 包裹性除了“包裹”(max-width:100%),還有“自適應性(元素尺寸由內部元素決定,但永遠小于“包含塊”容器的尺寸)”著名的“按鈕”元素:極具代表性的inline-block元素
按鈕上的文字個數比較有限,沒機會換行
應用文字少的時候居中顯示,文字超過一行的時候居左顯示
.box { padding: 10px; background-color: #cd0000; text-align: center; } .content { display: inline-block; text-align: left; }首選最小寬度文字內容
元素最適合的最小寬度東亞文字(如中文)最小寬度為每個漢字的寬度:font-size:14px;
西方文字最小寬度由特定的連續的英文字符單元決定(一般會終止于空格(普通空格)、短橫線、問號以及其他非英文字符等)
最大寬度是元素可以有的最大寬度(如果內部沒有塊級元素或者塊級元素沒有設定寬度值,實際上是最大的連續內聯盒子的寬度)如何評價*{box-sizing:border-box} box-sizing 發明的初衷解決替換元素寬度自適應問題易產生沒必要的消耗通內聯元素(非圖片等替換元素),box-sizing無論是什么值,對其渲染表現都沒有影響
search類型的搜索框,其默認的box-sizing就是border-box(如果瀏覽器支持),因此,*對search類型的而言也是沒有必要的消耗
關于 height:100%父元素height為auto,只要子元素在文檔流中,其百分比值完全就被忽略了;百分比高度值要想起作用,其父級必須有一個可以生效的高度值;為何height:100%無效包含塊的高度沒有顯式指定(即高度由內容決定),并且該元素不是絕對定位,則計算值為auto"auto" * 100/100 = NaN如何讓元素支持height:100%效果設定顯式的高度值
使用絕對定位
width:100%效width:100%有效包含塊的寬度取決于該元素的寬度,那么產生的布局在CSS 2.1中是未定義的CSS min-width/max-width 和 min-height/max-height max-* 初始值是none假如說max-width初始值是auto,我們的width永遠不能設置為比auto計算值更大的寬度值min-* 初始值 0(實踐為auto)min-wdith/height值為auto合法
數值變化無動畫
max-width 超越!important,超越最大max-width會覆蓋width,不是普通的覆蓋,是超級覆蓋;比直接在元素的style屬性中設置CSS聲明還要高min-width超越最大min-width和max-width沖突;遵循“超越最大”規則(注意不是“后來居上”規則),min-width覆蓋任意高度元素的展開收起動畫技術我們展開的元素內容是動態的,換句話說高度是不固定的.element { max-height: 0; overflow: hidden; transition: max-height .25s; } .element.active { max-height: 666px; /* 一個足夠大的最大高度值 */ }max-height值比height計算值大的時候,元素的高度就是height屬性的計算高度
注意max-height不能設置很大,如果延遲時間長,會有延遲的感覺。
內聯元素 內聯世界深入的基礎—內聯盒模型 內容區域(content area)圍繞文字看不見的盒子,其大小僅受字符本身特性控制,本質上是一個字符盒子(character box);內聯盒子但是有些元素,如圖片這樣的替換元素,其內容顯然不是文字,不存在字符盒子之類的,因此,對于這些元素,內容區域可以看成元素自身
元素的“外在盒子”,用來決定元素是內聯還是塊級、和等
行框盒子由一個一個“內聯盒子”組成的包含盒子(“包含塊”)由一行一行的“行框盒子”組成(CSS規范中,并沒有“包含盒子”的說法,更準確的稱呼應該是“包含塊”)幽靈空白節點內聯元素的所有解析和渲染會有前面有一個“空白節點”;不占據任何寬度,看不見也無法通過腳本獲?。?strong>文檔聲明必須是HTML5文檔聲明(HTML代碼如下))div { background-color: #cd0000; } span { display: inline-block; }深入理解 content 替換元素過修改某個屬性值呈現的內容就可以被替換的元素; 如“img”特性 內容的外觀不受頁面上的CSS的影響需要類似appearance屬性,或者瀏覽器自身暴露的一些樣式接口,例如::-ms-check{}有自己的尺寸其默認的尺寸(不包括邊框)是300像素×150像素,如在很多CSS屬性上有自己的一套表現規則vertical-align屬性,對于替換元素和非替換元素,vertical-align屬性值的解釋是不一樣替換元素的尺寸計算規則 固有尺寸替換內容原本的尺寸有著自己的寬度和高度HTML尺寸HTML原生屬性width和height屬性、的size屬性、CSS尺寸通過CSS的width和height或者max-width/min-width和max-height/min-height設置的尺寸為何圖片以及其他表單類替換元素設置display:block寬度卻沒有100%容器CSS尺寸 > HTML尺寸 > 固有尺寸如果沒有CSS尺寸和HTML尺寸,則使用固有尺寸作為最終的寬高
如果沒有CSS尺寸,則使用HTML尺寸作為最終的寬高
如果有CSS尺寸,則最終尺寸由CSS屬性決定
內聯替換元素和塊級替換元素使用上面同一套尺寸計算規則
列外在沒有src屬性下,各個瀏覽器表現的各不相同;src缺省的不是替換元素,而是一個普通的內聯元素IE瀏覽器下是28×30
Chrome瀏覽器下是0×0
Firefox瀏覽器下顯示的是0×22
應用異步加載的圖片;使用一張透明的圖片占位
直接沒有src屬性;當圖片的src屬性缺省的時候,圖片不會有任何請求,是最高效的實現方式圖片資源的固有尺寸是無法改變設置圖片個尺寸不是直接設置圖片的固有尺寸,圖片的固有尺寸是無法設置;但是設定width和height會影響圖片的尺寸查看示例
原因
圖片中的content替換內容默認的適配方式是填充(fill)
和其他一些替換元素的替換內容的適配方式可以通過object-fit屬性修改了;(類似于background-size原理)
替換元素和非替換元素的距離有多遠 替換元素和非替換元素之間只隔了一個src屬性特點
Firefox瀏覽器下,最終的寬度是100%自適應父容器的可用寬度的。其表現和普通的類似,已經完全不是替換元素了
Chrome瀏覽器其實也有類似的表現,只是需要特定的條件觸發而已,不為空的alt屬性值
應用
基于偽元素的圖片內容生成技術查看示例
不能有src屬性
不能使用content屬性生成圖片
需要有alt屬性并有值
Firefox下::before偽元素的content值會被無視,::after無此問題
替換元素和非替換元素之間只隔了一個CSS content屬性在Chrome瀏覽器下,所有的元素都支持content屬性,而其他瀏覽器僅在::before/::after偽元素中才有支持查看示例
注意
content屬性改變的僅僅是視覺呈現,當我們以右鍵或其他形式保存這張圖片的時候,所保存的還是原來src對應的圖片
content與替換元素關系剖析content屬性生成的內容都是替換元素content生成的文本是無法選中、無法復制;無法被屏幕閱讀設備讀取,也無法被搜索引擎抓取;替換的僅僅是視覺層
content動態生成值無法獲取
content 內容生成技術 清除浮動 content字符內容生成 content圖片生成div:before { content: url(1.jpg); }content attr屬性值內容生成(比較常用)img::after { /* 生成alt信息 */ content: attr(alt); /* 其他CSS略 */ }字體圖標 理解content計數器
padding 屬性 padding 與元素的尺寸 內聯元素的padding在垂直方向同樣會影響布局,但僅僅是視覺表現內聯元素沒有可視寬度和可視高度的說法(clientHeight和clientWidth永遠是0),垂直方向的行為表現完全受line-height和vertical-align的影響;視覺上并沒有改變和上一行下一行內容的間距應用 增加鏈接或按鈕的點擊區域大小 利用內聯元素的padding實現高度可控的分隔線 元素發生錨點定位;標題距離頁面的頂部有一段距離
padding 的百分比值 塊狀特性的元素padding百分比值無論是水平方向還是垂直方向均是相對于寬度計算內聯元素同樣相對于寬度計算
默認的高度和寬度細節有差異
padding會斷行
padding 與圖形繪制 移動端菜單“三道杠” 雙層圓點圖形效果 margin 屬性 margin 與元素尺寸以及相關布局 元素尺寸的相關概念 元素內部尺寸$().innerWidth()和$().innerHeight();
content + padding;
DOM API clientWidth clientHeight
元素尺寸$().width()和$().height();
content + padding + border;
DOM API offsetWidth offsetHeight
元素外部尺寸$().outerWidth(true) $().outerHeight(true)
content + padding + border + margin
margin與元素的內部尺寸(針對具有塊狀特性的元素) 只有元素是“充分利用可用空間”(寬度自動100%)margin才可以改變元素的可視尺寸應用列表塊兩端對齊,一行顯示3個,中間有2個20像素的間隙ul { margin-right: -20px; } ul > li { float: left; width: 100px; margin-right: 20px; }正確看待 CSS 世界里的 margin 合并 什么是margin合并塊級元素的上外邊距(margin-top)與下外邊距(margin-bottom)有時會合并為單個外邊距注意塊級元素,但不包括浮動和絕對定位元素,盡管浮動和絕對定位可以讓元素塊狀化
只發生在垂直方向,需要注意的是,這種說法在不考慮writing-mode的情況
margin合并的多種場景 相鄰兄弟元素margin合并p { margin: 1em 0; }父級和第一個/最后一個子元素 解決margin合并 margin-top合并第一行
第二行
父元素設置為塊狀格式化上下文元素(overflow:hidden)
父元素設置border-top值
父元素設置padding-top值
父元素和第一個子元素之間添加內聯元素進行分隔
margin-bottom合并父元素設置為塊狀格式化上下文元素(overflow:hidden)
父元素設置border-bottom值
父元素設置padding-bottom值
父元素和第一個子元素之間添加內聯元素進行分隔
父元素設置height、min-height或max-height
margin合并的計算規則 正正取大值 正負值相加 負負最負值 margin 合并的意義 兄弟元素的margin 合并讓圖文信息的排版更加舒服自然兄弟元素的margin 合并在頁面中任何地方嵌套或直接放入任何裸"""",都不會影響原來的塊狀布局。 深入理解 CSS 中的 margin:auto 觸發條件width或height為auto時;元素是具有對應方向的自動填充特性填充規則填充閑置尺寸如果一側定值,一側auto,則auto為剩余空間大小
如果兩側均是auto,則平分剩余空間
應用左右對齊
查看示例
margin 無效情形解析display 計算值inline的內聯元素
表格中的
和 元素或者設置display 計算值是table-cell 或table-row margin 合并的時候,更改margin 值
功勛卓越的 border 屬性 了解各種 border-style 類型 應用三道杠
.icon-menu { width: 120px; height: 20px; border-top: 60px double; border-bottom: 20px solid; }border-color 和 colorborder-color默認顏色就是color色值;沒有指定border-color顏色值的時候,會使用當前元素的color計算值作為邊框色border 與透明邊框技巧 增加點擊區域大小.icon-clear { width: 16px; height: 16px; border: 11px solid transparent; }字母 x—CSS 世界中隱匿的舉足輕重的角色 字母x與CSS中的x-heightascender height: 上下線高度
cap height: 大寫字母高度
median: 中線
descender height: 下行線高度
字母x與CSS中的exex是CSS中的一個相對單位;小寫字母x的x-height(不受字體和字號影響的內聯元素的垂直居中對齊效果);內聯元素默認是基線對齊的,而基線就是x的底部,而1ex就是一個x的高度;查看示例
注意
vertical-align:middle
指的是基線往上1/2 x-height高度;內聯元素垂直居中是對文字
內聯元素的基石 line-height 內聯元素的高度之本——line-height非替換元素的純內聯元素,其可視高度完全由line-height決定
定了用來計算行框盒子高度的基礎高度;通過改變“行距”來實現查看示例
“行距”行距 = line-height - font-size作用可以瞬間明確我們的閱讀方向,讓我們閱讀文字更輕松"半行距"當前文字的上方和下方;這個“行距”的高度僅僅是完整“行距”高度的一半計算公式半行距 = (line-height - font-size )/2;替換元素的高度與line-height的關系line-height不可以影響替換元素;但是在視覺上是受到line-height影響了,那是因為把“幽靈空白節點”的高度變高了;圖片為內聯元素,會構成一個“行框盒子”,而在HTML5文檔模式下,每一個“行框盒子”的前面都有一個寬度為0的“幽靈空白節點”特性表現和普通字符一模一樣;塊級元素的高度與line-height的關系通過改變塊級元素里面內聯級別元素占據的高度實現為什么 line-height 可以讓內聯元素“垂直居中”CSS中“行距的上下等分機制”單行文字垂直居中只需要line-height這一個屬性就可以近似垂直居中文字字形的垂直中線位置普遍要比真正的“行框盒子”的垂直中線位置低多行文本垂直居中需要line-height屬性的好朋友vertical-align屬性幫助查看示例
深入 line-height 的各類屬性值 line-height:normal不同系統不同瀏覽器的默認line-height都是有差異line-height應該重置為多大的值,是使用數值、百分比值還是長度值 數值如line-height:1.5,其最終的計算值是和當前font-size相乘后的值百分比值如line-height:150%,其最終的計算值是和當前font-size相乘后的值長度值也就是帶單位的值,如line-height:21px或者line-height:1.5em;最終的計算值是和當前font-size相乘后的值區別使用數值;所有的子元素繼承的都是這個值
使用百分比值或者長度值;所有的子元素繼承的是最終的計算值
應用重圖文內容展示的網頁或者網站
考慮到文章閱讀的舒適度,line-height值可以設置在1.6~1.8偏重布局結構精致的網站
長度值或者數值內聯元素 line-height 的“大值特性”終父級元素的高度都是由數值大的那個line-height決定line-height 的好朋友 vertical-align vertical-align 家族基本認識 線類如baseline(默認值)、top、middle、bottom文本類如text-top、text-bottom;上標下標類如sub、super數值百分比類如20px、2em、20%等 百分比是相對于line-height的計算值計算vertical-align 作用的前提只能作用在display計算值為inline、inline- block,inline-table或table-cell的元素上vertical-align 和 line-height 之間的關系對字符而言,font-size越大字符的基線位置越往下,因為文字默認全部都是基線對齊,所以當字號大小不一樣的兩個文字在一起的時候,彼此就會發生上下位移,如果位移距離足夠大,就會超過行高的限制,而導致出現意料之外的高度應用圖片之間間隙問題
默認和基線(也就是這里字母x的下邊緣)對齊,字母x往下的行高產生的多余的間隙就嫁禍到圖片下面,讓人以為是圖片產生的間隙,實際上,是“幽靈空白節點”、line-height和vertical-align屬性共同作用的結果深入理解 vertical-align 線性類屬性值 inline-block與baseline一個inline-block元素,如果里面沒有內聯元素,或者overflow不是visible,則該元素的基線就是margin底邊緣;應用
否則其基線就是元素里面最后一行內聯元素的基線圖標與文字居中圖標高度和當前行高都是20px
圖標標簽里面永遠有字符
圖標CSS不使用overflow:hidden保證基線為里面字符的基線,但是要讓里面潛在的字符不可見
查看示例
vertial-align:top/bottom內聯元素:元素底部和當前行框盒子的頂部對齊
table-cell元素:元素底padding邊緣和表格行的頂部對齊
vertial-align:middle內聯元素:元素的垂直中心點和行框盒子基線往上1/2 x-height處對齊
table-cell元素:單元格填充盒子相對于外面的表格行居中對齊
查看示例
深入理解 vertical-align 文本類屬性值 vertical-align:text-top盒子的頂部和父級內容區域的頂部對齊vertical-align:text-bottom盒子的底部和父級內容區域的底部對齊vertical-align 上標下標類屬性值 vertical-align:super提高盒子的基線到父級合適的上標基線位置vertical-align:sub降低盒子的基線到父級合適的下標基線位置。基于 vertical-align 屬性的水平垂直居中彈框查看示例
魔鬼屬性 float float 的本質與特性浮動的本質就是為了實現文字環繞效果。而這種文字環繞,主要指的就是文字環繞圖片顯示的效果特性 包裹性
包裹
假設浮動元素父元素寬度200px,浮動元素子元素是一個128px寬度的圖片,則此時浮動元素寬度表現為“包裹”,就是里面圖片的寬度128px;
自適應性
如果浮動元素的子元素不只是一張128px寬度的圖片,還有一大波普通的文字,浮動元素寬度就自適應父元素的200px寬度,最終的寬度表現也是200px
塊狀化并格式化上下文元素一旦float的屬性值不為none,則其display計算值就是block或者table破壞文檔流 沒有任何margin合并 float 的作用機制行框盒子如果和浮動元素的垂直高度有重疊,則行框盒子在正常定位狀態下只會跟隨浮動元素
塊狀盒子中的“行框盒子”被浮動元素限制,沒有任何的重疊
float 更深入的作用機制 浮動錨點是float元素所在的“流”中的一個點,這個點本身并不浮動,就表現而言如同一個空的內聯元素,有內聯元素自然就有“行框盒子”浮動參考是浮動元素對齊參考的實體:float元素的“浮動參考”是“行框盒子”,也就是float元素在當前“行框盒子”內定位float 與流體布局查看示例
.animal元素沒有浮動,也沒有設置寬度,因此,流動性保持得很好,設置margin-left、border-left或者padding-left都可以自動改變content box的尺寸,繼而實現了寬度自適應布局效果float 的天然克星 clear 什么是 clear 屬性clear屬性是讓自身不能和前面的浮動元素相鄰,注意這里“前面的”3個字,也就是clear屬性對“后面的”浮動元素是不聞不問的成事不足敗事有余的 clear查看示例
clear屬性只有塊級元素才有效;
由于clear:both的作用本質是讓自己不和float元素在一行顯示,并不是真正意義上的清除浮動
CSS 世界的結界—BFC BFC 的定義“CSS世界的結界”;通過一些特定的手段形成的封閉空間,里面的人出不去,外面的人進不來,具有極強的防御力表現原則BFC元素是不可能發生margin重疊
BFC元素清除浮動
觸發BFC條件根元素
float的值不為none
overflow的值為auto、scroll或hidden
display的值為table-cell、table-caption和inline-block中的任何一個
position的值absolute
只要元素符合上面任意一個條件,就無須使用clear:both屬性去清除浮動BFC 與流體布局img { float: left; } .animal { overflow: hidden; }小貓1,小貓2,...
通流體元素在設置了overflow:hidden后,會自動填滿容器中除了浮動元素以外的剩余空間,形成自適應布局效果,而且這種自適應布局要比純流體自適應更加智能最佳結界 overflow要想徹底清除浮動的影響,最適合的屬性不是clear而是overflow。一般使用overflow:hidden,利用BFC的“結界”特性徹底解決浮動對外部或兄弟元素的影響overflow 剪裁界線 border box當子元素內容超出容器寬度高度限制的時候,剪裁的邊界是border box的內邊緣注意要盡量避免滾動容器設置padding-bottom值,除了樣式表現不一致外,還會導致scrollHeight值不一樣Chrome:如果容器可滾動(假設是垂直滾動),則padding-bottom也算在滾動尺寸之內
IE和Firefox瀏覽器忽略padding-bottom
overflow 與錨點定位 觸發條件
URL地址中的錨鏈與錨點元素對應并有交互行為
由”內而外”的錨點定位會觸發窗體的重定位,也就是說,如果頁面也是可以滾動的,則點擊選項卡按鈕后頁面會發生跳動
可focus的錨點元素處于focus狀態
類似鏈接或者按鈕、輸入框等可以被focus的元素在被focus時發生的頁面重定位現
頁面窗體就有滾動條,絕大多數情況下,也都不會發生跳動現象
錨點定位作用的本質通過改變容器滾動高度或者寬度來實現;容器的滾動高度,而不是瀏覽器的滾動高度;而且定位行為的發生是由內而外定位行為的發生是由內而外普通元素和窗體同時可滾動的時候,會由內而外觸發所有可滾動窗體的錨點定位行為overflow:hidden跟overflow:auto和overflow:scroll別就在于有沒有那個滾動條。元素設置了overflow:hidden聲明,里面內容高度溢出的時候,滾動依然存在,僅僅滾動條不存在float 的兄弟 position:absolute當absolute和float同時存在的時候,float屬性是無任何效果的absolute 的包含塊元素用來計算和定位的一個框計算規則根元素(很多場景下可以看成是)被稱為“初始包含塊”,其尺寸等同于瀏覽器可視窗口的大小
position是relative或者static,則“包含塊”由其最近的塊容器祖先盒的content box邊界形成
position:fixed,是“初始包含塊”
position:absolute,則“包含塊”由最近的position不為static的祖先元素建立
內聯元素也可以作為“包含塊”所在的元素
內聯元素的“包含塊”是由“生成的”前后內聯盒子決定的,與里面的內聯盒子細節沒有任何關系
包含塊”所在的元素不是父塊級元素,而是最近的position不為static的祖先元素或根元素
絕對定位元素默認的最大寬度就是“包含塊”的寬度
邊界是padding box而不是content box
因為絕對定位元素的定位值和列表容器的padding值耦合在一起了:我們對padding間距進行調整的時候,絕對定位元素的right、top值也一定要跟著一起調整,否則就會出現樣式問題具有相對特性的無依賴 absolute 絕對定位一個絕對定位元素,沒有任何left/top/right/bottom屬性設置,并且其祖先元素全部都是非定位元素:當前位置特性代碼更簡潔
相對定位特性:僅僅是不占據CSS流的尺寸空間而已
absolute 與 overflow如果overflow不是定位元素,同時絕對定位元素和overflow容器之間沒有定位元素,則overflow無法對absolute元素進行剪裁應用如果overflow的屬性值不是hidden而是auto或者scroll,即使絕對定位元素高寬比overflow元素高寬還要大,也都不會出現滾動條
局部滾動的容器中模擬近似position:fixed的效果
查看示例
absolute 與 clipclip屬性要想起作用,元素必須是絕對定位或者固定定位重新認識的 clip 屬性 fixed固定定位的剪裁overflow屬性往往就力不能及了,因為fixed固定定位元素的包含塊是根元素,除非是根元素滾動條,普通元素的overflow是根本無法對其進行剪裁的;但是clip可以最佳可訪問性隱藏它具有更強的普遍適應性,任何元素、任何場景都可以無障礙使用深入了解 clip 的渲染clip隱藏僅僅是決定了哪部分是可見的,非可見部分無法響應點擊事件等
視覺上隱藏,但是元素的尺寸依然是原本的尺寸,在IE瀏覽器和Firefox瀏覽器下抹掉了不可見區域尺寸對布局的影響,Chrome瀏覽器卻保留了
absolute 的流體特性 當 absolute 遇到 left/top/right/bottom 屬性absolute元素才真正變成絕對定位元素absolute 的流體特性如果我們僅設置了一個方向的絕對定位,沒有設置方向依然保持了相對特性
流體特性:對立方向同時發生定位的時候設置了對立定位屬性的絕對定位元素的表現神似普通的
元素,無論設置padding還是margin,其占據的空間一直不變,變化的就是content box的尺寸 absolute 的 margin:auto 居中.element { width: 300px; height: 200px; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; }position:relative 才是大哥 relative 與定位 相對自身相對于自身進行偏移定位查看示例
當相對定位元素同時應用對立方向定位值的時候;只有一個方向的定位屬性會起作用;孰強孰弱則是與文檔流的順序有關的,默認的文檔流是自上而下、從左往右
無侵入即使自己移動,也會在原來的位置留下空間relative 的最小化影響原則當relative進行定位偏移的時候,一般情況下不會影響周圍元素的布局
盡量不使用relative,如果想定位某些元素,看看能否使用“無依賴的絕對定位”
如果場景受限,一定要使用relative,則該relative務必最小化(再增加div嵌套,且沒有定位)
強悍的 position:fixed 固定定位 position:fixed 不一樣的“包含塊”position:fixed固定定位元素的“包含塊”是根元素;理解 CSS 世界的層疊上下文和層疊水平當內容發生層疊的時候,一定會有一個前后的層疊順序產生什么是層疊上下文自成一個小世界。這個小世界中可能有其他的“層疊結界”,而自身也可能處于其他“層疊結界”中什么是層疊水平同一個層疊上下文中元素在z軸上的顯示順序理解元素的層疊順序元素發生層疊時有著特定的垂直顯示順序務必牢記的層疊準則 誰大誰上當具有明顯的層疊水平標識的時候,如生效的z-index屬性值,在同一個層疊上下文領域,層疊水平值大的那一個覆蓋小的那一個后來居上當元素的層疊水平一致、層疊順序相同的時候,在DOM流中處于后面的元素會覆蓋前面的元素深入了解層疊上下文 層疊上下文的特性層疊上下文的層疊水平要比普通元素高
層疊上下文可以阻斷元素的混合模式
層疊上下文可以嵌套,內部層疊上下文及其所有子元素均受制于外部的“層疊上下文”
每個層疊上下文和兄弟元素獨立,也就是說,當進行層疊變化或渲染的時候,只需要考慮后代元素
每個層疊上下文是自成體系的,當元素發生層疊的時候,整個元素被認為是在父層疊上下文的層疊順序中
層疊上下文的創建 天生派頁面根元素天生具有層疊上下文,稱為根層疊上下文。正統派z-index值為數值的定位元素的傳統“層疊上下文”。擴招派position值為relative/absolute以及Firefox/IE瀏覽器(不包括Chrome瀏覽器)下含有position:fixed聲明的定位元素,當其z-index值不是auto的時候,會創建層疊上下文
其他CSS3屬性元素為flex布局元素(父元素display:flex|inline-flex),同時z-index值不是auto
元素的opacity值不是1
元素的transform值不是none
元素mix-blend-mode值不是norma
元素的filter值不是none
元素的isolation值是isolate
元素的will-change屬性值為上面2~6的任意一個(如will-change:opacity、will-chang:transform等)
元素的-webkit-overflow-scrolling設為touch
層疊上下文與層疊順序如果層疊上下文元素不依賴z-index數值,則其層疊順序是z-index:auto,可看成z:index:0級別
如果層疊上下文元素依賴z-index數值,則其層疊順序由z-index值決定
z-index 負值深入理解z-index負值渲染的過程就是一個尋找第一個層疊上下文元素的過程,然后層疊順序止步于這個層疊上下文元素z-index“不犯二”準則 定位元素一旦設置了z-index值從普通定位元素變成了層疊上下文元素,相互間的層疊順序就發生了根本的變化,很容易出現設置了巨大的z-index值也無法覆蓋其他元素的問題避免z-index“一山比一山高”的樣式混亂問題 line-height 的另外一個朋友 font-size font-size 和 vertical-align 的隱秘故事line-height的部分類別屬性值是相對于font-size計算的,vertical-align百分比值屬性值又是相對于line-height計算的理解 font-size 與 ex、 em 和 rem 的關系font-size值越大,自然ex對應的大小也就大理解 font-size 的關鍵字屬性值em相對于當前元素,
rem相對于根元素,本質差別在于當前元素是多變的,根元素是固定的,也就是說,如果使用rem,我們的計算值不會受當前元素font-size大小的影響
font-size默認值是medium,而medium計算值僅與瀏覽器設置有關font-size:0 與文本的隱藏并不是所有小于12px的font-size都會被當作12px處理,有一個值例外,那就是0,也就是說,如果font-size:0的字號表現就是0,那么文字會直接被隱藏掉,并且只能是font-size:0,哪怕設置成font-size:0.0000001px,都還是會被當作12px處理的字體屬性家族的大家長 font-family 了解襯線字體和無襯線字體 襯線字體筆畫開始、結束的地方有額外裝飾而且筆畫的粗細會有所不同的字體無襯線字體沒有這些額外的裝飾,而且筆畫的粗細差不多等寬字體的實踐價值font-family:?Consolas, Monaco, monospace;等寬字體與代碼呈現利于代碼呈現ch單位與等寬字體布局ch相關的字符是0,就是阿拉伯數字0;1ch表示一個0字符的寬度,所以6個0所占據的寬度就是6ch字體家族其他成員 貌似粗獷、實則精細無比的 font-weight用數值作為font-weight屬性值,必須是100~900的整百數font-weight無論是設置300、400、500還是600,文字的粗細都沒有任何變化,只有到700的時候才會加粗一下因為我們的系統里面缺乏對應粗細的字體具有近似姐妹花屬性值的 font-style italic用當前字體的斜體字體oblique單純地讓文字傾斜font 屬性 作為縮寫的 font 屬性font-size和font-family是必需的使用關鍵字值的 font 屬性使用關鍵字作為屬性值的時候必須是獨立的,不能添加font-family或者font-size之類font 關鍵字屬性值的應用價值希望非Windows系統下不要使用“微軟雅黑”字體,而是使用其系統字體html { font: menu; } body { font-size: 16px; } html { font: small-caption; } body { font-size: 16px; } html { font: status-bar; } body { font-size: 16px; }讓網頁的字體跟系統走
真正了解@font face 規則 @font face 的本質是變量@font-face { font-family: "example"; src: url(example.ttf); font-style: normal; font-weight: normal; unicode-range: U+0025-00FF; }font-familyfont-family可以看成是一個字體變量;src原本系統就有的字體名稱,不能隨便設置
引入的字體資源可以是系統字體,也可以是外鏈字體
使用系統安裝字體
local()
使用外鏈字體
url()
font-style重置對應字體樣式或字重下該使用什么字體font-weight它定義了不同字重、使用不同字體unicode-range讓特定的字符或者特定范圍的字符使用指定的字體文本的控制 text-indent 與內聯元素縮進對文本進行縮進控制text-indent的百分比值是相對于當前元素的“包含塊”計算的,而不是當前元素
僅對第一行內聯盒子內容有效
非替換元素以外的display計算值為inline的內聯元素設置text-indent值無效,如果計算值是inline-block/inline-table則會生
標簽按鈕text-indent值無效
和
letter-spacing 與字符間距控制字符之間的間距,這里說的“字符”包括英文字母、漢字以及空格等特性繼承性
默認值是normal而不是0
支持負值,且值足夠大的時候,會讓字符形成重疊,甚至反向排列(非IE瀏覽器)
和text-indent屬性一樣,無論值多大或多小,第一行一定會保留至少一個字符
支持小數值,即使0.1px也是支持的,但并不總能看到效果,這與屏幕的密度有關
暫不支持百分比值
word-spacing 與單詞間距增加空格的間隙寬度;是作用在“空格”上了解 word-break 和 word-wrap 的區別 word-break是所有的都換行,毫不留情,一點兒空隙都不放過word-wrap如果這一行文字有可以換行的點,如空格或CJK(中文/日文/韓文)之類的,就不打英文單詞或字符的主意了,在這些換行點換行,至于對不對齊、好不好看則不關心white-space 與換行和空格的控制 white-space的處理模型如何處理元素內的空白字符white-space與最大可用寬度當white-space設置為nowrap的時候,元素的寬度此時表現為“最大可用寬度”,換行符和一些空格全部合并,文本一行顯示如何解決 text-decoration 下劃線和文本重疊的問題bordera { text-decoration: none; border-bottom: 1px solid; }了解:first-letter/:first-line偽元素 深入:first-letter偽元素及其實例 ::first-letter偽元素生效的前提元素的display計算值必須是 block、inline-block、list-item、display:table和display:flex、table- cell或者table-caption,其他所有display計算值都沒有用
常見的標點符號、各類括號和引號在::first-letter偽元素眼中全部都是“輔助類”字符
·@#%&()()[]【】{}::"“”;;"‘’》《,,.。??!!…、/
查看示例
::first-letter偽元素可以生效的CSS屬性所有字體相關屬性:font、font-style、font-variant、font-weight、font-size、line-height和font-family
所有背景相關屬性:background-color、background-image、background- position、background-repeat、background-size和 background-attachment
所有margin相關屬性:margin、margin-top、margin-right、margin-bottom和margin-left
所有padding相關屬性:padding、padding-top、padding-right、padding- bottom和padding-left
所有border相關屬性:縮寫的border、border-style、border-color、border-width和普通書寫的屬性
color屬性
text-decoration、text-transform、letter-spacing、word-spacing(合適情境下)、line-height、float和vertical-align(只有當float為none的時候)等屬性
應用電商價格 符號添加字體大小
電商產品經常會有價格,價格前面一般都有一個¥符號,這個符號字體往往會比較特殊,字號也比較大,同時和文字的數值有幾像素的距離注意偽元素會受到影響
p:before { content: "新聞:"; } p:first-letter { color: silver; }故事相對較少的:first-line偽元素這是新聞的標題……
向文本的首行添加特殊樣式生效前提與可以生效的CSS屬性同上 CSS 世界的 background 很單調 隱藏元素的 background-image 到底加不加載 一個元素如果display計算值為none在IE瀏覽器下(IE8~IE11,更高版本不確定)依然會發送圖片請求
Firefox瀏覽器不會
至于Chrome和Safari瀏覽器則似乎更加智能一點
如果隱藏元素同時又設置了background-image,則圖片依然會去加載
如果父元素的display計算值為none,則背景圖不會請求,此時瀏覽器或許放心地認為這個背景圖暫時是不會使用的
元素的顯示與隱藏 隱藏實踐 元素不可見,同時不占據空間;輔助設備無法訪問,同時不渲染 元素不可見,同時不占據空間;輔助設備無法訪問,但資源有加載,DOM可訪問.dn { display: none; }元素不可見,同時不占據空間;輔助設備無法訪問,但顯隱的時候可以有transition淡入淡出效果.hidden { position: absolute; visibility: hidden; }元素不可見,不能點擊,輔助設備無法訪問,但占據空間保留.vh { visibility: hidden; }元素不可見,不能點擊,不占據空間,但鍵盤可訪問.clip { position: absolute; clip: rect(0 0 0 0); } .out { position: relative; left: -999em; }元素不可見,不能點擊,但占據空間,且鍵盤可訪問.lower { position: relative; z-index: -1; }元素不可見,但可以點擊,而且不占據空間.opacity { position: absolute; opacity: 0; filter: Alpha(opacity=0); }元素看不見,但位置保留,依然可以點可以選.opacity { opacity: 0; filter: Alpha(opacity=0); }display 與元素的顯隱 display:none元素的background-image圖片不加載Firefox瀏覽器下不加載;包括父元素display:none也是如此
Chrome和Safari瀏覽器
父元素display:none,圖片不加載
本身背景圖所在元素隱藏,則圖片依舊會去加載
對IE瀏覽器而言,無論怎樣都會請求圖片資源
display:none元素的image圖片所有瀏覽器下依舊都會請求圖片資源 一些屬性也是天然display:none hidden類型的輸入框 動畫實現display:none顯隱控制并不會影響CSS3 animation
會影響CSS3 transition過渡效果執行(transition往往和visibility屬性走得比較近)
visibility 與元素的顯隱 不僅僅是保留空間這么簡單 visibility的繼承性父元素設置visibility:hidden,子元素也會看不見visibility與CSS計數器visibility:hidden不會影響計數器的計數visibility與transitionCSS3 transition支持的CSS屬性中有visibility,但是并沒有display和 border 形似的 outline 屬性語法和border屬性非常類似,分寬度、類型和顏色,支持的關鍵字和屬性值與border屬性一模一樣萬萬不可在全局設置 outline:0 none在默認狀態下,對處于focus狀態的元素,瀏覽器會通過虛框或者外發光的形式進行區分和提示;
這種虛框或者外發光效果是非常有必要的,否則用戶根本就不知道自己當前聚焦在哪個元素上,甚至因此而迷失
真正的不占據空間的 outline 及其應用outline屬性確實不占據任何空間,輪廓寬度設置得再寬廣,也不會影響任何元素的任何布局,并且outline輪廓是可穿透的改變水平流向的 direction direction 簡介.direction { direction: ltr; // 默認值 direction: rtl; }ltr是初始值,表示left-to-right,就是從左往右的意思。目前東亞以及歐美文字書寫就是從左往右的;
rtl表示right-to-left,就是從右往左的意思。阿拉伯語(Arabic)、希伯來語(Hebrew)等的書寫就是從右往左的
應用 如何處理這種不同設備、不同按鈕順序的問題@media screen and (max-width: 480px) { .dialog-footer { direction: rtl; } }改變 CSS 世界縱橫規則的 writing-mode writing-mode 原本的作用用來實現文字豎向呈現.writing-mode { writing-mode: lr-tb | tb-rl | tb-lr (IE8+); writing-mode: horizontal-tb | vertical-rl | vertical-lr; }writing-mode 不經意改變了哪些規則基于原本水平方向才適用的規則全部都可以在垂直方向適用普通塊元素可以使用margin:auto實現垂直居中圖片元素 http://demo.cssworld.cn/12/2-...
普通塊狀元素
水平方向也能margin合并 使用text-align:center實現圖片垂直居中 使用text-indent實現文字下沉效果.btn:active { text-indent: 2px; } .verticle-mode { writing-mode: tb-rl; writing-mode: vertical-rl; }查看示例
實現全兼容的icon fonts圖標的旋轉效果查看示例
利用高度的高度自適應布局當文檔變成垂直流的時候,height高度天然自適應writing-mode 和 direction 的關系 writing-mode改變文檔流為垂直方向direction改變的是垂直方向的內聯元素的文本方向ps:有什么不清楚、錯誤,歡迎提出。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/53298.html
相關文章
《css世界》- 詳細重點筆記與技巧
摘要:概述在世界這本書中有一些黑魔法給列舉出來,在結合自己的理解。篇幅有點長,希望大家能夠堅持看完,一定會有收獲以下是摘自每章內一些重要的概念與技巧。 概述 在《css世界》這本書中有一些黑魔法給列舉出來,在結合自己的理解。篇幅有點長,希望大家能夠堅持看完,一定會有收獲?。?!以下是摘自每章內一些重要的概念與技巧。其中有解決圖片間隙的問題、小圖標與文字居中問題等; ps: 特別是 line-h...
JS筆記
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網絡基礎知識之 HTTP 協議 詳細介紹 HTT...
《CSS世界》筆記四:流的保護與破壞
摘要:和可以看作是同父異母的兄弟關系。例子如下結果如下而父元素設置屬性的方式則是利用了的特性下面將會詳細講解結界全稱為,中文為塊級格式化上下文。 上一篇:《CSS世界》筆記三:內聯元素與對齊下一篇:《CSS世界》筆記五:CSS層疊規則及元素隱藏 寫在前面 原本博客名為浮動與定位,但是《CSS世界》第六章節的內容不僅有浮動定位,很大一部分篇幅都在講BFC和overflow。更吸引人的是,作者將...
發表評論
0條評論
MasonEast
男|高級講師
TA的文章
閱讀更多
#雙11#TMWHOST,澳門VPS,66折優惠,限量款低至$11.11/季,此外充值最多返20%
閱讀 2036·2021-11-08 13:22
??思維導圖整理大廠面試高頻數組9: 刪除重復元素的通解問題, 力扣26/80??
閱讀 2500·2021-09-04 16:40
使用回調函數通過冒泡排序模擬實現qsort函數
閱讀 1144·2021-09-03 10:29
css3 偽類選擇器快速復習
閱讀 1709·2019-08-30 15:44
個人公眾號已開通!
閱讀 2120·2019-08-30 11:13
初識貝塞爾曲線
閱讀 2785·2019-08-29 17:07
Vue學習日記(一)——Vue介紹
閱讀 1963·2019-08-29 14:22
函數的防抖和節流
閱讀 1244·2019-08-26 14:00
<閱讀需要支付1元查看