CSS進(jìn)階09-定位體系差異分析

(注1:如果有問(wèn)題歡迎留言探討讯屈,一起學(xué)習(xí)绑蔫!轉(zhuǎn)載請(qǐng)注明出處运沦,喜歡可以點(diǎn)個(gè)贊哦!)
(注2:更多內(nèi)容請(qǐng)查看我的目錄配深。)

1. display携添,position,float 之間的關(guān)系

這三個(gè)屬性均會(huì)影響盒的生成及布局篓叶,它們的交互如下:

  1. 如果 display 值為 none 烈掠,那么 position 和 float 不生效。這種情況下缸托,元素不生成盒左敌。

  2. 否則,如果 position 值為 absolute 或 fixed 嗦董,盒為絕對(duì)定位absolutely positioned母谎, float 的計(jì)算值為 none , display 的設(shè)置如下表京革。盒的位置由 top 奇唤、 right 、 bottom 和 left 屬性以及盒的包含塊決定匹摇。

  3. 否則咬扇,如果 float 值不為 none ,盒浮動(dòng)并且 display 的設(shè)置如下表廊勃。

  4. 否則懈贺,如果元素為根元素, display 設(shè)置如下表坡垫,除了其在CSS2.2中未定義 list-item 的指定值是否變?yōu)橛?jì)算值 block 或 list-item 梭灿。

  5. 否則, dislay 屬性值使用指定值冰悠。

2. 標(biāo)準(zhǔn)流 normal flow堡妒,浮動(dòng) floats 和絕對(duì)定位 absolute positioning 的比較

為了說(shuō)明標(biāo)準(zhǔn)流,相對(duì)定位溉卓,浮動(dòng)和絕對(duì)定位之間的區(qū)別皮迟,我們提供了一系列基于以下HTML的示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
  <HEAD>
    <TITLE>Comparison of positioning schemes</TITLE>
  </HEAD>
  <BODY>
    <P>Beginning of body contents.
      <SPAN id="outer"> Start of outer contents.
      <SPAN id="inner"> Inner contents.</SPAN>
      End of outer contents.</SPAN>
      End of body contents.
    </P>
  </BODY>
</HTML>

該文檔中假設(shè)有如下規(guī)則:

        body {
            display: block;
            font-size: 12px;
            line-height: 200%;
            width: 400px;
            height: 400px
        }

        p {
            display: block
        }

        span {
            display: inline
        }

在每個(gè)示例中搬泥,外部和內(nèi)部元素生成的框的最終位置有所不同。在每個(gè)插圖中伏尼,插圖左邊的數(shù)字表示標(biāo)準(zhǔn)流位置中的雙倍行距(為了清晰)忿檩。
注:下述圖表僅供參考,并不按比例顯示爆阶。它們旨在突出CSS 2.2中各種定位方案之間的差異燥透,而不是作為給定示例的參考渲染。

2.1 標(biāo)準(zhǔn)流 normal flow

考慮以下對(duì)outer和inner的CSS聲明扰她,這些聲明不會(huì)改變盒的標(biāo)準(zhǔn)流:

#outer { color: red }
#inner { color: blue }

P元素包含所有行內(nèi)內(nèi)容: 匿名行內(nèi)文本anonymous inline text
和兩個(gè)SPAN元素兽掰。因此,所有的內(nèi)容將被放置在一個(gè)IFC中徒役,處于由P元素建立的包含塊內(nèi)孽尽,產(chǎn)生類似如下內(nèi)容:

2.2 相對(duì)定位 relative positioning

為了查看相對(duì)定位的效果,我們指定:

#outer { position: relative; top: -12px; color: red }
#inner { position: relative; top: 12px; color: blue }

文本正常流向outer元素忧勿。然后杉女, outer的文本將流入其標(biāo)準(zhǔn)流內(nèi)位置并在第一行末尾被分割。然后鸳吸,包含文本(分布于三行)的這些行盒會(huì)整體位移“-12px”(向上移動(dòng))熏挎。
作為outer子元素inner的內(nèi)容,會(huì)在標(biāo)準(zhǔn)流中緊接"of outer contents"單詞(在1.5行)流入晌砾。然而坎拐,inner內(nèi)容本身相對(duì)于outer內(nèi)容偏移'12px'(向下),回到它們?cè)诘?行的原始位置养匈。
請(qǐng)注意哼勇,跟在outer元素之后的內(nèi)容不受outer相對(duì)定位的影響。



