改變 a 標籤 CSS 屬性的排列順序:
(愛恨原則)link -> visited -> hover -> active
按照這樣書寫:
能夠解決 a:link 樣式被 a:visited 樣式覆蓋問題。
在 CSS 中,若是對於相同元素針對不一樣條件的定義,適宜將最通常的條件放在最上面,依次向下,保證最下面的是最特殊的條件(能夠理解爲樣式覆蓋)。css
這樣,瀏覽器顯示元素的時候,纔會從特殊到通常、逐級向上驗證條件。html
舉例說明:css3
我想讓未訪問連接顏色爲藍色,懸浮連接爲綠色,已訪問連接爲紅色:web
第一種狀況:
我定義的順序是a:visited-紅色、a:hover-綠色、a:link:藍色
,這時會發現:把鼠標放到未訪問過的藍色連接上時,它並不變成綠色,只有放在已訪問的紅色連接上,連接纔會變綠。chrome
第二種狀況:
我把 CSS 定義順序調整爲:a:link、a:visited、a:hover,這時,不管你鼠標通過的連接有沒有被訪問過,它都會變成綠色啦。windows
這是由於,一個鼠標通過的未訪問連接
同時擁有a:link、a:hover
兩種屬性。瀏覽器
奇淫技巧--記住正確排序:(l v h a )==》LV好啊
(取的首字母)dom
從目前瞭解的狀況,pc 和 h5 使用一套響應式的代碼的場景比較少了,大可能是 pc,h5 各自維護一套代碼。
1.使用CSS3媒體查詢@media 查詢ide
@media screen and (max-width:980px ) { body{ background-color: red; } }
2.flex佈局佈局
彈性盒佈局模型是css3規範中提出的一種新的佈局方式。
目的:提供一種更加高效的方式來對容器中的條目進行佈局、對齊和分配空間
優點:這種佈局模式已被主流瀏覽器所支持,能夠在web應用開發中使用。
Flex(Flexible Box)佈局 稱爲 "彈性佈局",能夠爲網頁的佈局提供最大的靈活性,取代了往常的 浮動(float) 佈局,而且任何一個容器均可以設置 Flex 佈局。
注:設置 Flex 佈局後,子元素的 Float 佈局將失效
圖1
圖2
主軸
的方向換行
簡寫
形式水平
對齊垂直
對齊多根主軸
的對齊方式左端
右端
上端
下端
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];
align-self: auto | stretch | flex-start | flex-end | center | baseline;
不會
改變頁面佈局
,可是不會觸發
該元素已經綁定的事件
改變
頁面佈局
,能夠理解成在頁面中把該元素刪掉
不會
改變頁面佈局
,能夠理解被其它元素壓在下面
了不會
改變頁面佈局
,而且,若是該元素已經綁定了一些事件,如 click 事件也能觸發
,經常使用於設置圖片透明度爲 0 ,而後加個點擊事件,點擊上傳文件區域以外
;縮放
無限小,元素將不可見,元素原來所在的位置將被保留;奇淫技巧:隱藏透明區域外,縮放壓住高度0
rgba 和 opacity 透明有何不一樣:
顏色或背景色
,對元素的內容沒有影響
。css 中,有兩種盒模型,經過 box-sizing 切換:
標準盒模型
,在設置寬度和高度時,只包含 content
,不包含 padding 和 border;IE 盒模型
,設置寬度和高度時,包含 content、padding 和 border
。內容寬度(content)
+ border + padding + margin內容寬度(content + border + padding)
+ margin樣式系統從關鍵選擇器開始,從右向左依次查找,若是出現未匹配的狀況會放棄規則,不然會左移直至匹配完成。
所以在寫樣式時,應儘可能選擇 ID 選擇器或 class 選擇器做爲關鍵選擇器,而且減小樣式的層級,下降消耗
。
選擇器類別 | 說明 | 權重 | 權值 |
---|---|---|---|
!important | 強制使用此樣式 | 權重最高 | 權值最高 |
行內樣式 | style = "" | (1.0.0.0) | 1000 |
id 選擇器 | #id | (0.1.0.0) | 100 |
類選擇器 | .id | (0.0.1.0) | 10 |
元素選擇器 | div | (0.0.0.1) | 1 |
通配符 > 繼承 > 瀏覽器默認
:first-child 匹配父元素中第一個子元素
E:first-child 它表示:只要 E 元素是它的父級的第一個子元素,就選中。它須要同時知足兩個條件
,一個是第一個子元素
,另外一個是這個子元素恰好是E
。
如下 2 中解讀都是錯誤的:
:nth-child(n) 匹配父元素中第 n 個子元素(n 能夠是一個數字,一個關鍵字,或者一個公式)
從右向左依次查詢
二者都是描述不在文本流中的東西。
單冒號
表示,當元素處於某種狀態
時,爲該元素添加樣式
,如 a 標籤的 hover;雙冒號
表示,爲了兼容老瀏覽器,有時候也會用單冒號表示,做用是建立
不在文本流中的元素
,併爲其添加樣式,如 ::before,在指定元素前添加元素。BFC 指的是格式化上下文
垂直
方向,邊距會發生重疊
。獨立
的容器,外面的元素不會影響裏面的元素,反之亦然。浮動
的子元素也參與計算。自身
content box 定位,仍佔據
原來位置空間
;第一個
position 不爲 static
的祖先元素的 padding box 定位,元素不佔據
原來位置空間
;瀏覽器窗口頂部
定位,不佔據
原來位置空間通用方案:
行內元素
:父元素是塊級元素,給父元素設置 text-align:center,父元素不是塊級元素,先將父元素設置爲塊級元素,再給父元素設置 text-align:center圖片
:給圖片設置 clear:both; display:block; margin:auto
;詳細方案:
方案一
:
margin:0 auto
;display:inline-block
;或 display:inline
,將其轉換成行內塊級元素/行內元素,給父元素設置 text-align:center
方案二
:使用定位屬性
left: 50%; margin-left: 50px
(子元素的寬度的一半--寬度定),或者 transform: translateX(-50%)
(寬度不定)方案三
:使用 flexbox 佈局實現(寬度定不定都行)
display: flex; justify-content: center
;行高=父元素的高
display:table-cell; vertical-align:middle
(行級、塊級、圖片都通殺)塊級元素:
margin-top: 子元素高度的一半
(高度定),或者transform:translateY(-50%)
;(高度不定)display:flex; align-items:center
;(行級、塊級、圖片都通殺)已知高度和寬度的元素
left:0; right:0; top:0; bottom:0; margin:auto
top:50%;left:50%(左上角垂直居中),margin-top:-子元素高的一半,margin-left:-子元素寬的一半
未知高度和寬度的元素
top:50%;left:50%
(左上角垂直居中),transform:translate(-50%,-50%)
(根據自身定位實現偏移)display:flex; justify-content:center; align-items:center
;清除浮動的方法:
高度
(height);加
一個 div 空標籤
,而且添加樣式 clear: both
;父級標籤
添加樣式 overflow
爲 hidden/both;zoom
;最好的方法:
clearfix:after{/*僞元素是行內元素 正常瀏覽器清除浮動方法*/ content: ""; display: block; height: 0; clear:both; visibility: hidden;
那麼,clear:both;到底起了什麼做用???
visibility: hidden; height: 0
; 只要 content 的值爲空, 寫不寫都無所謂。浮動
左側設置左浮動,右側設置右浮動便可,中間會自動地自適應。絕對定位
左側設置爲絕對定位, left:0px。右側設置爲絕對定位, right:0px。中間設置爲絕對定位,left 和 right 都爲 300px,便可。中間的寬度會自適應。flexbox佈局
將左中右所在的容器設置爲 display: flex,設置兩側的寬度後,而後讓中間的 flex = 1,便可。表格佈局
設置整個容器的寬度爲 100%,設置三個部分均爲表格(display:table-cell),而後左邊的單元格爲 300px,右邊的單元格爲 300px,便可。中間的單元格會自適應。網格佈局grid
設置容器爲網格佈局,寬度爲 100%,設置網格爲三列,並設置每列的寬度,便可。都是正值
的時候,取二者的最大值; 都是負值
的時候,取的是其中絕對值較大的,而後,從 0 位置,負向位移;有正有負
的時候,先取出負 margin 中絕對值中最大的,而後,和正 margin 值中最大的 margin 相加,即取和的絕對值.triangle { width: 0; height: 0; border-width: 100px; border-style: solid; border-color: tomato transparent transparent transparent; //3邊透明,一邊不透明 }
奇淫技巧--記住透明邊框的數量:3點一線
(總共 4 條線,有 3 條變成點了,即變透明瞭,另一條邊仍是線,即不透明)
p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; //3行溢出
字體
系列屬性:如 font,font-family,font-size,font-weight,font-style文本
系列屬性:如 color,text-indent(文本縮進),text-align(文本水平對齊),line-height,word-spacing(字間隔)可見性
:visibility表格
佈局屬性:caption-side、border-collapse、border-spacing、empty-cells、table-layout列表
屬性:list-style-type、list-style-image、list-style-position奇淫技巧:媒體查詢盒模型,旋轉圓角變(漸變)陰影
由於瀏覽器的兼容
問題,不一樣瀏覽器對標籤
的默認值
是不一樣的,若是沒有對瀏覽器的 CSS 初始化,會形成相同頁面在不一樣瀏覽器的顯示存在差別。
奇淫技巧:合併簡寫縮短鏈,語義遵照盒模型
迴流(重排),reflow:當 render tree 中的一部分(或所有)由於元素的規模尺寸
,佈局
,隱藏
等改變時而須要從新構建;
重繪(repaint):當 render tree 中的一些元素須要更新屬性,而這些屬性隻影響元素的外觀
,風格
,而不會影響佈局時
,稱其爲重繪,例如顏色改變等。
注意:每一個頁面至少須要引起一次
重排+重繪,並且重排(迴流)必定
會引起重繪
。
觸發重排(迴流)的條件:
奇淫技巧:迴流理解爲流動,流動天然會引發佈局的變更;重繪能夠理解爲表層繪畫,那麼只是外觀的改變。
首先是性能差別:
默認值理解
,瀏覽器依然對 border-width/border-color 進行了渲染
,即已經佔用內存值
;多渲染了一個border-width:0
,也就是爲何 border:none 的性能
要比 border:0高
;兼容性差別:
{border:none;}當 border 爲「none」時彷佛對 IE6/7 無效,邊框依然存在,當 border 爲「0」時,全部瀏覽器都一致把邊框隱藏。
塊級
格式化上下文;內聯
格式化上下文;網格佈局
格式化上下文;自適應
格式化上下文通常狀況下,頁面加載時自上而下
的。
將 style 標籤至於 body 以前,爲的是先加載樣式
。
如果寫在 body 標籤以後,因爲瀏覽器以逐行方式
對 html 文檔進行解析,當解析到寫在文檔尾部的樣式表時,
會致使瀏覽器中止以前的渲染
,等待加載且解析樣式表
完成以後會從新渲染
,在 windows 的 IE 下可能會出現 FOUC 現象(頁面閃爍
)。
通常來講,子元素的百分比單位都是以父元素爲依據。
可是 margin 和 padding 例外。元素的 height
是相對於容器的高度
,可是元素的 margin 和 padding
是相對於容器的寬度
。
每一個 HTML 元素都具備clientHeight offsetHeight scrollHeight offsetTop scrollTop
這 5 個和元素高度、滾動、位置相關的屬性,單憑單詞很難搞清楚分別表明什麼意思之間有什麼區別。
經過閱讀它們的文檔總結出規律以下:
clientHeight和offsetHeight
屬性和元素的滾動、位置沒有關係它表明元素的高度
,其中:
padding
但不包括border、水平滾動條、margin
的元素的高度。對於 inline
的元素這個屬性一直是 0
,單位 px,只讀元素。padding、border、水平滾動條
,但不包括margin
的元素的高度。對於inline的元素這個屬性一直是 0,單位 px,只讀元素。接下來討論出現有滾動條時的狀況:
當本元素的子元素
比本元素高
且overflow=scroll
時,本元素會 scroll,這時:
本元素有部分被隱藏
了,scrollHeight包括當前不可見部分
的元素的高度
。scrollHeight>=clientHeight
恆成立。在有滾動條時討論 scrollHeight 纔有意義,在沒有滾動條時 scrollHeight==clientHeight 恆成立。單位 px,只讀元素。有滾動條時
,滾動條向下滾動
的距離也就是元素頂部被遮住部分
的高度。在沒有滾動條
時scrollTop==0
恆成立。單位 px,可讀可設置。。元素頂部
距離最近父元素頂部
的距離,和有沒有滾動條沒有關係。單位 px,只讀元素。1. 利用 padding
<html> <head> <meta charset="utf-8" /> <title>新標籤頁</title> </head> <script></script> <body> <div class="content"> <div class="son">包裹內容</div> </div> </body> <style> .content { /* width: 100px; height: 100px; */ } .son { width: 10%; padding-bottom: 10%; /* padding百分比相對父元素寬度計算 */ height: 0; border: 1px solid red; } </style> </html>
效果以下:
效果圖
2.padding-bottom+:after+absolute
<html> <head> <meta charset="utf-8" /> <title>新標籤頁</title> </head> <body> <div class="content"> <div class="son">包裹內容</div> </div> </body> <style> .content { width: 10%; background: #ccc; } .content:after { content: ''; display: block; padding-bottom: 100%; } .son { position: absolute; width: 100%; height: 100%; } </style> <script></script> </html>
效果以下:
屬性 | 含義 |
---|---|
animation(動畫) | 用於設置動畫屬性,他是一個簡寫的屬性,包含6個屬性 |
transition(過渡) | 用於設置元素的樣式過分,和animation有着相似的效果,但細節上有很大的不一樣 |
transform(變形) | 用於元素進行旋轉、縮放、移動或傾斜,和設置樣式的動畫並無什麼關係,就至關於color同樣用來設置元素的「外表」 |
translate(移動) | translate只是transform的一個屬性值,即移動。 |