CSS有哪些經典面試題?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
創(chuàng)新互聯建站公司2013年成立,是專業(yè)互聯網技術服務公司,擁有項目成都做網站、成都網站設計網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元海口做網站,已為上家服務,為??诟鞯仄髽I(yè)和個人服務,聯系電話:028-86922220
盒子模型就是 元素在網頁中的實際占位,有兩種:標準盒子模型和IE盒子模型
標準(W3C)盒子模型:內容content+填充padding+邊框border+邊界margin
寬高指的是 content 的寬高
低版本IE盒子模型:內容(content+padding+border)+ 邊界margin,
寬高指的是 content+padding+border 部分的寬高
問題的拓展:
CSS 如何設置這兩種模型?
box-sizing : content-box box-sizing : border-box復制代碼
JS 如何設置獲取盒模型對應的寬和高?
dom.style.width/height;//設置獲取的是內聯樣式 dom.currentStyle.width/height;//只有IE支持 window.getComputedStyle(dom).width/height;//兼容性好 dom.getBoundingClientRect().width/height;//適用場所:計算一個元素的絕對位置復制代碼
實例題(根據盒模型解釋邊距重疊)?
該例子是父子邊距重疊,還有兄弟元素的邊距重疊
<style> html *{ padding: 0; margin: 0; } #sec{ background: #f00; overflow: hidden; //創(chuàng)建了一個BFC,塊級格式化上下文 } .child{ height: 100px; margin-top: 10px; background: yellow; } </style> <section id="sec"> <article class="child"></article> </section>復制代碼
BFC(邊距重疊解決方案)?
用來控制元素的盒子模型的解析模式,默認為content-box
context-box:W3C的標準盒子模型,設置元素的 height/width 屬性指的是 content 部分的高/寬
border-box:IE 傳統盒子模型。設置元素的 height/width 屬性指的是 content + border + padding 部分的高/寬
(W3C CSS 2.1 規(guī)范中的一個概念,它是一個獨立容器,決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。)
一個頁面是由很多個 Box 組成的,元素的類型和 display 屬性,決定了這個 Box 的類型。
不同類型的 Box,會參與不同的 Formatting Context(決定如何渲染文檔的容器),因此Box內的元素會以不同的方式渲染,也就是說BFC內部的元素和外部的元素不會互相影響。
BFC 規(guī)定了內部的 Block Box 如何布局。
定位方案:
滿足下列條件之一就可觸發(fā) BFC
更多關于 BFC 的介紹,請看我的文章 BFC 是什么?有什么用?
CSS選擇符:
1. id選擇器( # myid)
2. 類選擇器(.myclassname)
3. 標簽(元素)選擇器(p, h2, p)
4. 相鄰選擇器(h2 + p)
5. 子選擇器(ul > li)
6. 后代選擇器(li a)
7. 通配符選擇器( * )
8. 屬性選擇器(a[rel = "external"])
9. 偽類選擇器(a:hover, li:nth-child)
偽元素選擇器、分組選擇器。
繼承性:
可繼承的樣式:font-size, font-family, color,ul,li,dl,dt,dd;
不可繼承的樣式:border, padding, margin, width, height
優(yōu)先級(就近原則):!important > [ id > class > tag ]
!important 比內聯優(yōu)先級高
優(yōu)先級算法計算
優(yōu)先級就近原則,同權重情況下樣式定義最近者為準
!important>id >class>tag
important比內聯優(yōu)先級高
元素選擇符的權值:元素標簽(派生選擇器):1,class選擇符:10,id選擇符:100,內聯樣式權值最大,為1000
p:first-of-type 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。
p:last-of-type 選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素。
p:only-of-type 選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素。
p:only-child 選擇屬于其父元素的唯一子元素的每個 <p> 元素。
p:nth-child(2) 選擇屬于其父元素的第二個子元素的每個 <p> 元素。
:enabled
:disabled 控制表單控件的禁用狀態(tài)。
:checked,單選框或復選框被選中。
:before在元素之前添加內容,也可以用來做清除浮動
:after在元素之后添加內容
水平居中p:
border: 1px solid red; margin: 0 auto; height: 50px; width: 80px;復制代碼
水平垂直居中一個浮動元素(position定位)
第一種:未知元素寬高
<p class="outer"> <span>我想居中顯示</span> </p> <style> .outer{ width:300px; height:300px; position:relative; background-color:#ccc; } span{ float:left; position:absolute; backgroond-color:red; top:50%; left:50%; transform:translate(-50%,-50%); } </style>復制代碼
第二種:已知元素寬高的
<p class="outer"> <span>我想居中顯示</span> </p> <style> .outer{ width:300px; height:300px; position:relative; background-color:#ccc; } span{ float:left; position:absolute; backgroond-color:red; width:150px; height:50px; top:50%; left:50%; margin:-25px 0px 0px -75px; } </style>復制代碼
如何垂直居中一個img(display : table-cell 或者 position定位)
<p class="outer"> <img src="nz.jpg" alt=""> </p> <style> .outer{ width: 300px; height: 300px; border: 1px solid #cccccc; display: table-cell; text-align: center; vertical-align: middle; } img{ width: 150px; height: 150px; } </style>復制代碼
絕對定位的p水平垂直居中:
border: 1px solid black; position: absolute; width: 200px; height: 100px; margin: auto; left: 0; right: 0; top:0; bottom:0;復制代碼
還有更加優(yōu)雅的居中方式就是用 flex布局,點擊查看我的文章 掌握flex布局,這篇文章就夠了
更多的居中問題,點擊查看我的文章 p居中的幾種方法
值 | 描述 |
---|---|
inline | 默認。此元素會被顯示為內聯元素,元素前后沒有換行符。 |
block | 此元素將顯示為塊級元素,此元素前后會帶有換行符。 |
none | 此元素不會被顯示(隱藏)。 |
inline-block | 行內塊元素。(CSS2.1 新增的值) |
list-item | 此元素會作為列表顯示。 |
table | 此元素會作為塊級表格來顯示(類似table),表格前后帶有換行符 |
值 | 描述 |
---|---|
absolute | 生成絕對定位的元素,相對于 static 定位以外的第一個父元素進行定位。 元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定。 |
fixed | 生成固定定位的元素,相對于瀏覽器窗口進行定位。(老IE不支持) 元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定。 |
relative | 生成相對定位的元素,相對于其正常位置進行定位,不脫離文檔流。 因此,"left:20" 會向元素的 LEFT 位置添加 20 像素。 |
static | 默認值。沒有定位,元素出現在正常的文檔流中(忽略 top, bottom, left, right 或者 z-index 聲明)。 |
inherit | 規(guī)定應該從父元素繼承 position 屬性的值。 |
css 定位還有一個新增屬性,粘性定位 sticky,它主要用在對 scroll 事件的監(jiān)聽上;
粘性定位可以被認為是相對定位和固定定位的混合。元素在跨越特定閾值前為相對定位,之后為固定定位。例如:
#one { position: sticky; top: 10px; }復制代碼
在 viewport 視口滾動到元素 top 距離小于 10px 之前,元素為相對定位。之后,元素將固定在與頂部距離 10px 的位置,直到 viewport 視口回滾到閾值以下。
更多關于 sticky 的介紹,請點擊查看 粘性定位介紹
:not(p)
選擇每個非p的元素; p:empty
選擇每個沒有任何子級的p元素(包括文本節(jié)點)p{ border:2px solid; border-radius:25px; //用于設置圓角 box-shadow: 10px 10px 5px #888888; //水平陰影 垂直陰影 模糊距離 陰影顏色 border-image:url(border.png) 30 30 round;// 設置所有邊框圖像的速記屬性。 }復制代碼
p{ background:url(img_flwr.gif); background-repeat:no-repeat; background-size:100% 100%; //規(guī)定背景圖的尺寸 background-origin:content-box;//規(guī)定背景圖的定位區(qū)域 } 多背景 body{ background-image:url(img_flwr.gif),url(img_tree.gif); }復制代碼
background: linear-gradient(direction, color-stop1, color-stop2, ...);復制代碼
更多 CSS3 和 HTML5的新特性,請點擊 CSS3 和 HTML5 新特性一覽
該布局模型的目的是提供一種更加高效的方式來對容器中的條目進行布局、對齊和分配空間。在傳統的布局方式中,block 布局是把塊在垂直方向從上到下依次排列的;而 inline 布局則是在水平方向來排列。彈性盒布局并沒有這樣內在的方向限制,可以由開發(fā)人員自由操作。
試用場景:彈性布局適合于移動前端開發(fā),在Android和ios上也完美支持。
更多關于flex 布局,請點擊查看我的文章 你真的了解 flex 布局嗎?
首先,需要把元素的寬度、高度設為0。然后設置邊框樣式。
width: 0; height: 0; border-top: 40px solid transparent; border-left: 40px solid transparent; border-right: 40px solid transparent; border-bottom: 40px solid #ff0000;復制代碼
第一種真正的品字:
第二種全屏的品字布局:
上面的p設置成100%,下面的p分別寬50%,然后使用float或者inline使其不換行。
*{margin:0;padding:0;}
來統一;
display:inline;
將其轉化為行內屬性。漸進識別的方式,從總體中逐漸排除局部。首先,巧妙的使用“9”這一標記,將IE瀏覽器從所有情況中分離出來。接著,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經獨立識別。 漸進識別的方式,從總體中逐漸排除局部。首先,巧妙的使用“9”這一標記,將IE瀏覽器從所有情況中分離出來。接著,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經獨立識別。{ background-color:#f1ee18;/*所有識別*/.background-color:#00deff\9; /*IE6、7、8識別*/+background-color:#a200ff;/*IE6、7識別*/_background-color:#1e0bd1;/*IE6識別*/}復制代碼
a:link {} a:visited {} a:hover {} a:active {}復制代碼
IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性;
Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性。
解決方法:(條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。
1. 雙邊距BUG float引起的 使用display
2. 3像素問題 使用float引起的 使用dislpay:inline -3px
3. 超鏈接hover 點擊后失效 使用正確的書寫順序 link visited hover active
4. Ie z-index問題 給父級添加position:relative
5. Png 透明 使用js代碼 改
6. Min-height 最小高度 !Important 解決’
7. select 在ie6下遮蓋 使用iframe嵌套
8. 為什么沒有辦法定義1px左右的寬度容器(IE6默認的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)
9. ie 6 不支持!important
因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。當然,初始化樣式會對SEO有一定的影響,但魚和熊掌不可兼得,但力求影響最小的情況下初始化。
無論屬于哪種,都要先找到其祖先元素中最近的 position 值不為 static 的元素,然后再判斷:
如果都找不到,則為 initial containing block。
補充:
1. static(默認的)/relative:簡單說就是它的父元素的內容框(即去掉padding的部分)
2. absolute: 向上找最近的定位為absolute/relative的元素
3. fixed: 它的containing block一律為根元素(html/body),根元素也是initial containing block
當一個元素的 visibility
屬性被設置成 collapse
值后,對于一般的元素,它的表現跟 hidden
是一樣的。但例外的是,如果這個元素是table相關的元素,例如table行,table group,table列,table column group,它的表現卻跟 display: none
一樣,也就是說,它們占用的空間也會釋放。
在谷歌瀏覽器里,使用 collapse
值和使用 hidden
值沒有什么區(qū)別。
在火狐瀏覽器、Opera和IE11里,使用 collapse
值的效果就如它的字面意思:table的行會消失,它的下面一行會補充它的位置。
display : none隱藏對應的元素,在文檔布局中不再分配空間(回流+重繪)
visibility:hideen隱藏對應的元素,在文檔布局中仍保留原來的空間(重繪)
使用 CSS display:none 屬性后,HTML 元素(對象)的寬度、高度等各種屬性值都將“丟失”;而使用 visibility:hidden 屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在。
display 屬性規(guī)定元素應該生成的框的類型;position屬性規(guī)定元素的定位類型;float屬性是一種布局方式,定義元素在哪個方向浮動。
類似于優(yōu)先級機制:position:absolute/fixed優(yōu)先級最高,有他們在時,float不起作用,display值需要調整。float 或者absolute定位的元素,只能是塊元素或表格。
出現浮動的原因:
浮動元素碰到包含它的邊框或者浮動元素的邊框停留。在CSS規(guī)范中,浮動定位不屬于正常的頁面流,而是獨立定位的,所以文檔流的塊框表現得就像浮動框不存在一樣。浮動元素會漂浮在文檔流的塊框上。
關于css的定位機制:普通流,浮動,絕對定位(position:fixed是position:absolute的一個子類)。浮動的框可以左右移動,直到它的外邊緣遇到包含框或者另一個浮動框的邊緣,所以才說浮動定位不屬于正常的頁面流。文檔中的普通流就會表現得和浮動框不存在一樣,當浮動框高度超出包含框的時候,就會出現包含框不會自動伸縮高度類筆盒浮動元素。所以,只含有浮動元素的父容器在顯示時不需要考慮子元素的位置,就造成顯示父容器像空容器一樣。
浮動帶來的問題:
清除浮動的方式:
1、父級p定義height
原理:父級p手動定義height,就解決了父級p無法自動獲取到高度的問題
優(yōu)點:簡單,代碼少,容易掌握
缺點:只適合高度固定的布局,要給出精確的高度,如果高度和父級p不一樣時,會產生問題
建議:不推薦使用,只建議高度固定的布局時使用
2、結尾處加空 p 標簽 clear:both
原理:添加一個空p,利用css提高的clear:both清除浮動,讓父級p能自動獲取到高度
優(yōu)點:簡單,代碼少,瀏覽器支持好,不容易出現怪問題
缺點:不少初學者不理解原理;如果頁面浮動布局多,就要增加很多空p,讓人感覺很不爽
建議:不推薦使用,但此方法是以前主要使用的一種清除浮動方法
3、父級 p 定義 overflow:hidden
原理:必須定義width或zoom:1,同時不能定義height,使用overflow:hidden時,瀏覽器會自動檢查浮動區(qū)域的高度
優(yōu)點:簡單,代碼少,瀏覽器支持好
缺點:不能和position配合使用,因為超出的尺寸的會被隱藏
建議:只推薦沒有使用position或對overflow:hidden理解比較深的朋友使用
4、父級p定義偽類 :after 和 zoom
原理:IE8以上和非IE瀏覽器才支持:after,原理和方法2有點類似,zoom(IE轉有屬性)可解決ie6,ie7浮動問題
優(yōu)點:瀏覽器支持好,不容易出現怪問題(目前:大型網站都有使用,如:騰迅,網易,新浪等等)
缺點:代碼多,不少初學者不理解原理,要兩句代碼結合使用,才能讓主流瀏覽器都支持
建議:推薦使用,建議定義公共類,以減少CSS代碼
(1) 在子元素后添加一個空p p{clear:both;}
(2) 在父元素中{overflow:hidden|auto;zoom:1}
(3) :after偽選擇符,在父容器的尾部自動創(chuàng)建一個子元素
.clearfix:after { content: "\0020";display: block;height: 0;clear: both; } .clearfix { zoom: 1; }復制代碼
"clearfix"
是父容器的class名稱,"content:"020";"
是在父容器的結尾處放一個空白符,
"height:
0;"
是讓這個這個空白字符不顯示出來,"display:
block; clear: both;"
是確保這個空白字符是非浮動的獨立區(qū)塊。:after
選擇符IE 6不支持,添加一條IE 6的獨有命令"zoom:1;"
就行了.
在重合元素外包裹一層容器,并觸發(fā)該容器生成一個BFC。例子:
<p class="aside"></p> <p class="text"> <p class="main"></p> </p> <!--下面是css代碼--> .aside { margin-bottom: 100px; width: 100px; height: 150px; background: #f66; } .main { margin-top: 100px; height: 200px; background: #fcc; } .text{ /*盒子main的外面包一個p,通過改變此p的屬性使兩個盒子分屬于兩個不同的BFC,以此來阻止margin重疊*/ overflow: hidden; //此時已經觸發(fā)了BFC屬性。 }復制代碼
自動變成display:block
通過媒體查詢可以為不同大小和尺寸的媒體定義不同的css,適應相應的設備的顯示。
<link rel="stylesheet" type="text/css" href="xxx.css" media="only screen and (max-device-width:480px)">復制代碼
@media only screen and (max-device-width:480px) { /css樣式/}復制代碼
預處理器例如:LESS、Sass、Stylus,用來預編譯Sass或less,增強了css代碼的復用性,還有層級、mixin、變量、循環(huán)、函數等,具有很方便的UI組件模塊化開發(fā)能力,極大的提高工作效率。
后處理器例如:PostCSS,通常被視為在完成的樣式表中根據CSS規(guī)范處理CSS,讓其更有效;目前最常做的是給CSS屬性添加瀏覽器私有前綴,實現跨瀏覽器兼容性的問題。
CSS 預處理器為 CSS 增加一些編程的特性,無需考慮瀏覽器的兼容性問題”,例如你可以在 CSS 中使用變量、簡單的邏輯程序、函數(如右側代碼編輯器中就使用了變量$color)等等在編程語言中的一些基本特性,可以讓你的 CSS 更加簡潔、適應性更強、可讀性更佳,更易于代碼的維護等諸多好處。
其它 CSS 預處理器語言:
為什么要使用它們?
結構清晰,便于擴展。
可以方便地屏蔽瀏覽器私有語法差異。這個不用多說,封裝對瀏覽器語法差異的重復處理,減少無意義的機械勞動。
可以輕松實現多重繼承。
完全兼容 CSS 代碼,可以方便地應用到老項目中。LESS 只是在 CSS 語法上做了擴展,所以老的 CSS 代碼也可以與 LESS 代碼一同編譯。
正確使用display的屬性:由于display的作用,某些樣式組合會無效,徒增樣式體積的同時也影響解析性能。
display:inline后不應該再使用width、height、margin、padding以及float。
display:inline-block后不應該再使用float。
display:block后不應該再使用vertical-align。
display:table-*后不應該再使用margin或者float。
不濫用web字體
對于中文網站來說Web Fonts可能很陌生,國外卻很流行。web fonts通常體積龐大,而且一些瀏覽器在下載web fonts時會阻塞頁面渲染損傷性能。
-moz-border-radius: 5px; border-radius: 5px; }復制代碼
CSS選擇器的解析是從右向左解析的,為了避免對所有元素進行遍歷。若從左向右的匹配,發(fā)現不符合規(guī)則,需要進行回溯,會損失很多性能。若從右向左匹配,先找到所有的最右節(jié)點,對于每一個節(jié)點,向上尋找其父節(jié)點直到找到根元素或滿足條件的匹配規(guī)則,則結束這個分支的遍歷。兩種匹配規(guī)則的性能差別很大,是因為從右向左的匹配在第一步就篩選掉了大量的不符合條件的最右節(jié)點(葉子節(jié)點),而從左向右的匹配規(guī)則的性能都浪費在了失敗的查找上面。
而在 CSS 解析完畢后,需要將解析的結果與 DOM Tree 的內容一起進行分析建立一棵 Render Tree,最終用來進行繪圖。在建立 Render Tree 時(WebKit 中的「Attachment」過程),瀏覽器就要為每個 DOM Tree 中的元素根據 CSS 的解析結果(Style Rules)來確定生成怎樣的 Render Tree。
使用偶數字體。偶數字號相對更容易和 web 設計的其他部分構成比例關系。Windows 自帶的點陣宋體(中易宋體)從 Vista 開始只提供 12、14、16 px 這三個大小的點陣,而 13、15、17 px時用的是小一號的點。(即每個字占的空間大了 1 px,但點陣沒變),于是略顯稀疏。
◆何時應當使用margin
需要在border外側添加空白時。
空白處不需要背景(色)時。
上下相連的兩個盒子之間的空白,需要相互抵消時。如15px+20px的margin,將得到20px的空白。
◆何時應當時用padding
需要在border內測添加空白時。
空白處需要背景(色)時。
上下相連的兩個盒子之間的空白,希望等于兩者之和時。如15px+20px的padding,將得到35px的空白。
◆瀏覽器兼容性問題
在IE5.x、IE6中,為float的盒子指定margin時,左側margin可能會變成兩倍的寬度。通過改用padding或指定盒子為display:inline可以解決。
當按百分比設定一個元素的寬度時,它是相對于父容器的寬度計算的,但是,對于一些表示豎向距離的屬性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,當按百分比設定它們時,依據的也是父容器的寬度,而不是高度。
響應式網站設計(Responsive Web design)是一個網站能夠兼容多個終端,而不是為每一個終端做一個特定的版本。
基本原理是通過媒體查詢檢測不同的設備屏幕尺寸做處理。
頁面頭部必須有meta聲明的viewport。
<meta name=’viewport’ content=”width=device-width, initial-scale=1. maximum-scale=1,user-scalable=no”>復制代碼
視差滾動(Parallax Scrolling)通過在網頁向下滾動的時候,控制背景的移動速度比前景的移動速度慢來創(chuàng)建出令人驚嘆的3D效果。
:before 和 :after 這兩個偽元素,是在CSS2.1里新出現的。起初,偽元素的前綴使用的是單冒號語法,但隨著Web的進化,在CSS3的規(guī)范里,偽元素的語法被修改成使用雙冒號,成為::before ::after
注意:對于IE6/7/8僅支持單冒號表示法,而現代瀏覽器同時支持這兩種表示法。另外,在CSS3中單冒號和雙冒號的區(qū)域主要是用來區(qū)分偽類和偽元素的。
行高是指一行文字的高度,具體說是兩行文字間基線的距離。CSS中起高度作用的是height和line-height,沒有定義height屬性,最終其表現作用一定是line-height。
單行文本垂直居中:把line-height值設置為height一樣大小的值可以實現單行文字的垂直居中,其實也可以把height刪除。
多行文本垂直居中:需要設置display屬性為inline-block。
p{ font-size:10px; -webkit-transform:scale(0.8);//0.8是縮放比例 } 復制代碼
-webkit-font-smoothing 在 window 系統下沒有起作用,但是在 IOS 設備上起作用 -webkit-font-smoothing:antialiased 是最佳的,灰度平滑。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>復制代碼
多數顯示器默認頻率是60Hz,即1秒刷新60次,所以理論上最小間隔為1/60*1000ms = 16.7ms。
行框的排列會受到中間空白(回車空格)等的影響,因為空格也屬于字符,這些空白也會被應用樣式,占據空間,所以會有間隔,把字符大小設為0,就沒有空格了。
解決方法:
外層p使用position:relative;高度要求自適應的p使用position: absolute; top: 100px; bottom: 0; left: 0
頁面加載自上而下 當然是先加載樣式。
寫在 body 標簽后由于瀏覽器以逐行方式對HTML文檔進行解析,當解析到寫在尾部的樣式表(外聯或寫在 style 標簽)會導致瀏覽器停止之前的渲染,等待加載且解析樣式表完成之后重新渲染,在windows的IE下可能會出現 FOUC 現象(即樣式失效導致的頁面閃爍問題)
參數是 scroll 時候,必會出現滾動條。
參數是 auto 時候,子元素內容大于父元素時出現滾動條。
參數是 visible 時候,溢出的內容出現在父元素之外。
參數是 hidden 時候,溢出隱藏。
CSS Sprites小圖片背景共享技術。它把一堆小的圖片整合到一張大的圖片上。然后利用CSS的 background-image,background- repeat,background-position 的組合進行背景定位。利用CSS Sprites能很好地減少網頁的http請求,從而大大的提高頁面的性能;CSS Sprites能減少圖片的字節(jié)。
優(yōu)勢:
1.很好的減少網頁的請求,大大提高頁面的性能;
2.減少圖片的字節(jié);
3.解決了網頁設計師在圖片命名上的困擾;
4.更換風格方便,維護方便。
劣勢:
1.圖片合并時需預留好足夠空間,寬屏、高分辨率的屏幕下易出現背景斷裂;
2.開發(fā)較麻煩,測量繁瑣;(可使用樣式生成器)
3.維護麻煩,背景少許改動有可能影響整張圖片,使得字節(jié)增加還要改動css。
第一種回答:
偽類: :focus、:hover、:active
偽元素::before、:after
偽類本質上是為了彌補常規(guī)CSS選擇器的不足,以便獲取到更多信息;
偽元素本質上是創(chuàng)建了一個有內容的虛擬容器;
CSS3中偽類和偽元素的語法不同;
可以同時使用多個偽類,而只能同時使用一個偽元素;
第二種回答:
偽類:偽類選擇元素基于的是當前元素處于的狀態(tài),或者說元素當前所具有的特性,而不是元素的id、class、屬性等靜態(tài)的標志。由于狀態(tài)是動態(tài)變化的,所以一個元素達到一個特定狀態(tài)時,它可能得到一個偽類的樣式;當狀態(tài)改變時,它又會失去這個樣式。由此可以看出,它的功能和class有些類似,但它是基于文檔之外的抽象,所以叫偽類。
:first-child :link: :visitive :hover :active :focus :lang
偽元素:與偽類針對特殊狀態(tài)的元素不同的是,偽元素是對元素中的特定內容進行操作,它所操作的層次比偽類更深了一層,也因此它的動態(tài)性比偽類要低得多。實際上,設計偽元素的目的就是去選取諸如元素內容第一個字(母)、第一行,選取某些內容前面或后面這種普通的選擇器無法完成的工作。它控制的內容實際上和元素是相同的,但是它本身只是基于元素的抽象,并不存在于文檔中,所以叫偽元素。
:first-line :first-letter :before :after復制代碼
外部樣式表,引入一個外部css文件
內部樣式表,將css代碼放在 <head> 標簽內部
內聯樣式,將css樣式直接定義在 HTML 元素內部
最基本的:設置 display 屬性為 none,或者設置 visibility 屬性為 hidden
技巧性:設置寬高為 0,設置透明度為 0,設置 z-index 位置在 -1000
答案:解決各瀏覽器對 CSS 解釋不同所采取的,區(qū)別不同瀏覽器制作不同CSS樣式的設置就叫作 CSS Hack。
塊級元素( block )特性:
總是獨占一行,表現為另起一行開始,而且其后的元素也必須另起一行顯示;
寬度(width)、高度(height)、內邊距(padding)和外邊距(margin)都可控制;
內聯元素(inline)特性:
和相鄰的內聯元素在同一行;
寬度(width)、高度(height)、內邊距的top/bottom(padding-top/padding-bottom)和外邊距的top/bottom(margin-top/margin-bottom)都不可改變(也就是padding和margin的left和right是可以設置的)。
那么問題來了,瀏覽器還有默認的天生inline-block元素(擁有內在尺寸,可設置高寬,但不會自動換行),有哪些?
答案:<input> 、<img> 、<button> 、<textarea>。
相關文章 為何img、input等內聯元素可以設置寬高
外邊距重疊就是 margin-collapse。
在CSS當中,相鄰的兩個盒子的外邊距可以結合成一個單獨的外邊距。這種合并外邊距的方式被稱為折疊,并且因而所結合成的外邊距稱為折疊外邊距。
折疊結果遵循下列計算規(guī)則:
rgba()和opacity都能實現透明效果,但最大的不同是opacity作用于元素,以及元素內的所有內容的透明度,
而rgba()只作用于元素的顏色或其背景色。(設置rgba透明的元素的子元素不會繼承透明效果?。?/p>
垂直方向:line-height
水平方向:letter-spacing (letter-spacing 屬性增加或減少字符間的空白)
那么問題來了,關于letter-spacing的妙用知道有哪些么?
答案:可以用于消除inline-block元素間的換行符空格間隙問題。
px和em都是長度單位,區(qū)別是:px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,并且em會繼承父級元素的字體大小。
瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。
不同的瀏覽器對一些元素有不同的默認樣式,如果不處理,在不同的瀏覽器下會存在必要的風險。
你可能會用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風格,但僅提供了一套合理的默認樣式值。既能讓眾多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。
不能。它只能移動x,y軸的位置。translate3d可以。
1. CSS3實現圓角(border-radius),陰影(box-shadow),
2. 對文字加特效(text-shadow、),線性漸變(gradient),旋轉(transform)
3. transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋轉,縮放,定位,傾斜
4. 增加了更多的CSS選擇器 多背景 rgba
5. 在CSS3中唯一引入的偽元素是 ::selection.
6. 媒體查詢,多欄布局
7. border-image
功能上的差別:HTML是一種基本的WEB網頁設計語言;XHTML是一個基于XML的置標語言,XHTML可兼容各大瀏覽器、手機以及PDA,并且瀏覽器也能快速正確地編譯網頁。
書寫習慣上:
(1) XHTML 所在標簽都必須小寫
(2) XHTML 標簽必須成雙成對
(3) XHTML 標簽順序必須正確
(4) XHTML 所有屬性都必須使用雙引號
(5) 不XHTML 允許使用target=”_blank”
(6) XHTML 文檔必須擁有根元素。
(7) XHTML 元素必須被正確地嵌套。
結構層 Html 表示層 CSS 行為層 js
選擇器{屬性1:值1;屬性2:值2;……}
廢棄的元素包括:
· frame
· frameset
· noframe
· applet
· big
· center
· basefront
答:內聯,內嵌,外鏈,導入
(1)link 屬于 XHTML 標簽,除了加載 CSS 外,還能用于定義RSS,定義 rel 連接屬性等作用,無兼容性,支持使用javascript改變樣式;而@import是CSS提供的,只能用于加載CSS,不支持使用 javascript 改變樣式;
(2)頁面被加載的時,link 會被同時加載,而@import 引用的CSS會等到頁面加載完再加載;
(3)import是CSS2.1 提出的,CSS2.1以下瀏覽器不支持,只在IE5以上才能被識別,而link是XHTML標簽,無兼容問題。
主要分成兩部分:渲染引擎(layout engineer或Rendering Engine)和 JS 引擎。
(1)渲染引擎:負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,然后會輸出至顯示器或打印機。瀏覽器的內核的不同對于網頁的語法解釋會有不同,所以渲染的效果也不相同。所有網頁瀏覽器、電子郵件客戶以及其他它所需要編輯、顯示網絡的應用程序都需要內核。
(2)JS引擎則:解析和執(zhí)行JavaScript 來實現網頁的動態(tài)效果;
最開始渲染引擎和 JS 并沒有區(qū)分的很明確,后來JS引擎越來越獨立,內核就傾向于只渲染引擎。
Trident內核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等。[又稱MSHTML]
Gecko內核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等。
Presto內核:Opera7及以上。[Opera內核原為:Presto,現為:Blink;]
Webkit內核:Safari,Chrome等。[ Chrome的:Blink(WebKit的分支)]
EdgeHTML內核:Microsoft Edge。[此內核其實是從MSHTML fork而來,刪掉了幾乎所有的IE私有特性]
標簽閉合、標簽小寫、不亂嵌套、提高搜索機器人搜索幾率、使用外鏈css和js腳本、結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更廣泛的設備所訪問、更少的代碼和組件,容易維護、改版方便,不需要變動頁面內容、提供打印版本而不需要復制內容、提高網站易用性;
HTML5沒有使用SGML或者XHTML,他是一個全新的東西,因此你不需要參考DTD,對于HTML5,你僅需放置下面的文檔類型代碼告訴瀏覽器識別這是HTML5文檔
不會,瀏覽器將不能識別他是HTML文檔,同時HTML5的標簽將不能正常工作
HTML5中的Datalist元素有助于提供文本框自動完成特性,如下圖所示:
CSS列布局幫助你分割文本變?yōu)榱?,例如考慮下面的雜志新聞在一個大的文本中,但是我們需要在他們之間使用邊界劃分為3列,這里HTML5的列布局就有所幫助了
設置 background-position:center;
讓一種字體標識為斜體(oblique),如果沒有這種格式,就使用italic字體
繼承:在一個屬性應用于一個特定標簽之后,該標簽的子標簽也應該應用該屬性。這一行為稱為繼承。但并不是所有的屬性都會被繼承。如文字樣式一般都繼承,盒圖的寬高一般不 繼承,總之該繼承的都會繼承,不該繼承的都不繼承。
重用:一個樣式文件,可以多個頁面使用,這對于一些公共樣式的重構是很有用的。
答案:涉及到人手、分工、同步
(1) 先期團隊必須確定好全局樣式,編碼模式等
(2) 編寫習慣必須一致
(3) 標注樣式編寫人,各模塊都及時標注(標注關鍵樣式調用的地方)
(4) 頁面進行標注
(5) Css與html分文件夾并行存放,命名都要統一
(6) Js分文件夾存放,命名以該JS功能為準英文翻譯
(7) 圖片采用整合的.png格式文件使用,盡量整合在一起,方便將來的管理。
Word-break:break-all;
<!DOCTYPE> 聲明位于文檔中的最前面的位置,處于 <html> 標簽之前。
它不是一個 HTML 標簽,它是用來告知(聲明) Web 瀏覽器頁面使用了哪種 HTML 版本
行內元素:
(1)行內元素不換行
(2)行內元素不可以設置大小
(3)行內元素大小由內容決定
塊元素:
(1)塊元素獨立成行
(2)塊元素可以設置大小
(3)塊元素如果不設置寬度,寬度會自適應其父級的寬度
行元素:
span、img、a、lable、input、abbr(縮寫)、em(強調)、big、cite(引用)、i(斜體)、q(短引用)、textarea、select(下拉列表)、small、sub、sup,strong、u(下劃線)、button(默認display:inline-block)
從瀏覽器的顯示結果可以看出,相鄰的行內元素不換行,寬度即為內容的寬度、padding的4個方向都有效(從span標簽可以看出,對于行內非替換元素,不會影響其行高,不會撐開父元素;而對于替換元素,則會撐開父元素)、margin只有水平方向有效(其中垂直方向的margin對行內替換元素(比如img元素)有效,對行內非替換元素無效)、不可以設置width和height屬性。行內塊元素表現其實和行內元素一樣,只是其可以設置width和height屬性。
塊元素:
p、p、h2~h7、ul、ol、dl、li、dd、table、hr、blockquote、address、table、menu、pre,HTML5新增的header、section、aside、footer等
從瀏覽器的顯示結果可以看出,塊級元素新開啟一行(即使是設置了width屬性也是獨占一行)、盡可能撐滿父級元素的寬度,可以設置width和height屬性;table元素瀏覽器默認的display屬性為table。
(1) 找到對應其標簽的父級,給其父級設置 text-align : center;
(2) 將元素轉化成塊元素,設置margin : 0 auto,(必須是塊元素,而且有寬度)
加粗:
CSS:font-weight : bold
HTML :<b></b>,<strong></strong>
斜體:
CSS :font-style : italic | oblique,font-style : normal(正常的字體)
HTML :<i></i> ,<em></em>
谷歌中這樣是解釋的:
圖片底部的空隙實際上涉及行內元素的布局模型,圖片默認的垂直對齊方式是基線,而基線的位置是與字體相關的。所以在某些時候,圖片底部的空隙可能是 2px,而有時可能是 4px 或更多。不同的 font-size 應該也會影響到這個空隙的大小。
解決辦法:
最優(yōu)的解決辦是定義vertical-align,注:定義vertical-align為middle時在IE6中大概還有一像素的頂邊距,最好為top或bottom。當然還有種極端解決辦法大家可以試試就是將 父容器的字體大小為零,font-size:0
(1)轉化成(行級)塊元素
display : block復制代碼
(2)浮動,浮動后的元素默認可以轉化為塊元素(可以隨意設置寬高屬性)
float : left;復制代碼
(3)給 img 定義 vertical-align(消除底部邊距)
img{ border: 0; vertical-align: bottom; }復制代碼
(4)將其父容器的font-size 設為 0;
(5)給父標簽設置與圖片相同的高度
父級的寬度不夠,導致元素無法并排顯示;
行內樣式、內部樣式(寫一個style)、外部樣式
padding margin復制代碼
padding : 0; margin : 0;復制代碼
word-spacing : 單詞
letter-spacing : 字母、中文
text-decoration : underline | overline | line-through
list-style:none; background-image:url()復制代碼
寬度(width)
顏色(color)
線形(solid,dashed,dotted,)實線,虛線,點畫線
diaplay:block | inline-block
title :鼠標放入時提示的文字,
alt : 圖片路徑出錯時,提示文字
<meta charset="UTF-8">
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯行業(yè)資訊頻道,感謝您對創(chuàng)新互聯的支持。
網站名稱:CSS有哪些經典面試題
當前路徑:http://jinyejixie.com/article42/gpgdhc.html
成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、網頁設計公司、品牌網站建設、ChatGPT、搜索引擎優(yōu)化、網站導航
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