另外要注意呕乎,outer偏移量若為'-24px'积担,outer文本會(huì)和body文本產(chǎn)生重疊。
現(xiàn)在考慮通過(guò)如下規(guī)則將inner元素的文本浮動(dòng)到右邊:

#outer { color: red }
#inner { float: right; width: 130px; color: blue }

inner盒脫離標(biāo)準(zhǔn)流向右浮動(dòng)到right margins(盒的寬度已經(jīng)顯示指定)猬仁,文本正常流向inner盒帝璧。inner盒左側(cè)的行盒均被縮短,文檔中剩余的文本會(huì)流入它們湿刽。


為了展示'clear'屬性的效果的烁,我們?cè)谑纠刑砑恿艘粋€(gè)兄弟元素:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
  <HEAD>
    <TITLE>Comparison of positioning schemes II</TITLE>
  </HEAD>
  <BODY>
    <P>Beginning of body contents.
      <SPAN id=outer> Start of outer contents.
      <SPAN id=inner> Inner contents.</SPAN>
      <SPAN id=sibling> Sibling contents.</SPAN>
      End of outer contents.</SPAN>
      End of body contents.
    </P>
  </BODY>
</HTML>

帶有如下規(guī)則:

#inner { float: right; width: 130px; color: blue }
#sibling { color: red }

導(dǎo)致inner盒像之前一樣向右浮動(dòng),并且文檔中的剩余文本流入空出的空間:



但是诈闺,如果兄弟元素的clear屬性設(shè)置為'right'(即撮躁,生成的兄弟盒不會(huì)接受處于 其右側(cè)還緊鄰一個(gè)浮動(dòng)盒 的位置),那么兄弟內(nèi)容會(huì)在float之下開(kāi)始流動(dòng):

#inner { float: right; width: 130px; color: blue }
#sibling { clear: right; color: red }

2.3 絕對(duì)定位 absolute positioning

最后买雾,我們考慮絕對(duì)定位的影響把曼。考慮以下用于outer和 inner的CSS聲明:

#outer { 
    position: absolute; 
    top: 200px; 
    left: 200px; 
    width: 200px; 
    color: red;
}
#inner { color: blue }

這會(huì)導(dǎo)致outer盒的top相對(duì)于其包含塊containing block定位漓穿。定位盒的包含塊由最近的定位祖先positioned ancestor(或者嗤军,如果不存在,使用初始包含塊晃危,正如本例中所示)叙赚。outer盒的top side在其包含塊的top之下200px,left side在其包含塊的left之右200px僚饭。outer的子盒相對(duì)于其父級(jí)以標(biāo)準(zhǔn)方式流動(dòng)震叮。



下面的示例顯示一個(gè)絕對(duì)定位盒是一個(gè)相對(duì)定位盒的孩子。盡管父親outer盒實(shí)際上并沒(méi)有偏移鳍鸵,但將其“position”屬性設(shè)置為“relative”表示該盒可以用作定位后代的包含塊苇瓣。由于outer盒是一個(gè)行內(nèi)盒,被分割到多行偿乖,第一個(gè)行內(nèi)盒的top edge 和 left edge(由下圖中的粗虛線表示)作為“top”和“l(fā)eft”偏移的參考击罪。

#outer { 
  position: relative; 
  color: red 
}
#inner { 
  position: absolute; 
  top: 200px; left: -100px; 
  height: 130px; width: 130px; 
  color: blue;
}

結(jié)果如下所示:



如果不對(duì)outer盒進(jìn)行定位:

#outer { color: red }
#inner {
  position: absolute; 
  top: 200px; left: -100px; 
  height: 130px; width: 130px; 
  color: blue;
}

inner的包含塊將是初始包含塊initial containing block(見(jiàn)示例)。下圖顯示了此種情況下inner盒的位置贪薪。


