你可能不知道的 css 內容塊

2022-08-05 18:06:15 字數 2797 閱讀 8673

我們都知道元素都擁有position這個css屬性,先來看看他的基本定義和可用值。

position決定了元素位置是如何被渲染的值描述

static

預設值,元素在文件流中依次渲染

absolute

元素位置相對於其最近的非 static 的父元素

fixed

元素位置相對於瀏覽器視窗

relative

元素位置相對於原本應該渲染的位置

sticky

根據滾動的位置在 relative 和 fixed 之間切換

initial

設定為預設值

inherit

從父元素繼承

this is a paragraph!

body 

section

p

很好,與我們期望的一樣渲染出來了。現在我們把sectiondisplay屬性 換成inline

section
這個破壞真是立竿見影啊,為什麼會這樣呢?要知曉其中的奧秘,就要了解什麼是內容塊。

通常情況下,元素的大小和位置都取決他的內容塊。一般地,內容塊是該元素最近的塊級父元素,但有一些例外情況。

元素的大小和位置都是由其內容塊做為參考的,他會影響到元素的width,height,padding,margin還有offset相關的屬性。

positionstatic或者relative時,其內容塊是其最近的塊級父元素的內容框(content-box),比如block,inline-block,list-item,或者是被指定為某種格式容器的元素,比如table,flex,grid

positionabsolute時,其內容塊是其最近的position不是static的塊級父元素的填充框(padding-box)。

positionfixed時,其內容塊是整個檢視視窗(viewport)

positionabsolute或者fixed時,其內容塊也可能是有下列特殊情況的最近的父元素的填充框(padding-box)。

height,topbottom依據內容塊的height值進行百分比計算。如果內容塊是static或者relative,並且沒有設定高度,依靠其內容決定高度,那麼這些值都會變成0

width,left,right,padding,margin依據內容塊的width值進行百分比計算。

現在我們了解了內容快的概念之後,再來看看上面的例子,p最近的父元素是section, 被設定為inline之後不再是塊級元素,所以body變成了離p最近的塊級父元素,此時內部的百分比計算都依據body的寬高做對應計算。

我們再看看別的例子

現在我們將第乙個例子中的pposition設定為absolute,sectioninline改回block,

body 

section

p

由於p設定為了absolute, 顯而易見他的大小尺寸都根據了瀏覽器視窗來計算,注意這裡也經歷了尋找內容塊的過程。p的祖先元素均是static,所以瀏覽器視窗才成為了其內容塊。

現在我們還不錯,一切都在掌握之中,我們試著把sectiontransform設定為rotate(0deg),旋轉了 0 度,可以預計到本來應該沒有視覺上的效果,但這麼做會影響對內容塊的決定,從而導致p的大小和位置變化。

section 

p

看!由於我們為section設定了transformp的內容塊不再是瀏覽器視窗了,而是section

css 的世界就是這麼奇妙,表面上看上去酷炫多彩,內心維護著自己的規則世界。有時候產生了一些讓人疑惑不解的 bug ...不過,通過**其本質,迷霧終會散盡,bug 總會改完的。

希望大家都 get 到了新技能,下回再見!

首發於自己的 github/kimochg/tinythoughts

你可能不知道的 css 內容塊

我們都知道元素都擁有position這個css屬性,先來看看他的基本定義和可用值。position決定了元素位置是如何被渲染的值描述 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視窗 relativ...

你可能不知道的 css 內容塊

我們都知道元素都擁有 position 這個 css 屬性,先來看看他的基本定義和可用值。定義 position 決定了元素位置是如何被渲染的 可用值 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視...

你可能不知道的 css 內容塊

我們都知道元素都擁有 position 這個 css 屬性,先來看看他的基本定義和可用值。定義 position 決定了元素位置是如何被渲染的 可用值 static 預設值,元素在文件流中依次渲染 absolute 元素位置相對於其最近的非 static 的父元素 fixed 元素位置相對於瀏覽器視...