關於各種Formatting context

2022-06-06 03:54:08 字數 1832 閱讀 5844

我們把網頁看作是由很多個盒子組成的,而這些盒子的展示方式,就是由display這個屬性來決定的。

這裡出現了乙個概念,叫做formatting context(格式上下文):

formatting context 是 w3c css2.1 規範中的乙個概念。它是頁面中的一塊渲染區域,有一套渲染規則決定了其子元素將如何定位,以及和其他元素的關係和相互作用。

相信很多人了解到bfc這個概念,都是因為在思考為什麼這樣做可以「清除浮動」而搜尋到了和bfc有關的結果。那麼我們先來拓展一下:

q:浮動的時候,文字是不會重疊的,為什麼?

使用float脫離文件流時,其他盒子會無視這個元素,但其他盒子內的文字依然會為這個元素讓出位置,環繞在周圍。

q:為什麼用clear屬性可以清除浮動?首先有乙個前提,clear屬性只能賦給塊級元素才可能會有效果。

然後來自mdn:

另外一種最常用的就是使用overflow:hidden來進行清除浮動,而它的原理就和bfc有關。

如果形成了bfc,就形成了乙個單獨的塊。塊和塊之間不會出現干擾,所以浮動的元素塊不會重疊。

如果這兩個相鄰的塊框不屬於同乙個bfc,它們的外邊距就不會疊加。(margin collopse)證實出來的結果是錯誤的!!!

一般情況下,如下圖所示,本應該是相隔40px,但是會發生重疊,結果出現的是盒子1的margintop和盒子2的marginbottom裡那個更大的距離:

如果我們給box1加上overflow:hidden,還是給box2加上overflow:hidden還是都加上,都無法解決這個問題。(不知是否是本人理解錯誤,目前我定它為錯誤)

bfc邊框和內部貼緊子元素不發生重疊:

乙個bfc的邊框不能和它裡面的元素的外邊距重疊,所以如果給乙個挨著浮動的塊級格式化上下文新增負的外邊距時"不起作用"??。

除了上面相鄰會出現重疊外,這種父子的情況也會出現重疊。如果不給下面這個父親盒子加上overflow,裡面的孩子就永遠是緊貼著父親的邊框的,並且parent會取孩子和它自己margintop裡面最大的那個值來和test隔開。

另外這裡引用寫的是「margin負值不起作用」,經過測試之後發現也是錯的。

盒子高度包含了浮動元素:

建立了bfc的元素就是乙個獨立的盒子,裡面的子元素不會在布局上影響外面的元素,反之亦然,同時bfc依舊屬於文件中的普通流。

就是bfc內的浮動元素可以撐起這個盒子。

bfc的區域不會與float box重疊:

也就是如果兩個盒子黏在一起,乙個是bfc乙個是float(話說,float不也是bfc麼=_=)這個時候它們不會重疊。

使用 *zoom: 1 的屬性,這是乙個iehack, 因為 ie6-7 並不支援 w3c 的 bfc ,而是使用私有屬性 haslayout 。

從表現上說,haslayout 跟 bfc 很相似。 haslayout 自身存在很多問題,導致了ie6-7 中一系列的 bug。

關於輪廓的各種使用

include cv.h include highgui.h include cvaux.h include cxcore.h include include using namespace std using namespace cv define pi 3.14159f void drawbox...

關於各種平面分割問題

第n條直線與前面n 1條直線均相交,而且交點不重疊。如下圖所示,第四條直線滿足的條件是與前面3條直線相交而且交點不重疊。令第n條直線分割的平面數是f n 則f 1 2 我們再來考慮第n條直線,第n條直線與n 1條直線相交,交點不重疊,那麼第n條直線被分成了n段。如上面的圖可以看出此規律。這n段線段或...

關於時間的各種操作

日期字串格式大小比較 string str1 2015 02 08 string str2 2015 01 08 int res str1.compareto str2 1是大於 0是等於 1是小於獲取某年第一天日期 calendar calendar calendar.getinstance ca...