如下例所示媳禁,可以使用相對(duì)定位和絕對(duì)定位來(lái)實(shí)現(xiàn)更改條。

<P style="position: relative; margin-right: 10px; left: 10px;">
I used two red hyphens to serve as a change bar. They
will "float" to the left of the line containing THIS
<SPAN style="position: absolute; top: auto; left: -1em; color: red;">--</SPAN>
word.</P>

可能會(huì)有如下結(jié)果:



首先画切,該段落(其包含塊邊在圖中顯示)正常流動(dòng)竣稽。然后它從包含塊的left margin向右偏移了'10px'(因此,為該偏移量預(yù)留了'10px'的margin)霍弹。作為變化條的兩個(gè)連字符脫離標(biāo)準(zhǔn)流并位于當(dāng)前行(由于'top:auto')毫别,從其包含塊(由P在其最終位置建立)的左邊緣開(kāi)始右移'-1em'。結(jié)果是變化條似乎“浮動(dòng)”到當(dāng)前行的左側(cè)庞萍。

參考

https://www.w3.org/TR/CSS22/visuren.html#visual-model-intro
https://www.w3.org/TR/CSS2/visuren.html
CSS規(guī)范 > 9 視覺(jué)格式化模型 Visual Formatting Model

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拧烦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钝计,更是在濱河造成了極大的恐慌恋博,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件私恬,死亡現(xiàn)場(chǎng)離奇詭異债沮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)本鸣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門疫衩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荣德,你說(shuō)我怎么就攤上這事闷煤⊥郏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鲤拿,是天一觀的道長(zhǎng)假褪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)近顷,這世上最難降的妖魔是什么生音? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮窒升,結(jié)果婚禮上缀遍,老公的妹妹穿的比我還像新娘。我一直安慰自己饱须,他們只是感情好域醇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冤寿,像睡著了一般歹苦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上督怜,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天殴瘦,我揣著相機(jī)與錄音,去河邊找鬼号杠。 笑死蚪腋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姨蟋。 我是一名探鬼主播屉凯,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眼溶!你這毒婦竟也來(lái)了悠砚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堂飞,失蹤者是張志新(化名)和其女友劉穎灌旧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绰筛,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢泰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铝噩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡蚂。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毛甲,到底是詐尸還是另有隱情年叮,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布丽啡,位于F島的核電站谋右,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏补箍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一啸蜜、第九天 我趴在偏房一處隱蔽的房頂上張望坑雅。 院中可真熱鬧,春花似錦衬横、人聲如沸裹粤。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遥诉。三九已至,卻和暖如春噪叙,著一層夾襖步出監(jiān)牢的瞬間矮锈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工睁蕾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苞笨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓子眶,卻偏偏與公主長(zhǎng)得像瀑凝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臭杰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案粤咪? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,751評(píng)論 1 92
  • 1.浮動(dòng)元素有什么特征将塑?對(duì)父容器脉顿、其他浮動(dòng)元素、普通元素点寥、文字分別有什么影響? 何謂浮動(dòng)元素艾疟?有什么特征?所謂浮動(dòng)...
    草鞋弟閱讀 814評(píng)論 0 1
  • (注1:如果有問(wèn)題歡迎留言探討,一起學(xué)習(xí)蔽莱!轉(zhuǎn)載請(qǐng)注明出處弟疆,喜歡可以點(diǎn)個(gè)贊哦!)(注2:更多內(nèi)容請(qǐng)查看我的目錄盗冷。) ...
    love丁酥酥閱讀 587評(píng)論 0 4
  • CSS 是什么 css(Cascading Style Sheets)怠苔,層疊樣式表,選擇器{屬性:值仪糖;屬性:值}h...
    崔敏嫣閱讀 1,482評(píng)論 0 5
  • 這幾天的自我反省柑司,也在反復(fù)看最美的教育一書,看書不為其他锅劝,只為可以找到自己的心靈雞湯攒驰。不發(fā)脾氣第三天,感謝自己...
    華貞閱讀 199評(píng)論 0 0