IE: trident核心
Firefox:gecko內核
Safari:webkit內核
Opera:以前是presto內核,Opera現已改用Google Chrome的Blink內核
Chrome:Blink(基於webkit,Google與Opera Software共同開發)
聲明位於文件中的最前面的位置,在 標籤之前。此標籤可告知瀏覽器文件使用哪一種 HTML 或 XHTML 規格。 (重點:告訴瀏覽器依照何種規範解析頁)
從IE6開始,引入了Standards模式,在標準模式中,瀏覽器嘗試給予符合標準的文件在規範上的正確處理達到在指定瀏覽器中的程度。
在IE6之前CSS還不夠成熟,所以IE5等之前的瀏覽器對CSS的支持很差, IE6將對CSS提供更好的支持,然而這時的問題就來了,因為有很多頁面是基於舊的版面方式寫的,而如果IE6 支援CSS則將令這些頁面顯示不正常,如何在即保證不破壞現有頁面,又提供新的渲染機制呢?
在寫程式時我們也會常常遇到這樣的問題,如何確保原來的介面不變,又提供更強大的功能,尤其是新功能不相容舊功能時。遇到這種問題時的一個常見做法是增加參數和分支,即當某個參數為真時,我們就使用新功能,而如果這個參數 不為真時,就使用舊功能,這樣就能不破壞原有的程序,又提供新功能。 IE6也是類似這樣做的,它將DTD當成了這個“參數”,因為以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將採用對CSS支持更好的佈局,而如果沒有,則採用相容之前的佈局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。
區別:
總體會有佈局、樣式解析和腳本執行三個方面的區別。
盒模型:在W3C標準中,如果設定一個元素的寬度和高度,指的是元素內容的寬度和高度,而在Quirks 模式下,IE的寬度和高度也包含了padding和border。
設定行內元素的高寬:在Standards模式下,給等行內元素設定wdith和height都不會生效,而在quirks模式下,則會生效。
設定百分比的高度:在standards模式下,一個元素的高度是由其包含的內容來決定的,如果父元素沒有設定百分比的高度,子元素設定一個百分比的高度是無效的用margin:0 auto設置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。
(還有很多,答出什麼不重要,關鍵是看他答出的這些是不是自己經驗遇到的,還是說都是看文章看的,甚至完全不知道。)
改版的時候更方便 只要改css檔。
頁面載入速度更快、結構化清晰、頁面顯示簡潔。
表現與結構相分離。
易於優化(seo)搜尋引擎更友好,排名更容易靠前。
a:alt(alt text):為無法顯示影像、表單或applets的使用者代理程式(UA),alt屬性用來指定替換文字。替換文字的語言由lang屬性指定。 (在IE瀏覽器下方會在沒有title時把alt當成 tool tip顯示)
title(tool tip):此屬性為設定該屬性的元素提供建議性的資訊。
strong:粗體強調標籤,強調,表示內容的重要性
em:斜體強調標籤,更強烈強調,表示內容的強調點
漸進增強 progressive enhancement:針對低版瀏覽器進行建置頁面,確保最基本的功能,然後再針對進階瀏覽器進行效果、互動等改進和追加功能達到更好的使用者體驗。
優雅降級 graceful degradation:一開始就建立完整的功能,然後再針對低版本瀏覽器進行相容。
區別:優雅降級是從複雜的現狀開始,並試圖減少使用者體驗的供給,而漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要。降級(功能衰減)意味著往回看;而漸進增強則意味著朝前看,同時確保其根基處於安全地帶。
「優雅降級」觀點
「優雅降級」觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為「過時」或有功能缺失的瀏覽器下的測試工作安排在開發週期的最後階段,並將測試對象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。
在這個設計範例下,舊版的瀏覽器被認為只能提供「簡陋卻無妨 (poor, but passable)」 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由於它們並非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。
「漸進增強」觀點
「漸進增強」觀點則認為應著重於內容本身。
內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得「漸進增強」成為更合理的設計範例。這也是它立即被 Yahoo! 所採納並用以建構其「分級式瀏覽器支援 (Graded Browser Support)」策略的原因。
那麼問題來了。現在產品經理看到IE6,7,8網頁效果相對高版本現代瀏覽器少了很多圓角,陰影(CSS3),要求相容(使用圖片背景,放棄CSS3),你會如何說服他?
CDN快取更方便
突破瀏覽器並發限制
節約cookie頻寬
節約主網域的連線數,最佳化頁面回應速度
防止不必要的安全問題
網頁標準和標準制定機構都是為了能讓web發展的更'健康',開發者遵循統一的標準,降低開發難度,開發成本,SEO也會更好做,也不會因為濫用代碼導致各種BUG、安全性問題,最終提高網站易用性。
sessionStorage用於本地存儲一個會話(session)中的數據,這些數據只有在同一個會話中的頁面才能訪問並且當會話結束後數據也隨之銷毀。因此sessionStorage不是持久的本機存儲,只是會話層級的儲存。而localStorage用於持久化的本地存儲,除非主動刪除數據,否則數據是永遠不會過期的。
web storage和cookie的差別
Web Storage的概念和cookie相似,差異是它是為了更大容量儲存設計的。 Cookie的大小是受限的,每次你要求一個新的頁面的時候Cookie都會被發送過去,這樣無形中浪費了頻寬,另外cookie還需要指定作用域,不可以跨域呼叫。
除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺少的:Cookie的作用是與伺服器進行交互,作為HTTP規範的一部分而存在 ,而Web Storage只是為了在本地「儲存」資料而生。
src用於替換目前元素,href用於在目前文件和引用資源之間確立聯繫。
src是source的縮寫,指向外部資源的位置,指向的內容將會嵌入到文件中目前標籤所在位置;在請求src資源時會將其指向的資源下載並套用到文件內,例如js腳本,img圖片和frame等元素。
<script></script>
當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js腳本放在底部而不是頭部。
href是Hypertext Reference的縮寫,指向網絡資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的鏈接,如果我們在文檔中添加
那麼瀏覽器會識別該文檔為css文件,就會並行下載資源並且不會停止對當前文檔的處理。這也是為什麼建議使用link方式來載入css,而不是使用@import方式。
png-8,png-24,jpeg,gif,svg。
但是上面的那些都不是面試官想要的最後答案。面試官希望聽到是Webp。 (是否有關注新技術,新鮮事物)
科普一下Webp:WebP格式,Google(google)開發的一種旨在加快圖片載入速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,並能節省大量的伺服器頻寬資源和資料空間。 Facebook Ebay等知名網站已經開始測試並使用WebP格式。
在質量相同的情況下,WebP格式影像的體積比JPEG格式影像小40%
微格式(Microformats)是一種讓機器可讀的語意化XHTML詞彙的集合,是結構化資料的開放標準。是為特殊應用而製定的特殊格式。
優點:將智慧資料加入網頁上,讓網站內容在搜尋引擎結果介面可以顯示額外的提示。 (應用範例:豆瓣,有興趣自行google)
答案:dns緩存,cdn緩存,瀏覽器緩存,伺服器緩存。
圖片懶加載,在頁面上的未可視區域可以添加一個滾動條事件,判斷圖片位置與瀏覽器頂端的距離與頁面的距離,如果前者小於後者,優先加載。
如果為投影片、相簿等,可以使用圖片預先載入技術,將目前展示圖片的前一張和後一張優先下載。
如果圖片為css圖片,可以使用CSSsprite,SVGsprite,Iconfont、Base64等技術。
如果圖片過大,可以使用特殊編碼的圖片,載入時會先載入一張壓縮的特別厲害的縮圖,以提高使用者體驗。
如果圖片展示區域小於圖片的真實大小,則因在伺服器端依業務需求先行進行圖片壓縮,圖片壓縮後大小與展示一致。
去掉或樣式遺失的時候能讓頁面呈現清晰的結構:
html本身是沒有表現的,我們看到例如
螢幕閱讀器(如果訪客有視障)會完全根據你的標記來「讀」你的網頁.
例如,如果你使用的含語義的標記,屏幕閱讀器就會“逐個拼出”你的單字,而不是試著去對它完整發音.
PDA、手機等設備可能無法像普通電腦的瀏覽器一樣來渲染網頁(通常是因為這些設備對CSS的支援較弱)
使用語義標記可以確保這些設備以一種有意義的方式來渲染網頁.理想情況下,觀看設備的任務是符合設備本身的條件來渲染網頁.
語義標記為設備提供了所需的相關信息,就省去了你自己去考慮所有可能的顯示情況(包括現有的或者將來新的設備).例如,一部手機可以選擇使一段標記了標題的文字以粗體顯示.而掌上電腦可能會以比較大的字體來顯示.無論哪種方式一旦你對文本標記為標題,您就可以確信讀取設備將根據其自身的條件來合適地顯示頁面.
搜尋引擎的爬蟲也依賴標記來確定上下文和個別關鍵字的權重
過去你可能還沒有考慮搜尋引擎的爬蟲也是網站的「訪客」,但現在它們他們實際上是極其寶貴的用戶.沒有他們的話,搜尋引擎將無法索引你的網站,然後一般用戶將很難過來訪問.
你的頁面是否對爬蟲容易理解非常重要,因為爬蟲很大程度上會忽略用於表現的標記,而只注重語義標記.
因此,如果頁面文件的標題被標記,而不是,那麼這個頁面在搜索結果的位置可能會比較靠後.除了提升易用性外,語義標記有利於正確使用CSS和JavaScript,因為其本身提供了許多「鉤鉤」來應用頁面的樣式與行為.
SEO主要還是靠你網站的內容和外部連結的。
便於團隊開發與維護
W3C為我們設定了一個很好的標準,在團隊中大家都遵循這個標準,可以減少很多差異化的東西,方便開發和維護,提高開發效率,甚至實現模組化開發。
了解搜尋引擎如何抓取網頁和如何索引網頁
你需要知道一些搜尋引擎的基本工作原理,各個搜尋引擎之間的區別,搜尋機器人(SE robot 或叫 web crawler)如何進行工作,搜尋引擎如何對搜尋結果進行排序等等。
Meta標籤優化
主要包括主題(Title),網站描述(Description),和關鍵字(Keywords)。還有一些其它的隱藏文字如Author(作者),Category(目錄),Language(編碼語種)等。
如何選取關鍵字並在網頁中放置關鍵字
搜尋就得用關鍵字。關鍵字分析和選擇是SEO最重要的工作之一。首先要為網站確定主關鍵字(一般在5個上下),然後針對這些關鍵字進行最佳化,包括關鍵字密度(Density),相關度(Relavancy),突出性(Prominency)等等。
了解主要的搜尋引擎
雖然搜尋引擎很多,但是對網站流量起決定作用的就那麼幾個。例如英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不同的搜尋引擎對頁面的抓取和索引、排序的規則都不一樣。也要了解各搜尋入口網站和搜尋引擎的關係,例如AOL網頁搜尋用的是Google的搜尋技術,MSN用的是Bing的技術。
主要的互聯網目錄
Open Directory本身不是搜尋引擎,而是一個大型的網站目錄,他和搜尋引擎的主要差異是網站內容的收集方式不同。目錄是手動編輯的,主要收錄網站主頁;搜尋引擎是自動收集的,除了主頁外還抓取大量的內容頁面。
按點擊付費的搜尋引擎
搜尋引擎也需要生存,隨著網路商務的越來越成熟,收費的搜尋引擎也開始大行其道。最典型的有Overture和百度,當然也包括Google的廣告項目Google Adwords。越來越多的人透過搜尋引擎的點擊廣告來定位商業網站,這裡面也大有優化和排名的學問,你得學會用最少的廣告投入獲得最多的點擊。
搜尋引擎登入
網站做完了以後,別躺在那裡等著客人從天而降。要讓別人找到你,最簡單的方法就是將網站提交(submit)到搜尋引擎。如果你的是商業網站,主要的搜尋引擎和目錄都會要求你付費來獲得收錄(例如Yahoo要299美元),但是好消息是(至少到目前為止)最大的搜尋引擎Google目前還是免費,而且它主宰著60%以上的搜尋市場。
交換連結與連結廣泛度(Link Popularity)
網頁內容都是以超文本(Hypertext)的方式來互相連結的,網站之間也是如此。除了搜尋引擎以外,人們也每天透過不同網站之間的連結來Surfing(「衝浪」)。其它網站到你的網站的連結越多,你就會獲得更多的訪問量。更重要的是,你的網站的外部連結數越多,會被搜尋引擎認為它的重要性越大,從而給你更高的排名。
合理的標籤使用
外部樣式表,引入一個外部css檔案
內部樣式表,將css程式碼放在
標籤內部內嵌樣式,將css樣式直接定義在 HTML 元素內部
派生選擇器(以HTML標籤申明)
id選擇器(用DOM的ID申明)
類選擇器(用一個樣式類別名稱申明)
屬性選擇器(用DOM的屬性申明,屬於CSS2,IE6不支持,不常用,不知道就算了)
除了前3種基本選擇器,還有一些擴充選擇器,包括
後代選擇者(利用空格間隔,如div .a{ })
群組選擇器(利用逗號間隔,如p,div,#a{ })
那麼問題來了,CSS選擇器的優先權是怎麼樣定義的?
基本原則:
一般而言,選擇器越特殊,它的優先權越高。也就是選擇器指向的越準確,它的優先權就越高。
複雜的計算方法:
用1表示派生選擇器的優先權
用10表示類別選擇器的優先權
用100標示ID選擇器的優先權
div.test1 .span var 優先級 1+10 +10 +1
span#xxx .songs li 優先權1+100 + 10 + 1
#xxx li 優先權 100 +1
那麼問題來了,看下列程式碼,
標籤內的文字是什麼顏色的?
.classA{ color:blue;}
.classB{ color:red;}
123
答案:red。與樣式定義在檔案中的先後順序有關,即是後面的覆蓋前面的,與在
中的先後關係無關。
最基本的:
設定display屬性為none,或是設定visibility屬性為hidden
技巧性:
設定寬高為0,設定透明度為0,設定z-index位置在-1000
答案:被點擊訪問過的超連結樣式不在具有hover和active了,解決方法是改變CSS屬性的排列順序: L-V-H-A(link,visited,hover,active)
答案:針對不同的瀏覽器寫出不同的CSS code的過程,就是CSS hack。
範例如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
#test { width:300px; height:300px; background-color:blue; /*firefox*/ background-color:red9; /*all ie*/ background-color:yellow; /*ie8*/ +background-color:pink; /*ie7*/ _background-color:orange; /*ie6*/ } :root #test { background-color:purple9; } /*ie9*/ @media all and (min-width:0px){ #test {background-color:black;} } /*opera*/ @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} } /*chrome and safari*/ |
答案:知道是要用css3。使用animation動畫實現一個簡單的幻燈片效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/**HTML**/ div.ani /**CSS**/ .ani{ width:480px; height:320px; margin:50px auto; overflow: hidden; box-shadow:0 0 5px rgba(0,0,0,1); background-size: cover; background-position: center; -webkit-animation-name: "loops"; -webkit-animation-duration: 20s; -webkit-animation-iteration-count: infinite; } @-webkit-keyframes "loops" { 0% { 地b02087af4f4d3.jpg) no-repeat; } 25% { 地cd98c109dd0.jpg) no-repeat; } 50% { background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfdeded1be2353862562586256251 9b033b5bb5b912.jpg) no-repeat; } 75% { background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544ebbef86d71536 da3cc7cd99e4b.jpg) no-repeat; } 100% { 地f2b21192138ad1.jpg) no-repeat; } } |
塊級元素(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元素(擁有內在尺寸,可設定高寬,但不會自動換行),有哪些?
答案: 、 、
外邊距重疊就是margin-collapse。
在CSS當中,相鄰的兩個盒子(可能是兄弟關係也可能是祖先關係)的外邊距可以結合成一個單獨的外邊距。這種合併外邊距的方式稱為折疊,因而結合成的外邊距稱為折疊外邊距。
摺疊結果遵循下列計算規則:
兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值。
兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值。
兩個外邊距一正一負時,折疊結果是兩者的相加的和。
rgba()和opacity都能實現透明效果,但最大的不同是opacity作用於元素,以及元素內的所有內容的透明度,
而rgba()只作用於元素的顏色或其背景色。 (設定rgba透明的元素的子元素不會繼承透明效果!)
垂直方向:line-height
水平方向:letter-spacing
那麼問題來了,關於letter-spacing的妙用知道有哪些麼?
答案:可以用來消除inline-block元素間的換行符空格間隙問題。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// 方法一:已知元素的高寬 #div1{ background-color:#6699FF; width:200px; height:200px; position: absolute; //父元素需相對定位 top: 50%; left: 50%; margin-top:-100px ; //二分之一的height,width margin-left: -100px; }
//方法二:未知元素的高寬
#div1{ width: 200px; height: 200px; background-color: #6699FF;
margin:auto; position: absolute; //父元素需相對定位 left: 0; top: 0; right: 0; bottom: 0; } |
那么问题来了,如何垂直居中一个?(用更简便的方法。)
1 2 3 4 5 6 |
#container //的容器设置如下 { display:table-cell; text-align:center; vertical-align:middle; } |
px和em都是長度單位,差別是,px的值是固定的,指定是多少就是多少,計算比較容易。 em得值不是固定的,並且em會繼承父級元素的字體大小。
瀏覽器的預設字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。則12px=0.75em, 10px=0.625em。
重置樣式非常多,凡是一個前端開發人員肯定有一個常用的重置CSS檔案並知道如何使用它們。他們是盲目的在做還是知道為什麼要這麼做呢?原因是不同的瀏覽器對某些元素有不同的預設樣式,如果你不處理,在不同的瀏覽器下會存在必要的風險,或是更戲劇性的性發生。
你可能會用Normalize來取代你的重置樣式檔。它沒有重置所有的樣式風格,但僅提供了一套合理的預設樣式值。既能讓眾多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。
在這一方面,無法做每一個重設重置。它也確實有些超過一個重置,它處理了你永遠都不用考慮的怪癖,像HTML的audio元素不一致或line-height不一致。
他們是CSS預處理器。他是CSS上的一種抽象層。他們是一種特殊的語法/語言編譯成CSS。
例如Less是一種動態樣式語言. 將CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. LESS 既可以在客戶端上運行(支持IE 6+, Webkit, Firefox),也可一在服務端運行(借助Node.js)。
為什麼要使用它們?
結構清晰,方便擴充。
可以方便地屏蔽瀏覽器私有語法差異。這個不用多說,封裝對瀏覽器語法差異的重複處理,減少無意義的機械勞動。
可以輕鬆實現多重繼承。
完全相容於 CSS 程式碼,可以方便地應用到舊專案中。 LESS 只是在 CSS 語法上做了擴展,所以舊的 CSS 程式碼也可以跟 LESS 程式碼一同編譯。
display : 隱藏對應的元素但不擠佔該元素原來的空間。
visibility: 隱藏對應的元素並且擠佔該元素原來的空間。
即是,使用CSS display:none屬性後,HTML元素(物件)的寬度、高度等各種屬性值都會「遺失」;而使用visibility:hidden屬性後,HTML元素(物件)只是在視覺上看不見(完全透明),而它所佔據的空間位置仍然存在。
Link屬於html標籤,而@import是CSS中提供的
在頁面加載的時候,link會同時被加載,而@import引用的CSS會在頁面加載完成後才會加載引用的CSS
@import只有在ie5以上才可以被識別,而link是html標籤,不存在瀏覽器相容性問題
Link引入樣式的權重大於@import的引用(@import是將引用的樣式導入到目前的頁面中)
CSS的盒子模型有兩種:IE盒子模型、標準的W3C盒子模型模型
盒模型:內容、內邊距、外邊距(一般不計入盒子實際寬度)、邊框
由於瀏覽器相容的問題,不同的瀏覽器對標籤的預設樣式值不同,若不初始化會造成不同瀏覽器之間的顯示差異
但是初始化CSS會對搜尋引擎最佳化造成小影響
BFC(區塊級格式化上下文),一個創建了新的BFC的盒子是獨立佈局的,盒子內元素的佈局不會影響盒子外面的元素。在同一個BFC中的兩個相鄰的盒子在垂直方向發生margin重疊的問題
BFC是指瀏覽器中創建了一個獨立的渲染區域,該區域內所有元素的佈局不會影響到區域外元素的佈局,這個渲染區域只對區塊級元素起作用
當頁面樣式載入失敗的時候能夠讓頁面呈現出清晰的結構
有利於seo優化,利於被搜尋引擎收錄(更便於搜尋引擎的爬蟲程式來辨識)
便於專案的開發與維護,讓html程式碼更具可讀性,便於其他裝置解析。
用於告知瀏覽器該以何種模式來渲染文件
嚴格模式下:頁面排版及JS解析是以此瀏覽器支援的最高標準來執行
混雜模式:不嚴格依照標準執行,主要用來相容舊的瀏覽器,向後相容
1. 所有的標記都必須要有一個對應的結束標記
2. 所有標籤的元素和屬性的名字都必須使用小寫
3. 所有的 XML 標記都必須合理嵌套
4. 所有的屬性必須用引號 "" 括起來
5. 把所有
6. 將所有屬性賦一個值
7. 不要在註解內容中使用 "--"
8. 圖片必須有說明文字
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.IE5-8不支援opacity,解決方法:
.opacity {
opacity: 0.4
filter: alpha(opacity=60); /* for IE5-7 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/
}
10. IE6不支援PNG透明背景,解決方法: IE6下使用gif圖片
答:標籤閉合、標籤小寫、不亂嵌套、提高搜尋機器人搜尋幾率、使用外鏈css和js腳本、結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所存取、內容能被更廣泛的設備所存取、更少的程式碼和元件,容易維護、改版方便,不需要變動頁面內容、提供列印版本而不需要複製內容、提高網站易用性。
答:區塊級元素:div p h1 h2 h3 h4 form ul
行內元素: a b br i span input select
Css盒子模型:內容,border ,margin,padding
答:結構層 Html 表示層 CSS 行為層 js。
(1)、 聲明位於文件中的最前面,在 標籤之前。告知瀏覽器的解析器,用什麼文件類型 規格來解析這個文件。
(2)、嚴格模式的排版和 JS 運作模式是 以此瀏覽器支援的最高標準運作。
(3)、在混雜模式中,頁面以寬鬆的向後相容的方式顯示。模擬老式瀏覽器的行為以防止網站無法運作。
(4)、DOCTYPE不存在或格式不正確會導致文件以混雜模式呈現。
(1)CSS規範規定,每個元素都有display屬性,確定該元素的類型,每個元素都有預設的display值,例如div預設display屬性值為“block”,成為“區塊級”元素; span預設display屬性值為“inline”,是“行內”元素。
(2)行內元素有:a b span img input select strong(強調的語氣) 區塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)知名的空元素:
(1)兩種, IE 盒子模型、標準 W3C 盒子模型;IE 的content部分包含了 border 和 pading;
(2)盒模型: 內容(content)、填入(padding)、邊界(margin)、 邊框(border).
* 1.id選擇器( # myid)
2.類別選擇器(.myclassname)
3.標籤選擇器(div, h1, p)
4.鄰近選擇器(h1 + p)
5.子選擇器(ul
6.後代選擇者(li a)
7.通配符選擇器( * )
8.屬性選擇器(a[rel = "external"])
9.偽類選擇器(a: hover, li: nth - child)
* 可繼承: font-size font-family color, UL LI DL DD DT;
* 不可繼承 :border padding margin width height ;
* 優先順序就近原則,樣式定義最近者為準;
* 載入樣式以最後載入的定位為準;
優先權為:
!important > id > class > tag
important 比 內嵌優先順序高
CSS3新增偽類舉例:
p:first-of-type 選擇屬於其父元素的首個
元素的每個
元素。
p:last-of-type 選擇屬於其父元素的最後
元素的每個
元素。
p:only-of-type 選擇屬於其父元素唯一的
元素的每個
元素。
p:only-child 選擇屬於其父元素的唯一子元素的每個
元素。
p:nth-child(2) 選擇屬於其父元素的第二個子元素的每個
元素。
:enabled、:disabled 控製表單控制項的停用狀態。
:checked,單選方塊或複選框被選取。
給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%;
}
* IE瀏覽器的核心Trident、 Mozilla的Gecko、google的WebKit、Opera核心Presto;
* png24為的圖片在iE6瀏覽器上出現背景,解答是做成PNG8.
* 瀏覽器預設的margin和padding不同。解是加一個全域的*{margin:0;padding:0;}來統一。
* IE6雙邊距bug:區塊屬性標籤float後,又有橫行的margin情況下,在ie6顯示margin比設定的大。
浮動ie產生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}
此情況之下IE會產生20px的距離,解決方案是在float的標籤樣式控制中加入 ——_display:inline;將其轉換為行內屬性。 (_這個符號只有ie6會辨識)
漸進辨識的方式,從整體逐漸排除局部。
首先,巧妙的使用「9」這個標記,將IE遊覽器從所有情況中分離出來。
接著,再次使用「+」將IE8和IE7、IE6分離開來,讓IE8已經獨立辨識。
css
.bb{
background-color:#f1ee18;/*所有辨識*/
.background-color:#00deff9; /*IE6、7、8辨識*/
+background-color:#a200ff;/*IE6、7辨識*/
_background-color:#1e0bd1;/*IE6辨識*/
}
* IE下,可以使用取得常規屬性的方法來取得自訂屬性,
也可使用getAttribute()來取得自訂屬性;
Firefox下,只能使用getAttribute()來取得自訂屬性.
解法:統一透過getAttribute()取得自訂屬性.
* IE下,even物件有x,y屬性,但是沒有pageX,pageY屬性;
Firefox下,event物件有pageX,pageY屬性,但是沒有x,y屬性.
* (條件註解)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。
* Chrome 中文介面預設會將小於 12px 的文字強制依照 12px 顯示, 可透過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.
超連結造訪過後hover樣式就不出現了 被點擊訪問過的超連結樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
1. block 象塊類型元素一樣顯示。
none 缺省值。向行內元素類型一樣顯示。
inline-block 象行內元素一樣顯示,但其內容象塊類型元素一樣顯示。
list-item 象塊類型元素一樣顯示,並新增樣式清單標記。
2. position的值
*absolute
產生絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。
*fixed (老IE不支援)
產生絕對定位的元素,並相對於瀏覽器視窗進行定位。
* relative
產生相對定位的元素,相對於其正常位置進行定位。
* static 預設值.沒有定位,元素出現在正常的流中
*(忽略 top, bottom, left, right z-index 聲明)。
* inherit 規定從父元素繼承 position 屬性的值。
標籤閉合、標籤小寫、不亂嵌套、提高搜尋機器人搜尋幾率、使用外 鏈css和js腳本、結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更廣泛的設備所訪問、更少的代碼和組件,容易維 護、改版方便,不需要變動頁面內容、提供列印版本而不需要複製內容、提升網站易用性;
選擇器{屬性1:值1;屬性2:值2;……}
盒子模型 渲染模式的不同
使用 window.top.document.compatMode 可顯示為何模式
最基本的:
設定display屬性為none,或設定visibility屬性為hidden
技巧性:
設定寬高為0,設定透明度為0,設定z-index位置在-1000
答案:被點擊訪問過的超連結樣式不在具有hover和active了,解決方法是改變CSS屬性的排列順序: L-V-H-A(link,visited,hover,active)
答案:針對不同的瀏覽器寫不同的CSS code的過程,就是CSS hack。
範例如下:
#test {
width:300px;
height:300px;
background-color:blue; /*firefox*/
background-color:red9; /*all ie*/
background-color:yellow
+background-color:pink; /*ie7*/_background-color:orange; /*ie6*/ }
:root #test { background-color:purple9; } /*ie9*/
@media all and (min-width:0px){ #test {background-color:black
@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} } /*chrome and safari*/
62/**HTML**/
div.ani
/**CSS**/
.ani{
width:480px;
height:320px;
margin:50px auto;
overflow: hidden;
box-shadow:0 0 5px rgba(0,0,0,1);
background-size: cover;
background-position: center;
-webkit-animation-name: "loops";
-webkit-animation-duration: 20s;
-webkit-animation-iteration-count: infinite;
}
@-webkit-keyframes "loops" {
0% { background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6adca964034f0fcdc3069fc27980/e824b899a9014c08e5e38ca4087b02087g. no-repeat;
}
25% {
background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1572e9f81a4c2632edc9e72b6029/30adcbef76094b364d72bceba1cc no-repeat;
}
50% {
background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be2353266255/d8f9d72a6059252d258e7605369b033bb) no-repeat;
}
75% {
3cc7cd99e4b.jpg) no-repeat;
}
100% {
background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb239ceb0fb43161a1f7b7a10a54642/3b87e950352ac65ce2e73f76f9f2b87e950352ac65ce2e73f76f9f2b812121212121252121212521221212025) no-repeat;
}
}
63總是獨佔一行,表現為另起一行開始,而且其後的元素也必須另起一行顯示;
那麼問題來了,瀏覽器還有預設的天生inline-block元素(擁有內在尺寸,可設定高寬,但不會自動換行),有哪些? 答: 、 、 答案: 外邊距重疊就是margin-collapse。 在CSS當中,相鄰的兩個盒子(可能是兄弟關係也可能是祖先關係)的外邊距可以結合成一個單獨的外邊距。這種合併外邊距的方式稱為折疊,因而結合成的外邊距稱為折疊外邊距。 摺疊結果遵循下列計算規則: rgba()和opacity都能實現透明效果,但最大的不同是opacity作用於元素,以及元素內的所有內容的透明度, 而rgba()只作用於元素的顏色或其背景色。 (設定rgba透明的元素的子元素不會繼承透明效果!) 垂直方向:line-height 水平方向:letter-spacing 那麼問題來了,關於letter-spacing的妙用知道有哪些麼? 答案:可以用來消除inline-block元素間的換行符空格間隙問題。 // 方法一:已知元素的高寬 #div1{ background-color:#6699FF; width:200px; height:200px; position: absolute; //父元素需相對定位 top: 50%; left: 50%; margin-top:-100px ; //二分之一的height,width margin-left: -100px; } //方法二:未知元素的高寬 #div1{ width: 200px; height: 200px; background-color: #6699FF; margin:auto; position: absolute; //父元素需相對定位 left: 0; top: 0; right: 0; bottom: 0; } 那麼問題來了,如何垂直居中一個?(用更簡便的方法。) #container //的容器設定如下 { display:table-cell; text-align:center; vertical-align:middle; } 重置樣式非常多,凡是一個前端開發人員肯定有一個常用的重置CSS檔案並知道如何使用它們。他們是盲目的在做還是知道為什麼要這麼做呢?原因是不同的瀏覽器對某些元素有不同的預設樣式,如果你不處理,在不同的瀏覽器下會存在必要的風險,或是更戲劇性的性發生。 你可能會用Normalize來取代你的重置樣式檔案。它沒有重置所有的樣式風格,但僅提供了一套合理的預設樣式值。既能讓眾多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。 在這一方面,無法做每一個重設重置。它也確實有些超過一個重置,它處理了你永遠都不用考慮的怪癖,像HTML的 display:block行內元素轉換為區塊級元素 display:inline區塊級元素轉換為行內元素 display:inline-block轉為內嵌元素 可繼承: font-size font-family color, ul li dl dd
dt; 不可繼承 :border padding margin width height ; !important > id > class > 標籤
!important 比 內聯優先權高 *優先權就近原則,樣式定義最近者為準; *以最後載入的樣式為準; 後者有語義,前者則無。 1.內聯元素(inline element) a – 錨點 abbr – 縮寫 acronym – 首字 b – 粗體(不建議) big – 大字體 br – 換行 em – 強調 font – 字體設定(不建議) i – 斜體 img – 圖片 input – 輸入框 label – 表格標籤 s – 中劃線(不建議) select – 專案選擇 small – 小字體文字 span – 常用內嵌容器,定義文字內區塊 strike – 中劃線 strong – 粗體強調 sub – 下標 sup – 上標 textarea – 多行文字輸入框 tt – 電傳文字 u – 底線 var – 定義變數 2、塊級元素 address – 地址 blockquote – 區塊引用 center – 舉中對齊區塊 dir – 目錄列表 div – 常用區塊級容易,也是css layout的主要標籤 dl – 定義清單 fields
64、什麼是外邊距重疊?重疊的結果是什麼?
65、rgba()和opacity的透明效果有什麼不同?
66、css中可以讓文字在垂直和水平方向上重疊的兩個屬性是什麼?
67、如何垂直居中一個浮動元素?
68、描述一個"reset"的CSS檔案並如何使用它。知道
normalize.css
嗎?你了解他們的不同? audio
元素不一致或line-height
不一致。 69、說display屬性有哪些?可以做什麼?
70、哪些css屬性可以繼承?
71、css優先權演算法如何計算?
72、b標籤和strong標籤,i標籤和em標籤的區別?
73、有那些行內元素、有哪些區塊元素、盒子模型?