css定位中的百分比


----轉載自自己在牛人部落中的相關文章---

在前端css定位中經常面對的一個問題是,百分比定位究竟是針對於誰定位?

一、margin,padding的百分比

首先從css的設計意圖說起,在瀏覽器默認的 writing-mode: horizontal-tb; 和 direction: ltr; 的情況下,因為CSS的基礎需求是排版,而通常我們所見的橫排文字,其水平寬度一定(仔細回想一下,如果沒有顯式的定義寬度或者強制一行顯示,都會遇到邊界換行,而不是水平延展),垂直方向可以無限延展。這也是為什么:

1. margin: auto; 無法在縱向上垂直居中,其實原因也是上面所說的,因為縱向是可以無限延展的,所以沒有一個一定的值可以被參照被用來計算。

2.margin(包括margin-top,margin-bottom,margin-left,margin-right):使用百分比時都是相對於父元素的寬度定位;

3.padding(包括padding-top,padding-left,padding-bottom,padding-right):使用百分比時也都是相對於父元素的寬度定位。

具體可參考這篇文章:

http://www.ituring.com.cn/article/64581

二、歸納如下:

相對於父元素寬度的,(如果自身已經是最外層元素,則相對於視口)
[max/min-]width、left、right、padding(包括padding-top,padding-bottom)、margin(包括margin-top,margin-bottom) 等;

相對於父元素高度的:(如果自身已經是最外層元素,則相對於視口)
[max/min-]height、top、bottom 等;

其中,關於height百分比定位的一個冷知識是:若某元素的父元素沒有確定高度,則無法有效使用height=XX%的樣式。除非該元素已經是最外層元素,此時是相對於視口。

詳情可參見:http://www.cnblogs.com/vajoy/p/3730014.html

相對於繼承字號的:
font-size 等;

相對於自身字號的:
line-height 等;

相對於自身寬高的:
border-radius、background-size、transform: translate()、transform-origin、zoom、clip-path 等;

特殊算法的:
background-position(方向長度 / 該方向除背景圖之外部分總長度 * 100)、
filter 系列函數等;

如果自身設置 position: absolute,相對於離它最近的那個 position 不為 static 的祖先元素,如果沒有這樣的元素,則相對於視口。
如果 position: fixed,“父元素”指視口。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM