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