深刻理解盒模型
//這是css理論的基石,后面很多知識基本圍繞它展開
- html元素就是一個長方形的盒子
- 完整的盒模型包括content+border+padding+margin
- 歷史原因,盒模型分為IE盒模型,w3c標準盒模型兩種類型
//區(qū)別1:IE盒模型內容是指content+border+padding;而W3C標準盒模型實際內容指的是content本身
//區(qū)別2:兩種盒模型的寬高計算方式不一樣,IE盒模型寬高指的是整個conten+border+padding盒模型范圍,W3C標準盒模型的寬高指的是content的寬高 - CSS3引入box-sizing屬性,讓元素可以在兩種盒模型之間切換
//那就意味著css盒模型對元素寬高的計算方式是可以改變的
//屬性值有content-box,border-box,inhert(繼承父元素的盒模型類型)
link和@import的區(qū)別桶雀?
(1)link屬于XHTML標簽第献,而@import是CSS提供的語法默勾。
(2)頁面被加載時,link會同時被加載胜榔,而@import引用的CSS會等到頁面被加載完再加載。
(3)import只在IE 5以上才能識別党晋,而link是XHTML標簽斧抱,無兼容問題兄朋。
(4)link方式的樣式權重高于@import的權重掐禁。
(5)使用dom控制樣式時的差別。當使用javascript控制dom去改變樣式的時候颅和,只能使用link標簽傅事,因為@import不是dom可以控制的。
CSS 選擇符有哪些峡扩?哪些屬性可以繼承蹭越?優(yōu)先級算法如何計算?CSS 3新增偽類有哪些教届?
id選擇器(# myid)
類選擇器(.myclassname)
標簽選擇器(div响鹃、h1、p)
相鄰選擇器(h1 + p)
子選擇器(ul > li)
后代選擇器(li a)
通配符選擇器( * )
屬性選擇器(a[rel = "external"])
偽類選擇器(a: hover, li: nth - child)
可繼承: font-size font-family color, UL LI DL DD DT;
不可繼承 :border padding margin width height ;
優(yōu)先級就近原則巍佑,樣式定義最近者為準茴迁,載入樣式以最后載入的定位為準寄悯。
優(yōu)先級為:
內聯(lián) > id > class > tag ...
CSS3新增偽類舉例:
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 單選框或復選框被選中怕膛。
[完整css3偽類表格](http://www.runoob.com/cssref/css-selectors.html)
如何居中div,如何居中一個浮動元素秦踪?
給div設置一個寬度褐捻,然后添加margin:0 auto屬性
div{
width:200px;
margin:0 auto;
}
如何居中一個浮動元素
確定容器的寬高,如寬500椅邓、高 300的層柠逞,設置層的外邊距
.div {
Width:500px ; height:300px;//高度可以不設
Margin: -150px 0 0 -250px;
position:relative;相對定位
background-color:pink;//方便看效果
left:50%;
top:50%;
}
經常遇到的瀏覽器的兼容性有哪些?原因景馁、解決方法是什么板壮?
(1)png24為的圖片在IE6瀏覽器上出現(xiàn)背景,解決方案是做成PNG8合住。
(2)瀏覽器默認的margin和padding不同绰精,解決方案是加一個全局的*{margin:0;padding:0;}來統(tǒng)一。
(3)IE6雙邊距bug:塊屬性標簽float后透葛,又有橫行的margin情況下笨使,在IE 6顯示margin比設置的大一也。
(4)浮動ie產生的雙邊距問題:塊級元素就加display:inline术吗;行內元素轉塊級元素display:inline后面再加display:table。
.bb{
background-color:#f1ee18; /*所有識別*/
.background-color:#00deff\9; /*IE6馁菜、7贡珊、8識別*/
+background-color:#a200ff; /*IE6最爬、7識別*/
_background-color:#1e0bd1; /*IE6識別*/
}
常用Hack的技巧:
(1)IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性门岔,也可以使用getAttribute()獲取自定義屬性爱致;
(2)Firefox下,只能使用getAttribute()獲取自定義屬性寒随。解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性糠悯。
(3)IE下,even對象有x,y屬性妻往,但是沒有pageX,pageY屬性互艾;
(4)Firefox下,event對象有pageX,pageY屬性讯泣,但是沒有x,y屬性纫普。解決方法是條件注釋,缺點是在IE瀏覽器下可能會增加額外的HTTP請求數(shù)好渠。
(5)Chrome 中文界面下默認會將小于12px的文本強制按照12px顯示昨稼,可通過加入 CSS屬性-webkit-text-size-adjust: none;來解決节视。
(6)超鏈接訪問過后hover樣式就不出現(xiàn)了 被點擊訪問過的超鏈接樣式不再具有hover和active了,解決方法是改變CSS屬性的排列順序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
列出display的值假栓,說明它們的作用寻行。position的值里,relative和absolute定位原點是匾荆?
display值//
block 像塊類型元素一樣顯示拌蜘。
none 缺省值。像行內元素類型一樣顯示牙丽。
inline-block 像行內元素一樣顯示拦坠,但其內容像塊類型元素一樣顯示。
list-item 像塊類型元素一樣顯示剩岳,并添加樣式列表標記贞滨。
position定位//
relative:生成相對定位的元素,相對于其正常位置進行定位拍棕。
absolute: 生成絕對定位的元素晓铆,相對于 static 定位以外的第一個父元素進行定位。
元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定绰播。
fixed:生成絕對定位的元素骄噪,相對于瀏覽器窗口進行定位。
元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定蠢箩。
relative:生成相對定位的元素链蕊,相對于其正常位置進行定位。
因此谬泌,"left:20" 會向元素的 LEFT 位置添加 20 像素滔韵。
static: 默認值。沒有定位掌实,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)陪蜻。
inherit:規(guī)定應該從父元素繼承 position 屬性的值。
簡單概括:
//relative參照物是元素本身默認位置
//absolute參照物是position屬性非static的父級元素,如果元素沒有已定位的父元素贱鼻,那么它的位置相對于<html>
//fixed參照物是瀏覽器窗口
為什么要初始化CSS樣式宴卖?
因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的邻悬,如果沒對CSS初始化往往會出現(xiàn)瀏覽器之間的頁面顯示差異症昏。當然,初始化樣式會對SEO有一定的影響父丰,但魚和熊掌不可兼得肝谭,但力求影響最小的情況下初始化。
最簡單的初始化方法就是:* {padding: 0; margin: 0;} (筆者不建議這樣)
淘寶的樣式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
CSS是怎樣定義權重規(guī)則的?
以下是權重的規(guī)則:標簽的權重為1分苇,class的權重為10,id的權重為100屁桑,以下例子是演示各種定義的權重值:
/*權重為1*/
div{
}
/*權重為10*/
.class1{
}
/*權重為100*/
#id1{
}
/*權重為100+1=101*/
#id1 div{
}
/*權重為10+1=11*/
.class1 div{
}
/*權重為10+10+1=21*/
.class1 .class2 div{
}
如果權重相同医寿,則最后定義的樣式會起作用,但是應該避免這種情況出現(xiàn)蘑斧。
如何理解表現(xiàn)與內容相分離靖秩?
表現(xiàn)與結構相分離簡單的說就是HTML中只有標簽元素 表現(xiàn)完全是由CSS文件控制的。
如何定義高度為1px的容器竖瘾?
div{
heigh:1px;
width:10px;
background:#000;
overflow:hidden
}
IE 6下這個問題是默認行高造成的沟突,overflow:hidden | zoom:0.08 | line- height:1px這樣也可以解決。
如何解決IE 6的3px問題捕传?
_zoom:1; margin-left: value; _margin-left: value-3px;
Firefox下文本無法撐開容器的高度惠拭,如何解決?
清除浮動 .clear{ clear:both; height:0px; overflow:hidden;}
怎么樣才能讓層顯示在Flash之上呢?
解決的辦法是給Flash設置透明屬性
<param name="wmode" value="transparent" />或者<param name="wmode" value="opaque" />
cursor:hand在FF下不顯示小手庸论,如何解決职辅?
cursor; pointer;
在IE中內容會自適應高度,而FF不會自適應高度聂示,怎么辦域携?
在要自適應高度的層中加一個層,樣式為
.clear{clear:both;font-size:0px;height:1px}鱼喉,
這樣解決有一個小小的問題秀鞭,高度會多一個像素。還有一種解決方法扛禽,給當前層加上一個偽類锋边。
#test:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
用純 CSS 創(chuàng)建一個三角形的原理是什么?
把上编曼、左宠默、右三條邊隱藏掉(顏色設為 transparent)
#demo {
width:0;
height: 0;
border-width: 20px;
border-style: solid;
border-color: transparent transparent red transparent;
}
如何設計一個滿屏“品”字布局?
簡單的方式:
上面的div寬100%灵巧,
下面的兩個div分別寬50%搀矫,
用float或inline使其不換行。
怎么讓Chrome支持小于12px 的文字刻肄?
body{-webkit-text-size-adjust:none}
前端頁面有哪三層構成瓤球,分別是什么?作用是什么敏弃?
最準確的網(wǎng)頁設計思路是把網(wǎng)頁分成三個層次卦羡,即:結構層、表示層、行為層绿饵。
網(wǎng)頁的結構層(structural layer)由HTML或XHTML之類的標記語言負責創(chuàng)建欠肾。標簽,也就是那些出現(xiàn)在尖括號里的單詞拟赊,對網(wǎng)頁內容的語義含義做出了描述刺桃,但這些標簽不包含任何關于如何顯示有關內容的信息。例如吸祟,P 標簽表達了這樣一種語義:“這是一個文本段瑟慈。”
網(wǎng)頁的表示層(presentation layer)由CSS負責創(chuàng)建屋匕。 CSS對“如何顯示有關內容”的問題做出了回答葛碧。
網(wǎng)頁的行為層(behavior layer)負責回答“內容應該如何對事件做出反應”這一問題。這是JavaScript語言和DOM主宰的領域过吻。
::before 和 :after中雙冒號和單冒號 有什么區(qū)別进泼?解釋一下這2個偽元素的作用。
單冒號(:)用于CSS3偽類纤虽,雙冒號(::)用于CSS3偽元素缘琅。
偽元素由雙冒號和偽元素名稱組成。雙冒號是在css3規(guī)范中引入的廓推,用于區(qū)分偽類和偽元素刷袍。但是偽類兼容現(xiàn)存樣式,瀏覽器需要同時支持舊的偽類樊展,比如:first-line呻纹、:first-letter、:before专缠、:after等雷酪。
對于CSS2之前已有的偽元素,比如:before涝婉,單冒號和雙冒號的寫法::before作用是一樣的哥力。
提醒,如果你的網(wǎng)站只需要兼容webkit墩弯、firefox吩跋、opera等瀏覽器,建議對于偽元素采用雙冒號的寫法渔工,如果不得不兼容IE瀏覽器锌钮,還是用CSS2的單冒號寫法比較安全。
現(xiàn)在HTML5中css3可以寫出一個旋轉的立方體引矩,請寫出要用到的CSS屬性梁丘。
-webkit-transform-style: preserve-3d;
-webkit-transform: rotateY(30deg) rotateX(10deg);
-webkit-animation: rot 4s linear infinite;
介紹一下 Sass 和 Less 是什么侵浸?它們有何區(qū)別?
Sass (Syntactically Awesome Stylesheets)是一種動態(tài)樣式語言氛谜,語法跟css一樣(但多了些功能)掏觉,比css好寫,而且更容易閱讀值漫。Sass語法類似與Haml澳腹,屬于縮排語法(makeup),用意就是為了快速寫Html和Css惭嚣。
Less一種動態(tài)樣式語言. 將CSS賦予了動態(tài)語言的特性遵湖,如變量悔政,繼承晚吞,運算, 函數(shù). LESS 既可以在客戶端上運行 (支持IE 6+, Webkit, Firefox)谋国,也可一在服務端運行 (借助 Node.js)槽地。
區(qū)別:
(1))Sass是基于Ruby的,是在服務端處理的芦瘾,而Less是需要引入less.js來處理Less代碼輸出Css到瀏覽器捌蚊,也可以在開發(fā)環(huán)節(jié)使用Less,然后編譯成Css文件近弟,直接放到項目中缅糟,也有Less.app、SimpleLess祷愉、CodeKit.app這樣的工具窗宦,也有在線編譯地址。
(2)變量符不一樣二鳄,less是@赴涵,而Scss是$,而且變量的作用域也不一樣订讼,后面會講到髓窜。
(3)輸出設置,Less沒有輸出設置欺殿,Sass提供4中輸出選項:nested, compact, compressed 和 expanded寄纵。
(4)Sass支持條件語句,可以使用if{}else{},for{}循環(huán)等等脖苏。而Less不支持擂啥。
常見ie6的瀏覽器兼容bug(3-5個)?
- 文字本身的大小不兼容帆阳。
同樣是font-size:14px的宋體文字哺壶,在不同瀏覽器下占的空間是不一樣的屋吨,ie下實際占高16px,下留白3px山宾,ff 下實際占高17px至扰,上留白1px,下留白3px资锰,opera下就更不一樣了敢课。解決方案:給文字設定 line-height 。確保所有文字都有默認的 line-height 值绷杜。 - IE6吞吃現(xiàn)象直秆。
上下兩個div,上面的div設置背景鞭盟,卻發(fā)現(xiàn)下面沒有設置背景的div 也有了背景圾结,這就是吞吃現(xiàn)象。對應上面的背景吞吃現(xiàn)象齿诉,還有滾動下邊框缺失的現(xiàn)象筝野。解決方案:使用zoom:1。這個zoom好象是專門為解決ie6 bug而生的粤剧。 - IE6注釋bug
注釋也能產生bug~~~“多出來的一只豬歇竟。”這是前人總結這個bug使用的文案抵恋,ie6的這個bug 下焕议,大家會在頁面看到豬字出現(xiàn)兩遍,重復的內容量因注釋的多少而變弧关。
解決方案:用“<!–[if !IE]> picRotate start <![endif]–>”方法寫注釋盅安。 - img 下的留白,如下代碼:
<div>
<img src=“1.jpg” />
</div>
把div的border打開梯醒,你發(fā)現(xiàn)圖片底部不是緊貼著容器底部的宽堆,是img后面的空白字符造成,要消除必須這樣寫
<div>
<img src=”1.jpg” /></div>
后面兩個標簽要緊挨著茸习。ie7下這個bug 依然存在畜隶。解決方案:給img設定 display:block。 - 失去line-height
<div style=”line-height:20px”><img />文字</div>号胚,很遺憾籽慢,在ie6下單行文字 line-height 效果消失了。原因是<img />這個inline-block元素和inline元素寫在一起了猫胁。
解決方案:讓img 和文字都 float起來箱亿。 - clear層應該單獨使用。也許你為了節(jié)省代碼把clear屬性直接放到下面的一個內容層弃秆,這樣有問題届惋,不僅僅是ff和op下失去margin效果髓帽,ie下某些margin值也會失效。
<div style=”background:red;float:left;”>dd</div>
<div style=”clear:both;margin-top:18px;background:green”>ff</div> - ie 下overflow:hidden對其下的絕對層position:absolute或者相對層 position:relative無效脑豹。
解決方案:給overflow:hidden加position:relative或者position: absolute郑藏。
另,ie6支持overflow-x或者overflow-y的特性瘩欺,ie7必盖、ff不支持。
css背景屬性
background-color
background-image
background-repeat(背景平鋪設置)
//默認情況下 background-image 屬性會在頁面的水平或者垂直方向平鋪俱饿。一些圖像如果在水平方向與垂直方向平鋪歌粥,這樣看起來很不協(xié)調
//所以需要這個屬性來限制
background-attachment
//background-attachment:fixed;主要用來定位背景圖片
background-position
//對于背景圖片位置有要求就使用該屬性,默認只展示一次,默認阻止平鋪屬性