csscss
Cascading Style Sheet 層疊樣式表html
css 選擇器分類
- 標籤選擇器
- id選擇器
- class選擇器
- 後代選擇器(div a)
- 子代選擇器(div > p)
- 相鄰選擇器(div + p)
- 通配符選擇器(*)
- 屬性選擇器
- 僞類選擇器
- 僞元素選擇器::before{}
css3屬性選擇器
選擇器 |
描述 |
[attribute] |
用於選取帶有指定屬性的元素 |
[attribute=value] |
用於選取帶有指定屬性和值的元素 |
[attribute~=value] |
用於選取屬性值中包含指定詞彙的元素 |
[attribute|=value] |
用於選取帶有以指定值開頭的屬性值的元素,該值必須是整個單詞。 |
[attribute^=value] |
匹配屬性值以指定值開頭的每一個元素 |
[attribute$=value] |
匹配屬性值以指定值結尾的每一個元素 |
[attribute*=value] |
匹配屬性值中包含指定值的每一個元素 |
css3僞類選擇器
- :hover
- :focus
- :after 在元素以後添加內容,也能夠用來作清除浮動
- :before 在元素以前添加內容
- :enabled 選擇器匹配每一個已啓用的元素(大多用在表單元素上)
- :disabled 控制表單控件的禁用狀態
- :checked 單選框或複選框被選中
- ::selection 用戶選中的區域
- :empty 通常用來隱藏內部什麼都沒有的元素
- :not(selecter)
- p:first-of-type
- p:last-of-type
- p:only-of-type
- p:nth-of-type(n)
- p:nth-last-of-type(n)
- :nth-child(n)
- :nth-last-child(n)
- p:only-child
僞類和僞元素區別
- 僞類值一種狀態 好比:hover
- 僞元素是一個真實存在的元素,他能夠有樣式有內容
iconfont原理
- 利用編碼讓圖標變爲一個字符
- 引入字體
- 利用before僞元素向頁面中插入一個文字
css定義的權重
- !important優先級最高,但也會被權重高的important所覆蓋
- 行內樣式總會覆蓋外部樣式表的任何樣式(除了!important)
- 單獨使用一個選擇器的時候,不能跨等級使css規則生效
- 若是兩個權重不一樣的選擇器做用在同一元素上,權重值高的css規則生效
- 若是兩個相同權重的選擇器做用在同一元素上,之後面出現的選擇器爲最後規則
- 權重相同時,與元素距離近的選擇器生效
一句話總結:!important > 行內樣式 > ID選擇器 > (類選擇器|屬性選擇器|僞類選擇器) > 元素選擇器css3
瀏覽器解析CSS
簡單地說,瀏覽器查找元素是經過找到特定元素後往前解析,這樣作的目的就是加快CSS解析速度,從後往前,排除法web
美化checkbox
- 讓本來的勾選框隱藏
- input + label 背景圖沒選中
- input:checked + label 背景圖選中
.checkbox input{
display: none;
}
.checkbox input + label{
background:url(./沒選中.png) left center no-repeat;
background-size:20px 20px;
padding-left:20px;
}
.checkbox input:checked + label{
background-image:url(./選中.png);
}
<div class="checkbox">
<input id="handsome" type="checkbox" />
<label for="handsome">我很帥</label>
</div>
盒模型
盒模型有兩種:IE怪異盒子模型、W3C標準盒子模型;瀏覽器
盒模型是由:content(內容)、padding(內邊距)、border(邊框)、margin(外邊距)組成的;dom
標準盒子模型的寬高指的是content區的寬高,IE盒模型的寬高指的是content+padding+border的寬高;模塊化
CSS如何設置這兩種盒模型
標準盒模型:佈局
box-sizing:content-box;性能
IE盒模型:字體
box-sizing:border-box;
BFC
W3C對BFC的定義:
浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如:inline-block、table-cells、table-captions),以及overflow值不爲「visible」的塊級盒子,都會爲他們的內容建立新的BFC(塊級格式上下文)。
BFC(Block formatting context)直譯爲「塊級格式化上下文」。它是一個獨立的渲染區域,只有Block-level box(塊級框)參與,它規定了內部的 Block-level box 如何佈局,而且與這個區域的外部絕不相干。
BFC的做用
- 利用BFC避免外邊距摺疊
-
清除內部浮動(撐開高度)
- 原理:觸發父級的BFC屬性,使下面的子級都處於父級的同一個BFC中
- 避免文字環繞
- 分屬於不一樣的BFC時,能夠阻止 margin 重疊
- 多列布局中使用BFC
如何生成BFC(脫離文檔流,知足如下一個或多個條件便可)
- 根元素,即HTML元素(最大的一個BFC)
- float的值不爲 none
- position的值爲 absolute 或 fixed
- overflow的值不爲 visible(默認值。內容不會修剪。會呈如今元素框以外)
- display的值爲 inline-block、table-cell、table-caption
BFC的佈局規則
- 內部的Box會在垂直方向上,一個接一個的放置
- 屬於同一個BFC的兩個相鄰的Box的 margin 會發生重疊
- BFC就是頁面上一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素。反之也是如此,文字環繞效果設置float
- BFC的區域不會與 float Box 重疊
- 計算BFC的高度,浮動元素也參與計算
非佈局樣式
- 字體、字重、顏色、大小、行高
- 背景、邊框
- 滾動、換行
- 粗體、斜體、下劃線
- 其餘
行高的構成
- 行高是由 line-box 組成的
- line-box 是由一行裏的 inline-box 組成
- inline-box 中最高的那個,或字體最大的那個決定行高
float
- 元素「浮動」
- 脫離文檔流
- 不脫離文本流
- 位置儘可能靠上,並靠左或靠右
對本身的影響
- 造成「塊」(BFC)
- 這個塊由本身佈局,寬高由本身決定
對兄弟元素的影響
- 上面通常貼非浮動元素
- 靠邊貼浮動元素或邊
- 不影響其餘塊級元素的位置
- 影響其餘塊級元素文本
對父級元素的影響
清除浮動
浮動的元素佈局時,不會佔據父元素的佈局空間,即父元素佈局時不會去管浮動元素,浮動元素有可能超出父元素,對其餘元素形成影響
方法一:在父級內容的最後添加一個空的div,給這個空div添加clear屬性;clear:left(清除左浮動)、clear:right(清除右浮動)、clear:both(清除全部浮動)
方法二:給父級設置overflow:hidden;會觸發BFC
方法三:使用僞元素
.container::after {
content: " ";
clear: both;
display: block;
visibility: hidden;
height: 0;
}
對 line-height 的理解
- line-height指一行字的高度,包含了字間距,其實是下一行基線到上一行基線的距離
- 若是一個標籤沒有定義height屬性,那麼其最終表現的高度由line-height決定的
- 一個容器沒有設置高度,那麼撐開容器高度的是line-height而不是容器內的文字內容
- 把line-height值設置爲height同樣大小的值能夠實現單行文字的垂直居中
line-height三種賦值方式區別(帶單位、純數字、百分比)
- 帶單位:px是固定值,而em會參考父元素的font-size值計算自身的行高
- 純數字:會把比例傳遞給後代。例如,父級行高爲1.5,子元素字體爲18px,則子元素行高爲1.5 * 18 = 27px
- 百分比:將計算後的值傳遞給後代
滾動
- visible 滾動條隱藏,文本超出顯示
- hidden 滾動條隱藏,文本超出不顯示
- scroll 滾動條一直顯示,無論文本的多少
- auto 滾動條自動隱藏
文字折行
- overflow-wrap(word-wrap)通用換行控制
- word-break 針對多字節文本文字
- white-space 空白處是否換行
單行文本溢出顯示省略號
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
多行文本溢出顯示省略號
overflow:hidden;
text-overflow:ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
display:none 和 visibility:hidden 的區別
相同:它們都讓元素不可見
區別:
- display:none 會讓元素消失,且不在保留位置;visibility:hidden 也是讓元素消失,可是會保留本來的位置
- display:none 是非繼承屬性,子節點消失由於是從dom樹上消失形成,因此經過修改子節點的屬性沒法顯示;
visibility:hidden 是繼承屬性,子節點的消失因爲繼承了 hidden,經過設置 visibility:visible 可讓子節點顯示
- 修改 display 會形成文本重排,而修改 visibility 會形成元素重繪
- 瀏覽器不會讀取 display 的元素內容;但會讀取 visibility 的元素內容
CSS單位
- px 絕對單位,
-
% 父元素寬度的比例。
- 若是對 html 元素設置 font-size 爲百分比值,則是以瀏覽器默認字體大小16px爲參照來計算,如62.5%即等於10px(16px * 62.5% = 10)
-
em 相對單位,不一樣的屬性有不一樣的參照值
- 對於字體大小屬性(font-size)來講,em 的計算方式是相對於父元素的字體大小
- border、width、height、margin、padding、line-height,在這些屬性中,使用 em 單位的計算方式是參照該元素的 font-size ,1em 等於該元素設置的字體大小。同理若是該元素沒有設置,就依次向父級元素查找,若是都沒有,則使用瀏覽器的默認的字體大小
-
rem 相對與根元素 html 的 font-size 來計算,因此其參照物是固定的
- 好處:rem 只須要修改根元素 html 的 font-size 的值就能夠修改所有,可謂牽一髮而動全身
-
vw、vh、vmin、vmax 相對單位,是基於視窗大小(瀏覽器用來顯示內容的區域大小)來計算的
- vw:基於視窗的寬度計算,1vw 等於視窗寬度的百分之一
- vh:基於視窗的高度計算,1vh 等於視窗高度的百分之一
- vmin:基於 vw 和 vh 中的最小值來計算,1vmin 等於最小值的百分之一
- vmax:基於 vw 和 vh 中的最大值來計算,1vmax 等於最大值的百分之一
與transition、translate名字有點像,可是transition是作過渡動畫,translate是作平移的
- none
- matrix(n,n,n,n,n,n)
- translate(x,y)
- 從其當前位置移動,根據給定的left(x座標)和top(y座標)
- translate3d(x,y,z)
- translateX(x)
- translateY(y)
- translateZ(z)
- scale(x[,y]?)
- scale3d(x,y,z)
- scaleX(x)
- scaleY(y)
- scaleZ(z)
- rotate(angle)
- rotate3d(x,y,z,angle)
- rotateX(angle)
- rotateY(angle)
- rotateZ(angle)
- skew(x-angle,y-angle)
- skewX(angle)
- skewY(angle)
- perspective(n)
CSS預處理器
- 嵌套
- 變量和計算
- extend 和 mixin
- 代碼片斷重用
- mixin 是直接把CSS代碼每一個地方重複寫一份
- extend 是使用逗號分隔的選擇器來爲多個不一樣的地方使用同一段CSS
- 循環
- import
CSS優化、提升性能的方法
- 多個CSS合併,儘可能減小 http 的請求
- css 雪碧圖
- 抽象提取公共樣式,減小代碼量
- 選擇器優化嵌套,儘可能避免層級過深(用 > 代替 空格)
- 屬性值爲0時,不加單位
- 壓縮css代碼
- 避免使用css表達式
- 它們要計算成千上萬次而且可能會對你的頁面性能形成影響
link 與 @import 的區別
- link 是 HTML 方式,@import 是 CSS方式
- link 最大限度支持並行下載,@import過多嵌套致使串行下載,出現FOUC(用戶定義樣式表加載以前瀏覽器使用默認樣式顯示文檔,用戶樣式加載完成後在顯示新的文檔,形成頁面閃爍)
- link 能夠經過 rel="alternate stylesheet" 指定候選樣式
- 瀏覽器對 link 支持早於@import,可使用 @import 對老瀏覽器隱藏樣式
- @import 必須在樣式規則以前,能夠在css文件中引用其餘文件
- 整體來講,link 優於@import
display有哪些值?說明它們的做用
position有哪些值?
- relative 相對定位,相對於正常位置進行定位
- absolute 絕對定位,相對於值不爲static的父級進行定位
- fixed 固定定位,相對於瀏覽器窗口進行定位
- static 默認值,沒有定位
- inherit 規定從父元素繼承 position 屬性的值
CSS3新特性
- 新增選擇器 p:nth-child(n){color: rgba(255, 0, 0, 0.75)}
- 彈性盒模型 display: flex;
- 多列布局 column-count: 5;
- 媒體查詢 @media (max-width: 480px) {.box: {column-count: 1;}}
- 個性化字體 @font-face{font-family: BorderWeb; src:url(BORDERW0.eot);}
- 顏色透明度 color: rgba(255, 0, 0, 0.75);
- 圓角 border-radius: 5px;
- 漸變 background:linear-gradient(red, green, blue);
- 陰影 box-shadow:3px 3px 3px rgba(0, 64, 128, 0.3);
- 倒影 box-reflect: below 2px;
- 文字裝飾 text-stroke-color: red;
- 文字溢出 text-overflow:ellipsis;
- 背景效果 background-size: 100px 100px;
- 邊框效果 border-image:url(bt_blue.png) 0 10;
- 平滑過渡 transition: all .3s ease-in .1s;
- 動畫 @keyframes anim-1 {50% {border-radius: 50%;}} animation: anim-1 1s;
- 變形 transform
- 旋轉 transform: rotate(20deg);
- 傾斜 transform: skew(150deg, -10deg);
- 位移 transform: translate(20px, 20px);
- 縮放 transform: scale(.5);
用純CSS建立一個三角形的原理是什麼?
把border的其餘三條邊設爲透明,這裏要把border-width、border-style、border-color分開寫
.tri { width: 0px; height: 0; border-style: solid; border-width: 100px; border-color: transparent transparent red transparent; }
li 與 li 之間有看不見的空白間隔是什麼緣由引發的?有什麼解決辦法?(也稱幽靈字符)
行框的排列會受到中間空白(回車\空格)等的影響,由於空格也屬於字符, 這些空白也會被應用樣式,佔據空間,因此會有間隔,把字符大小設爲 0,就沒有空格了
什麼是響應式設計?響應式設計的基本原理是什麼?如何兼容低版本的 IE?
- 響應式設計就是網站可以兼容多個不一樣大小的終端,而不是爲每一個終端作一個特定的版本
- 基本原理是利用 CSS3 媒體查詢,爲不一樣尺寸的設備適配不一樣樣式
- 對於低版本的 IE,可採用 JS 獲取屏幕寬度,而後經過監聽window.onresize 方法來實現兼容
box-sizing 經常使用的屬性有哪些?分別有什麼做用?
- box-sizing: content-box; // 默認的標準(W3C)盒模型元素效果
- box-sizing: border-box; // 觸發怪異(IE)盒模型元素的效果
- box-sizing: inherit; // 繼承父元素 box-sizing 屬性的值
請列舉幾種隱藏元素的方法
rgba()和opacity的透明效果有什麼不一樣?
- opacity 做用於元素以及元素內的全部內容(包括文字)的透明度
- rgba() 只做用於元素自身的顏色或其背景色,子元素不會繼承透明效果
css 屬性 content 有什麼做用?
content 屬性專門應用在 before/after 僞元素上,用於插入額外內容或樣式
a 標籤上四個僞類的使用順序是怎麼樣的?
link > visited > hover > active 簡稱 lvha(love-ha)
僞類的特殊性(應用優先級)是一樣的,因此後出現的僞類會覆蓋先出現的僞類(同時激活)
在這裏,好比把hover放在active後面,那麼實際你在激活(active)連接的時候就觸發了hover僞類,hover在後面覆蓋了active的顏色,因此始終沒法看到active的顏色
僞元素和僞類的區別和做用?
僞元素:在內容元素的先後插入額外的元素或樣式,可是這些元素實際上並不在文檔中生成。它們只在外部顯示可見,但不會在文檔的源代碼中找到它們,所以,稱爲「僞」元素。例如:
p::before {content:"第一章:";} p::after {content:"Hot!";} p::first-line {background:red;} p::first-letter {font-size:30px;}
僞類: 將特殊的效果添加到特定選擇器上。它是已有元素上添加類別的,不會產生新的元素。例如:
a:hover {color: #FF00FF} p:first-child {color: red}
::before 和 :after 中雙冒號和單冒號有什麼區別?
- 在 CSS 中僞類一直用 : 表示,如 :hover, :active 等
- 僞元素在 CSS1 中已存在,當時語法是用 : 表示,如 :before 和 :after
- 後來在 CSS3 中修訂,僞元素用 :: 表示,如 ::before 和 ::after,以此區分僞元素和僞類
- 因爲低版本 IE 對雙冒號不兼容,開發者爲了兼容性各瀏覽器,繼續使使用 :after 這種老語法表示僞元素
- 綜上所述:::before 是 CSS3 中寫僞元素的新語法; :after 是 CSS1 中存在的、兼容 IE 的老語法
請解釋 CSS sprites,以及你要如何在頁面或網站中實現它
- CSS Sprites 其實就是把網頁中一些背景圖片整合到一張圖片文件中,再利用 CSS 的「background-image」,「background- repeat」,「background-position」的組合進行背景定位,background-position 能夠用數字能精確的定位出背景圖片的位置。
- CSS Sprites 爲一些大型的網站節約了帶寬,讓提升了用戶的加載速度和用戶體驗,不須要加載更多的圖片。
margin疊加狀況
margin疊加的意思是:當兩個或者更多的垂直外邊距 相遇時,它們將造成一個外邊距,這個外邊距的高度等於兩個發生疊加的外邊距中高度較大者。
- 當一個元素出如今另外一個元素上面時,第一個元素的底邊外邊距與第二個元素的頂邊外邊距發生疊加。如圖:
- 當一個元素在另外一個元素中時,它們的頂邊距和低邊距也會發生疊加
- 若是一個元素是空元素(即一個元素沒有內容,內邊距和邊框),這種狀況外邊距的頂邊距和低邊距碰在一塊兒也會發生疊加
- 在上面那種空元素的狀況,若是該空元素與另外一個元素的外邊距碰在一塊兒,也會發生疊加。
以上4種外邊距疊加狀況只會發生在普通文檔流的垂直方向。行內框、浮動框、絕對定位框之間的外邊距不會發生疊加,一樣水平方向也不會發生疊加。