width + padding + border = 元素實際寬度
height + padding + border = 元素實際高度
很不直覺不是嗎?一般都會認為往外長的叫做margin,往內長的叫做padding吧?假設我們需要一個width=200px, border=2px, padding=10px,在以前我們實際寫的會是像這樣(如果我們需要把寬度固定在200px)
<div style="width:186px;border:2px;padding:5px">
..content here..
</div>
必需從border, padding反推出width。其實元素是固定長寬還好辦,拿出計算機多按幾下而已,但如果我們需要的是width=100%, border=2px, padding=10px這樣子的組合呢?
幸好有CSS3,先看下面的圖:
下方是比較直覺的Model,寬度多少就固定,border/padding應該是往元素內部去縮減,這樣在排版上好控制元素的大小,再利用margin來跟其它元素作隔間。但目前預設的box model是上方的樣子,width設定的就是內容的寬度,border/padding都是加上去的,所以實際元素大小較難掌握。下方的box model叫做border-box,目前新版的瀏覽器以普遍支援,只需要在需要的元素上加上以下設定:
.border-box {
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
事實上,也可以直接指定給所有元素
* {
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
此文指出,border-box並不會影響JQuery(+UI),那就放心的用吧。附註:
1. 預設的設定叫做content-box,另外firefox有個非規範的padding-box,只有把padding算進來,border不算在width裡面。
2. 支援的瀏覽器:
Chrome (any): box-sizing Opera 8.5+: box-sizing Firefox (any): -moz-box-sizing Safari 3: -webkit-box-sizing (unprefixed in 5.1+ versions) IE8+: box-sizing 如果需要IE6/7支援,請參閱此處
沒有留言:
張貼留言