我們都知道元素都擁有position
這個css屬性,先來看看他的基本定義和可用值。
position
決定了元素位置是如何被渲染的值描述
static
預設值,元素在文件流中依次渲染
absolute
元素位置相對於其最近的非 static 的父元素
fixed
元素位置相對於瀏覽器視窗
relative
元素位置相對於原本應該渲染的位置
sticky
根據滾動的位置在 relative 和 fixed 之間切換
initial
設定為預設值
inherit
從父元素繼承
this is a paragraph!
body
section
p
section
的display
屬性 換成inline
section
這個破壞真是立竿見影啊,為什麼會這樣呢?要知曉其中的奧秘,就要了解什麼是內容塊。
通常情況下,元素的大小和位置都取決他的內容塊。一般地,內容塊是該元素最近的塊級父元素,但有一些例外情況。
元素的大小和位置都是由其內容塊做為參考的,他會影響到元素的width
,height
,padding
,margin
還有offset
相關的屬性。
position
是static
或者relative
時,其內容塊是其最近的塊級父元素的內容框(content-box),比如block
,inline-block
,list-item
,或者是被指定為某種格式容器的元素,比如table
,flex
,grid
。
position
是absolute
時,其內容塊是其最近的position
不是static
的塊級父元素的填充框(padding-box)。
position
是fixed
時,其內容塊是整個檢視視窗(viewport)
position
是absolute
或者fixed
時,其內容塊也可能是有下列特殊情況的最近的父元素的填充框(padding-box)。
height
,top
和bottom
依據內容塊的height
值進行百分比計算。如果內容塊是static
或者relative
,並且沒有設定高度,依靠其內容決定高度,那麼這些值都會變成0
。
width
,left
,right
,padding
,margin
依據內容塊的width
值進行百分比計算。
現在我們了解了內容快的概念之後,再來看看上面的例子,p
最近的父元素是section
, 被設定為inline
之後不再是塊級元素,所以body
變成了離p
最近的塊級父元素,此時內部的百分比計算都依據body
的寬高做對應計算。
我們再看看別的例子
現在我們將第乙個例子中的p
的position
設定為absolute
,section
從inline
改回block
,
body
section
p
由於p
設定為了absolute
, 顯而易見他的大小尺寸都根據了瀏覽器視窗來計算,注意這裡也經歷了尋找內容塊的過程。p
的祖先元素均是static
,所以瀏覽器視窗才成為了其內容塊。
現在我們還不錯,一切都在掌握之中,我們試著把section
的transform
設定為rotate(0deg)
,旋轉了 0 度,可以預計到本來應該沒有視覺上的效果,但這麼做會影響對內容塊的決定,從而導致p
的大小和位置變化。
section
p
看!由於我們為section
設定了transform
,p
的內容塊不再是瀏覽器視窗了,而是section
。
css 的世界就是這麼奇妙,表面上看上去酷炫多彩,內心維護著自己的規則世界。有時候產生了一些讓人疑惑不解的 bug ...不過,通過**其本質,迷霧終會散盡,bug 總會改完的。
希望大家都 get 到了新技能,下回再見!
首發於自己的 github/kimochg/tinythoughts
你可能不知道的 css 內容塊
我們都知道元素都擁有 position 這個 css 屬性,先來看看他的基本定義和可用值。定義 position 決定了元素位置是如何被渲染的 可用值 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視...
你可能不知道的 css 內容塊
我們都知道元素都擁有 position 這個 css 屬性,先來看看他的基本定義和可用值。定義 position 決定了元素位置是如何被渲染的 可用值 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視...
你可能不知道的 css 內容塊
我們都知道元素都擁有position這個css屬性,先來看看他的基本定義和可用值。position決定了元素位置是如何被渲染的值描述 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視窗 relativ...