HTML和CSS是什麼玩意兒?
HTML和CSS的一些東西會讓你忍不住說“這TM是什麼玩意兒!”。以下是困惑、失策和困境這些困擾著HTML和CSS問題清單:
• Doctype的宣告
• Box Model的計算問題
• Rem單位和Mobile Safari
• 浮動(float)排在第一
• 浮動(float)和清除浮動(clear)
• 浮動和計算高度
• 浮動元素是塊級元素
• 垂直相鄰margin的倒塌
• 設計表單的行
• Firefox和<input>按鈕
• Firefox按鈕的內部輪廓
• 始終在<button>上設定type
• IE瀏覽器選擇器的限制
• 位置解釋
• 位置和寬度
• 定位與轉換
Doctype的宣告
總要有doctype宣告。我建議用html5中簡單的doctype宣告方式
<!DOCTYPE html>
不宣告doctype會導致畸形的表單、輸入框和其它的一些問題;且會讓頁面在quirk mode下顯示。
Box Model的計算問題
當元素定義了padding和border-width中的1個或2個後,你設定的width值會變得比實際的大。為了避免這個問題的發生,現在就用box-sizing: border-box;這種通過的方法來重新設定。
Rem單位和Mobile Safari
雖然Mobile Safari支援使用rem的所有屬性值時。但當rem被用在維媒體查詢和以不同大小無限閃爍頁面的文字時,它就不行了。
就這種情況而言,目前還是用em來代替rem吧。
html { font-size: 16px; } /* Causes flashing bug in Mobile Safari */ @media (min-width: 40rem) { html { font-size: 20px; } } /* Works great in Mobile Safari */ @media (min-width: 40em) { html { font-size: 20px; } }
求助!如果你有蘋果或WebKit關於這方面的錯誤報告,我很樂意將它放到本文中。由於它只適用於移動應用,不適用於桌面程式,Safari瀏覽器(非Mobile Safari),我不確定在哪裡會報告這個錯誤。
浮動(float)排在第一
在文件順序中,浮動的元素應該總是放在第一。浮動的元素需要一些東西來環繞,否則其順序會下降,在內容之下顯示。
<div class="parent"> <div class="float">Float</div> <div class="content"> <!-- ... --> </div> </div>
浮動(float)和清除浮動(clear)
如果你使用浮動,很可能你需要使用清除浮動。任何跟著浮動元素的內容均會環繞著浮動元素,除非使用清除浮動。你可以使用以下的方法來清除浮動。
micro clearfix方法通過使用單獨的類來清除浮動
.clearfix:before, .clearfix:after { display: table; content: ""; } .clearfix:after { clear: both; }
或者,在parent中用auto 或 hidden 來指定overflow。
.parent { overflow: auto; /* clearfix */ } .other-parent { overflow: hidden; /* clearfix */ }
考慮到overflow可能會產生意想不到的副作用,在parent中將其以特別的方式標註在定位元素旁。
專業意見!當清除浮動由於其它原因能作為屬性使用時,通過像/* clearfix */
這樣的註釋能讓你把握自己的未來,且能讓你的同事高興。
浮動和計算高度
一個只有浮動內容的父元素將有一個計算的高度值height: 0;。給父元素加clearfix,強制瀏覽器計算一個高度值。
浮動元素是塊級元素
用了float的元素會自動地變成display: block;沒有必要兩個屬性都設定,因為float會覆蓋你的display。
.element { float: left; display: block; /* Not necessary */ }
有趣的事實:幾年前,我們必須要設定display: inline;,讓大多數的浮動元素能夠相容IE6,避免雙倍margin值的bug,。不管怎樣,那些日子早已過去了。
垂直相鄰margin的倒塌
相鄰元素(一個接一個地)的頂部和底部的margin可能會在很多情況下倒塌,但對於浮動元素或絕對定位的元素絕不會出現這樣的情況。閱讀這篇MDN文章或CSS2規範裡的collapsing margin章節來了解更多東西吧。
水平相鄰的margin永遠不會倒塌。
設計表單的行
表單的行,<tr>,不要接收border,除非你在父<table>上設定了 border-collapse: collapse;
。此外,如果<tr>和子<td>或<th>有同樣的border-width,表單行的border將不起作用。點連結檢視示例。
Firefox和<input>按鈕
由於一些未知原因,Firefox能提交line-height和適用不能被自定義CSS覆蓋的<input>按鈕。
你可以通過以下兩種方法解決這個問題:
1. 堅持使用<button>元素
2. 在你的按鈕中不要使用line-height
你應該先用第一種方法(不管怎樣,我都建議用這種方法,因為<button>元素很好),以下是你需要知道的:
<!-- Not so good --> <input type="submit" value="Save changes"> <input type="button" value="Cancel"> <!-- Super good everywhere --> <button type="submit">Save changes</button> <button type="button">Cancel</button>
如果你想要用第二種方法的話,只要不設定line-height且只使用padding垂直對齊按鈕文字就行了。用firefox瀏覽器開啟連結來看看原始的問題和解決方案。
好訊息!這個問題在Firefox30中似乎被解決了。對於我們以後的使用來說這是個好訊息。但值得注意的是這個問題僅在新版本中得到解決,舊版本的問題並未得到解決。
Firefox按鈕的內部輪廓
Firefox用:focus給按鈕(<input>和<button>)增加了一個內部輪廓。顯然,這是為了其可訪問性做的,不過它的位置似乎相當怪異。用以下這段CSS來覆蓋它:
input::-moz-focus-inner, button::-moz-focus-inner { padding: 0; border: 0; }
你可以通過前一章節提到的例子中檢視這個解決方案。
專業意見!一定要在按鈕、連結和輸入元素中包含一些焦點狀態。提供可訪問功能是至關重要的,對於用tab鍵來選擇內容的專業使用者亦是如此。
始終在<button>上設定type
預設值是submit,意味著表單內的button都可以提交表單。所有type=”button”的元素勻不會提交表單,type=”submit”的元素則會提交表單。
<button type="submit">Save changes</button> <button type="button">Cancel</button>
在應用中,如果在表單外使用button就使用type=”button”。
<button class="dismiss" type="button">x</button>
有趣的事實:顯然IE7不能很好的支援button的value屬性。如果不看屬性內容的話,innerHtml(<button>標籤之間的內容)可以彌補這個問題。然而,由於IE7的使用率已經下降和給<button>設定value及innerHtml似乎極少見這兩個原因讓我覺得這並不是一個很值得關注的問題。
IE瀏覽器選擇器的限制
IE9及更早版本的IE瀏覽器每個樣式表中只支援4096個選擇器。組合樣式表和每個頁面中包含<style></style>的數量也受到了限制,最大隻能31。在這個限制之後做的任何東西都會被瀏覽器給忽略掉。分割CSS,或者開始重構。我建議後者
作為一個有用的邊注,下面是瀏覽器計算選擇器的方法:
/* One selector */ .element { } /* Two more selectors */ .element, .other-element { } /* Three more selectors */ input[type="text"], .form-control, .form-group > input { }
位置解釋
設定了position:fixed;的元素被放置在與瀏覽器視窗有關的地方。設定了position:absolute;的元素被放置在離與static(例如,relative,absolute,fixed)不同位置的父元素最近的地方。
位置和寬度
不要給已經設定了position:[absolute|fixed];,left,right的元素設定width:100%。使用width:100%與使用left:0,right::0效果是一樣的。選擇使用其中一種,但別兩種都用。
定位與轉換
如果父元素設定了transform,那麼position:fixed將不起作用。用transform建立一個新的包含塊,有效的強制父元素設定position:relative且固定元素的作用與position:absolute.一樣。
相關文章
- csdn什麼玩意兒嗎
- 大資料:protobuf是啥玩意兒大資料
- 什麼是HTML?HTML
- text(),val()和html()區別是什麼HTML
- HTML是什麼意思?HTML
- HTML元素是什麼?HTML
- HTML列表是什麼?HTML
- HTML、CSS、JavaScript、PHP、 MySQL 的學習順序是什麼HTMLCSSJavaScriptPHPMySql
- 什麼是CSS hackCSS
- 火了那麼久的區塊鏈,到底是個什麼玩意?區塊鏈
- 破玩意 | Redis 為什麼那麼快Redis
- HTML屬性是什麼?HTML
- 什麼是HTML5HTML
- HTML5 是什麼?HTML
- 什麼是關鍵 CSSCSS
- 什麼是CSS3CSSS3
- HTML格式化是什麼?HTML
- HTML中的塊是什麼?HTML
- HTML中的框架是什麼?HTML框架
- Event Loop是個什麼玩意:從 Vue 的 nextTick 說起OOPVue
- HelloCode:什麼是少兒程式設計程式設計
- [譯] 什麼是模組化 CSS?CSS
- CSS 元素溢位是什麼?CSS
- css中BFC元素是什麼?CSS
- IIS中“繫結”,“IP地址全部未分配”到底是個什麼玩意
- HTML5培訓:什麼是HTML5?HTML
- html的空格程式碼是什麼HTML
- HTML中的實體是什麼?HTML
- HTML和CSSHTMLCSS
- css--BFC是什麼,有什麼用,怎麼用?CSS
- 敗家玩意兒!Redis 竟然浪費了這麼多記憶體!Redis記憶體
- 這玩意兒我也寫得出來,為什麼我就不是高階程式設計師呢?程式設計師
- css中sticky屬性是什麼CSS
- css中first-letter是什麼CSS
- 什麼是web前端?前端可以做什麼?html5有什麼用?Web前端HTML
- 面試官寫了個雙冒號::問我是什麼語法,Java中有這玩意麼?面試Java
- GNU是什麼?和Linux是什麼關係?Linux
- html和html5有什麼區別呢?HTML