亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Chrome和Firefox中的高度呈現方式不同

Chrome和Firefox中的高度呈現方式不同

搖曳的薔薇 2019-08-19 17:35:19
Chrome和Firefox中的高度呈現方式不同我發現如果我們設置一個塊級別元素,有height:auto或height: 0~100%沒有設置父級的高度具有顯式值,并且其塊級別子級具有底部邊距,那么它將在Chrome中以不同方式計算高度,但在Firefox中則不同。對于設置的情況height: 1%:http://codepen.io/anon/pen/BjgKMRhtml {   background: pink;}body {   background: yellow;}div {   height: 1%;}inner {   margin-bottom: 30px;   margin-top: 20px;}<div>   <p class="inner">block level element</p></div>div塊的高度將計算為margin-bottom + content height of p element。我很困惑為什么height: 1%應該計算,auto因為父元素(html和body標簽)沒有明確設置其高度,但具有不同的高度,因為我們只是直接將高度設置為auto?如果我們直接將其設置為height: auto,則顯然只需將高度設置為子塊級元素的高度,該高度不包括其下邊距。html {   background: pink;}body {   background: yellow;}div {   height: auto;}inner {   margin-bottom: 30px;   margin-top: 20px;}<div><p class="inner">block level element</p></div>我已經閱讀了CSS 2.1規范,并考慮我的問題可能包含高度屬性和邊緣折疊主題,但仍然無法理解為什么它在Chrome ver中表現不同。47.0.2526,雖然Firefox版本。44.0.2將顯示具有相同值的高度。列出的參考文獻:https://www.w3.org/TR/CSS2/visudet.html#the-height-property10.5:百分比...如果未明確指定包含塊的高度(即,它取決于內容高度),并且此元素未完全定位,則值將計算為“auto”。...10.6.3:overflow計算時正常流程中的塊級非替換元素visible。...如果'height'是'auto',則高度取決于元素是否具有任何塊級子元素以及它是否具有填充或邊框:元素的高度是從其頂部內容邊緣到下面第一個適用的距離:如果框使用一行或多行建立內聯格式化上下文,則為最后一個行框的下邊緣如果孩子的下邊距沒有因元素的下邊距而崩潰,則其最后一個流入子項的底部(可能是折疊)邊緣的下邊緣最后一個流入子項的下邊界邊緣,其上邊距不會隨元素的下邊距折疊零,否則https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#collapsing-margins8.3.1折疊邊距。如果元素沒有頂部邊框,沒有頂部填充,并且子節點沒有間隙,則插入塊元素的上邊距將與其第一個流入塊級子節點的上邊距折疊。如果盒子沒有底部填充,則“高度”為“auto”且“min-height”為零的流入塊盒的底部邊緣將與其最后一個流入塊級子的底部邊緣折疊底部邊框和孩子的下邊距不會因具有間隙的上邊距而崩潰。...如果框的頂部和底部邊距相鄰,則邊距可能會通過它折疊。在這種情況下,元素的位置取決于其與邊緣正在折疊的其他元素的關系。如果元素的邊距與其父元素的上邊距折疊,則框的上邊框邊緣定義為與父元素相同。否則,元素的父元素不參與邊距折疊,或僅涉及父元素的下邊距。元素頂部邊框邊緣的位置與元素具有非零底邊框時的位置相同。
查看完整描述

1 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

首先,你有W3C標準,這是一套針對瀏覽器制造商的指南。

然后你就擁有了瀏覽器制造商,他們可以自由地做任何他們想做的事情(由Internet Explorer的偏差歷史證明)。

特別是,對于CSS百分比高度,瀏覽器之間的行為存在明顯差異。

你發布了一個例子。這是另一個:

Flexbox中的百分比高度:Chrome / Safari與Firefox / IE

使用flexbox時,Chrome和Safari會根據父級height屬性的值解析彈性項目的百分比高度。Firefox和IE11 / Edge優先考慮父級的彈性高度。

Webkit瀏覽器似乎遵循對規范的更傳統的解釋:

CSS height屬性

百分比
指定百分比高度。百分比是根據生成的框的包含塊的高度計算的。如果未明確指定包含塊的高度且此元素未絕對定位,則該值將計算為“auto”。

auto
高度取決于其他屬性的值。

換句話說,對于在流入子項上工作的百分比高度,父項必須具有設置的高度。

這是對規范的傳統解釋:術語“高度”是指height財產的價值。我個人認為,這種語言含糊不清,可以解釋,但height財產要求已成為主要的實施方式。在處理百分比值時,我從未見過min-heightmax-height在父母身上工作過。

然而,最近,Firefox和IE擴大了他們的解釋,以接受彈性高度。

Firefox和IE的示例使用父級的彈性高度作為子級百分比高度的參考:

知道哪些瀏覽器符合規范有點困難,因為正如我之前提到的那樣,規范語言似乎含糊不清并且易于解釋。

隨著定義的這一部分的最后一次更新是在1998年(CSS2),以及新的高度形式如flex高度的出現,更新似乎早就應該了。

我認為可以說,當涉及到百分比高度時,在規范定義獲得更新之前,您可以預期瀏覽器之間的渲染差異。


替代方案

當希望子元素占據父元素的全高時,可以考慮以下兩種方法。

  1. 申請display: flex父母。這會自動設置align-items: stretch,告訴孩子擴展父級的完整可用高度。

  2. 適用position: relative于父母和position: absolute; height: 100%; width: 100%孩子。使用絕對定位,百分比高度將在父級上沒有指定高度的情況下工作。


查看完整回答
反對 回復 2019-08-19
  • 赫塔繆勒_FreshFish
    赫塔繆勒_FreshFish
    首先,你有W3C標準,這是一套針對瀏覽器制造商的指南。 然后你就擁有了瀏覽器制造商,。。。。。。。。。。。。。。。。。。。。 這原文和回復看得我想死,求你直接來一份英文的可以嗎,我覺得我可以的。
  • 1 回答
  • 0 關注
  • 894 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號