日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談由position屬性引申的css進階討論

瀏覽:441日期:2022-06-02 16:05:41
目錄
  • 1.normal flow         
  • 2.containing block        
  • 3.BFC        

1.normal flow         

normal flow(正常流):正常流是默認的定位方式。任何沒有具體指定{position:absolute}或者{position:fixed}屬性以及沒有被浮動的元素都將默認獲得此屬性。

在這種方式里,塊級元素在它們的包含塊里一個一個垂直延伸,行內元素在它們的包含塊里從左至右的水平排布。

值得注意的是,在正常流里垂直邊距(vertical margin)是重疊的。也就是說,上下兩個塊級盒之間的邊距由它們之中邊距較大的元素決定,而不是他們的和!

<style>div{    width: 100px;    height: 100px;    border: 1px solid #00A4CC;    background-color: #3e8f3e;}.div1{    margin:20px 0;}.div2{    margin:40px 0;}</style></head><body><div></div><div></div></body>

效果顯示如下:

div1和div2的垂直距離由大的margin決定,也就是div2的40px而不是二者之和60px。

其次,行內元素是會被折斷的,當寬度受到限制的時候,它會自動移動到下一行。這可能會產生一些難看的效果如果行內塊有邊框的話。看下面的效果:

<head><style>div{    width: 200px;    height: 100px;    border: 1px solid #00A4CC;}span{    border: 2px solid #00ff00;}</style></head><body><div>    <span> 我會掉到下一行我會掉到下一行我會掉到下一行</span></div></body>

效果顯示如下:

2.containing block        

containing block(包含塊):是視覺格式化模型的一個重要概念,它與框模型類似,也可以理解為一個矩形,而這個矩形的作用是為它里面包含的元素提供一個參考,元素的尺寸和位置往往是由該元素所在的包含塊決定的。也就是說一個元素盒子的位置和大小有時是通過相對于一個特定的長方形來計算的,這個長方形就被稱之為元素的 containing block。

一個元素的containing block按照以下方式定義:

1.用戶代理(比如瀏覽器)選擇根元素作為 containing block(稱之為初始 containing block)。

2.對于其它元素,除非元素使用的是絕對位置,containing block 由最近的塊級祖先元素盒子的內容邊界組成。

3.如果元素有屬性 "position:fixed",containing block 由視口建立。

4.如果元素有屬性 "position:absolute",containing block 由最近的 position 不是 static 的祖先建立,按下面的步驟:

如果祖先是塊級元素,containing block 由祖先的padding edge形成。

如果祖先是內聯元素,containing block 取決于祖先的 direction 屬性。

如果 direction 是 ltr(左到右),祖先產生的第一個盒子的上、左內容邊界是 containing block 的上方和左方,祖先的最后一個盒子的下、右內容邊界是 containing block 的下方和右方。

如果 direction 是 rtl(右到左),祖先產生的第一個盒子的上、右內容邊界是 containing block 的上方和右方,祖先的最后一個盒子的下、左內容邊界是 containing block 的下方和左方。

5.如果沒有祖先,根元素盒子的內容邊界確定為 containing block。

名詞解釋:

視口:通過解析文檔,連續媒體(比如屏幕就是連續媒體,而打印機則是基于頁的媒體)給用戶產生一個視口(一個窗口或其它在屏幕上顯示的區域)。

根元素:源文件中,每一個元素都有一個父元素,只有一個例外,它就是根元素。

padding edge:請參見下圖:

舉個板栗:

<html>   <head>      <title>Illustration of containing blocks</title>   </head>   <body id="body">      <div id="div1"><p id="p1">This is text in the first paragraph...</P>  <p id="p2">This is text    <em id="em1"> in the      <strong id="strong1">second      </strong> paragraph.    </em>  </p>      </div>   </body></html>

那么,在沒有指定任何position的情況下,上方代碼的containng block確定方式為:

如果我們設置div1的position為:

#div1 { position: absolute;}

此時,div1 的 containing block 就不再是 body,它變成了初始 containing block(因為這里還沒有具有 position 的祖先盒子)。

3.BFC        

BFC(Block Formatting Context 塊格式化上下文):是W3CCSS2.1規范中的一個概念,在CSS3中被修改為flowroot。格式化則表明了在這個環境中,元素處于此環境中應當被初始化,即元素在此環境中應當如何布局等。元素如果創建了BF么BFC決定了如何對其內容進行定位,以及它與其他元素的關系和相互作用。

通俗理解:首先BFC是一個名詞,是一個獨立的布局環境,我們可以理解為一個箱子(實際上是看不見摸不著的),箱子里面物品的擺放是不受外界的影響的。轉換為BFC的理解則是:BFC中的元素的布局是不受外界的影響(我們往往利用這個特性來消除浮動元素對其非浮動的兄弟元素和其子元素帶來的影響。)并且在一個BFC中,塊盒與行盒(行盒由一行中所有的內聯元素所組成)都會垂直的沿著其父元素的邊框排列。

創建了BFC的元素會按照如下的方式對其子元素進行排列:

  • 在BFC中,盒子從頂端開始垂直地一個接一個地排列,兩個盒子之間的垂直的間隙是由他們的margin 值所決定的。在一個BFC中,兩個相鄰的塊級盒子的垂直外邊距會產生折疊。即是在BFC中相鄰的塊級元素的垂直邊距會折疊(collapse)。
  • 在BFC中,每一個盒子的左外邊緣(margin-left)會觸碰到容器的左邊緣(border-left)(對于從右到左的格式來說,則觸碰到右邊緣),即使存在浮動也是如此(盡管一個子元素的內容區域會由于浮動而壓縮),除非這個子元素也創建了一個新的BFC,如它自身也是一個浮動。

名詞解釋:

邊距折疊:在CSS當中,相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。這種合并外邊距的方式被稱為折疊,并且因而所結合成的外邊距稱為折疊外邊距。

折疊的結果: 

1.兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值。

2.兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值。

3.兩個外邊距一正一負時,折疊結果是兩者的相加的和。

產生折疊的必備條件:margin必須是鄰接的,且需要滿足如下條件:

1.必須是處于常規文檔流(非float和絕對定位)的塊級盒子,并且處于同一個BFC當中。

2.沒有線盒,沒有空隙(clearance),沒有padding和border將他們分隔開

3.都屬于垂直方向上相鄰的外邊距,可以是下面任意一種情況

  • 元素的margin-top與其第一個常規文檔流的子元素的margin-top元素的
  • margin-bottom與其下一個常規文檔流的兄弟元素的margin-top
  • height為auto的元素的margin-bottom與其最后一個常規文檔流的子元素的margin-bottom
  • 高度為0并且最小高度也為0,不包含常規文檔流的子元素,并且自身沒有建立新的BFC的元素的margin-top和margin-bottom

那么,什么情況下會創建BFC:  

1.浮動元素(float:left|right)

2.絕對定位元素(position:absolute|fixed)

3.行內塊元素(display:inline-block)

4.表格的單元格(display:table-cells,TD、TH)

5.表格的標題(display:table-captions,CAPTION)

6."overflow"特性不為visible的元素

7.表格元素創建的"匿名框"

值得注意的是,"display:table" 本身并不產生 "block formatting contexts"。但是,它可以產生匿名框, 其中包含 "display:table-cell" 的框會產生塊格式化上下文。

總之,對于 "display:table" 的元素,產生塊格式化上下文的是匿名框而不是 "display:table"。

最后,是這些元素創建了塊格式化上下文,它們本身不是塊格式化上下文。

BFC的運用:消除浮動與多欄布局。

1.自適應兩欄布局

<style>    body {position: relative;    }    .aside {width: 100px;height: 150px;float: left;background: #f66;    }    .main {height: 200px;background: #fcc;    }</style><body>    <div></div>    <div></div></body>

效果如下:

根據BFC的規則:

每一個盒子的左外邊緣(margin-left)會觸碰到容器的左邊緣(border-left)(對于從右到左的格式來說,則觸碰到右邊緣)

所以,雖然存在浮動的元素aslide,但main的左邊依然會與包含塊的左邊相接觸。

因此,我們可以根據:

BFC的區域不會與float box重疊。

來通過觸發main生成BFC,實現自適應兩欄布局。

.main {     overflow: hidden;}

當觸發main生成BFC后,這個新的BFC不會與浮動的aside重疊。因此會根據包含塊的寬度,和aside的寬度,自動變窄。效果如下:

2.清除內部浮動

<head>    <title>Clear float</title>    <style>.container{    margin: 30px auto;    width:600px;    height: 300px;}.wrapper{    border:solid 3px #a33;}.main{    width: 100px;    height: 100px;    background-color: #060;    margin: 10px;    float: left;}    </style></head><body>    <div><div>    <div></div>    <div></div>    <div></div></div>    </div></body>

希望的結果是:

但結果是:

父容器并沒有把浮動的子元素包圍起來,俗稱塌陷,為了消除這種現象,除了用傳統的偽類方法。根據

計算BFC的高度時,浮動元素也參與計算

還可以使父容器形成BFC,來清除浮動,簡單修改一下代碼:

<div>  //添加一個float屬性,形成BFC    <div>1</div>    <div>2</div>    <div>3</div></div>

可以得到如下效果:

總結來說,BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。

因為BFC內部的元素和外部的元素絕對不會互相影響,因此,當BFC外部存在浮動時,它不應該影響BFC內部Box的布局,BFC會通過變窄,而不與浮動有重疊。同樣的,當BFC內部有浮動時,為了不影響外部元素的布局,BFC計算高度時會包括浮動的高度。避免margin重疊也是這樣的一個道理。

以上就是淺談由position屬性引申的css進階討論的詳細內容,更多關于由position屬性引申的css進階討論的資料請關注其它相關文章!

標簽: CSS HTML
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲激情精品| 精品五月天堂| 日韩国产综合| 国产日韩高清一区二区三区在线 | 韩国精品主播一区二区在线观看 | 国产精品日本一区二区不卡视频 | 日韩激情网站| 亚洲主播在线| 国产女优一区| 99国产精品久久久久久久成人热 | 高清日韩欧美| 久久精品国产一区二区| 精品午夜久久| 国产精品久久久久久久久妇女| 久久精品一区二区三区中文字幕| 国产女人18毛片水真多18精品| 日韩精品导航| 国产日产一区| 国产精品任我爽爆在线播放| 国产精品亚洲人成在99www | 久久性天堂网| 视频一区欧美日韩| 成人在线网站| 亚洲精品1区| 亚洲涩涩av| 日本一区二区中文字幕| 911亚洲精品| 国产探花在线精品| 久久亚洲道色| 亚洲国内精品| 爽爽淫人综合网网站| 青青草伊人久久| 国产精品久久久一区二区| 在线天堂中文资源最新版| 精品在线91| 亚洲精品伦理| 欧美黄色精品| 精品三级在线观看视频| 成人三级高清视频在线看| 日韩精品首页| 亚洲日本国产| 成人污污视频| 在线看片不卡| 亚洲一区二区小说| 日本a级不卡| 日韩欧美二区| 国产亚洲毛片| 久久激情五月婷婷| 久久精品国产亚洲aⅴ| 日韩中文影院| 亚洲午夜黄色| 亚洲另类黄色| 欧美日本一区| 国产精品香蕉| 丝袜av一区| 国产图片一区| 日韩中文在线电影| 亚洲涩涩av| 美女视频黄 久久| 久久电影一区| 麻豆精品av| 激情综合网五月| 日本aⅴ亚洲精品中文乱码 | 久草精品视频| 久久午夜精品| 成人一区不卡| 极品日韩av| 国产精品乱战久久久| 国产精品外国| 久久影院午夜精品| 日本强好片久久久久久aaa| 日韩欧美午夜| 国产女人18毛片水真多18精品| 久久青草久久| 嫩呦国产一区二区三区av| 亚洲精品1区| 91av亚洲| 国产毛片久久久| 日韩一区精品视频| 一本大道色婷婷在线| 日韩精品视频在线看| 久久免费精品| 日韩av三区| 欧美亚洲国产激情| 国产一区日韩| 蜜臀久久99精品久久久久久9| 久久99国产精品视频| 亚洲区第一页| 亚洲一区二区三区四区五区午夜 | 亚洲少妇在线| 成人精品国产亚洲| 日本午夜免费一区二区| 国产三级精品三级在线观看国产| 成人美女视频| 国产伦理一区| 综合欧美亚洲| 99国产精品一区二区| 欧美激情福利| 久久国产视频网| 亚洲精品激情| 久久亚洲电影| 亚洲欧美一区在线| 久久久男人天堂| 国产亚洲一区二区三区啪| 亚洲精品在线观看91| 成人综合一区| 久久这里只有精品一区二区| 久久国产88| 中文字幕系列一区| 国产不卡精品| 国产乱码精品一区二区三区四区 | 免费观看久久久4p| 亚洲啊v在线| 国产精品成人3p一区二区三区| 99pao成人国产永久免费视频| 国产精品久久观看| 精品久久不卡| 国产aⅴ精品一区二区四区| 91成人精品在线| 日本午夜精品久久久久| 亚洲精品一区二区在线播放∴| 亚洲欧洲一区二区天堂久久| 欧美日韩四区| 亚洲国产一区二区在线观看| 国产精品一区二区精品视频观看| 麻豆成人在线| 在线国产日韩| 日本伊人久久| 日韩av电影一区| 91大神在线观看线路一区| 日韩av网站在线免费观看| 亚洲精品一级二级三级| 亚洲tv在线| 91成人在线| 欧美激情视频一区二区三区在线播放| 国产精品白丝av嫩草影院| 久久av日韩| 精品国产精品国产偷麻豆| 日韩欧美精品一区| 午夜精品成人av| 国产精品88久久久久久| 日韩视频中文| 亚洲网址在线观看| 日韩国产一二三区| 日本久久二区| 欧美日韩夜夜| 国产一区二区三区日韩精品| 国产自产自拍视频在线观看| 亚洲天堂资源| 蜜桃tv一区二区三区| 免费在线看一区| 四虎精品永久免费| 久久国产精品美女| 亚洲国产福利| 日本美女一区| 在线亚洲成人| 欧美日韩91| 久久精品亚洲一区二区| 欧洲一级精品| 乱人伦精品视频在线观看| 日韩一区精品| 91麻豆国产自产在线观看亚洲| 亚洲韩日在线| 亚洲精品极品| 成人午夜网址| 亚洲一区中文| 国产欧美日本| 久久久久一区| 天堂va在线高清一区| 蜜桃精品视频| 国内精品福利| 日本特黄久久久高潮| 精品日韩视频| 综合一区av| 久久久久久色 | 国产一区成人| 欧美一区二区三区久久精品| 国产一区二区三区四区大秀| 电影亚洲精品噜噜在线观看 | 免播放器亚洲| 欧美国产日本| 9国产精品视频| 欧美aaaaaa午夜精品| 亚洲激情中文在线| 国产精品xxx在线观看| 日韩精品影视| 国产欧美高清| 欧美日中文字幕| 国产精品一级在线观看| 婷婷综合激情| 国产精品亚洲欧美| 亚洲成人不卡| 日韩一区二区三免费高清在线观看| 麻豆网站免费在线观看| 日韩一区二区三区精品| 久久久精品网| 美女视频黄 久久| 一区二区三区国产盗摄| 日韩欧美三级| 国产剧情一区二区在线观看|