CSSエッセンス:HasLayout初探査
2110 ワード
このシリーズはZouStrongがまとめて収録しています
ほとんどの低バージョンIEブラウザのスタイル異常は、haslayout(ページ表示異常の根源)に由来し、低バージョンIEでの要素のレイアウトを決定します.
haslayoutは低バージョンIE(IE 6、IE 7)レンダリングエンジン(Mosaic)の内部構成部分(CSS属性ではない)であり、haslayoutは低バージョンブラウザ独自のメカニズムと言える
haslayoutは、IE 8以降の標準モードでは廃止されています
IEでは、1つの要素が自分自身のコンテンツに対してサイズと組織を計算するか、親要素に依存してサイズと組織コンテンツを計算する.この2つの異なる概念を調整するために、IEレンダリングエンジンはhasLayoutの属性を採用し、属性値はtrueまたはfalseであることができる.要素のhasLayout属性値がtrueの場合、この要素にはレイアウト(layout) があると言います.要素がレイアウト(layout)を持っている場合、それは自身とその子孫要素のサイズと位置決めを担当します(だから、自分と中の内容を維持するためにより多くの代価がかかります) 要素がレイアウトされていない場合、その寸法と位置はlayoutを持つ最近の親要素によって 制御される.
レイアウトを持つ要素は他の人に責任を負わなければならないため、この要素は自分と中の内容を維持するためにより多くの代価を払う必要があり、性能を消費するため、IEの中には必要な要素だけがlayout(つまりhaslayoutがtrueに設定されている)を持っていることを意味し、layoutのない要素はIEの下のBUGの根源である.
デフォルトのレイアウト要素(不完全なリスト)
他の要素(ul、li、div、p、aなど)はデフォルトのレイアウトがなく、BUGの出現を招くことが多いが、解決策はその要素のhaslayoutをトリガしてlayoutを所有させ、BUGがまだ存在するかどうかを確認し、存在する場合は他の解決策を探すことだ.
注意:haslayoutは読み取り専用プロパティです.いったんトリガーされると、逆転できません.
標準プロパティとは異なり、一部のブラウザのプライベートCSSプロパティとは異なり、layoutはCSS宣言で直接設定できません.つまり「layoutプロパティ」というものはなく、要素自体が自動的にlayoutを持つか、CSSの声明を借りてこっそりlayoutを取得するかのどちらかです.
以下のcssプロパティを設定することで
IE 7にはhaslayoutをトリガーする追加の属性もあります
明確な幅またはフローティングを持つ要素の大部分はBUGを生成しません.haslayout(spanまたはdisplay:inlineなどのインライン要素)がトリガーされるとwidthまたはheight属性が無視されるため、widthまたはheightを設定して要素にlayoutを持つように命令することはできません.
zoomプロパティは常にhasLayoutをトリガーすることができ、一般的な方法はzoom:1を設定することです.これは、多くの場合、既存のスタイルに影響を与えない条件で要素のhaslayoutを励起することができるからです.
ほとんどの低バージョンIEブラウザのスタイル異常は、haslayout(ページ表示異常の根源)に由来し、低バージョンIEでの要素のレイアウトを決定します.
一.何だ?
haslayoutは低バージョンIE(IE 6、IE 7)レンダリングエンジン(Mosaic)の内部構成部分(CSS属性ではない)であり、haslayoutは低バージョンブラウザ独自のメカニズムと言える
haslayoutは、IE 8以降の標準モードでは廃止されています
IEでは、1つの要素が自分自身のコンテンツに対してサイズと組織を計算するか、親要素に依存してサイズと組織コンテンツを計算する.この2つの異なる概念を調整するために、IEレンダリングエンジンはhasLayoutの属性を採用し、属性値はtrueまたはfalseであることができる.
レイアウトを持つ要素は他の人に責任を負わなければならないため、この要素は自分と中の内容を維持するためにより多くの代価を払う必要があり、性能を消費するため、IEの中には必要な要素だけがlayout(つまりhaslayoutがtrueに設定されている)を持っていることを意味し、layoutのない要素はIEの下のBUGの根源である.
デフォルトのレイアウト要素(不完全なリスト)
html,body
table, tr, th, td
img
hr
input, button, file, select, textarea, fieldset
iframe,objects, applets, embed
他の要素(ul、li、div、p、aなど)はデフォルトのレイアウトがなく、BUGの出現を招くことが多いが、解決策はその要素のhaslayoutをトリガしてlayoutを所有させ、BUGがまだ存在するかどうかを確認し、存在する場合は他の解決策を探すことだ.
注意:haslayoutは読み取り専用プロパティです.いったんトリガーされると、逆転できません.
二.haslayoutのトリガー
標準プロパティとは異なり、一部のブラウザのプライベートCSSプロパティとは異なり、layoutはCSS宣言で直接設定できません.つまり「layoutプロパティ」というものはなく、要素自体が自動的にlayoutを持つか、CSSの声明を借りてこっそりlayoutを取得するかのどちらかです.
以下のcssプロパティを設定することで
float: left right
position:absolute fixed
display:inline-block table table-cell
width: auto
height:: auto
zoom: normal (Microsoft —— W3C )
writing-mode: tb-rl(Microsoft —— W3C )
IE 7にはhaslayoutをトリガーする追加の属性もあります
min-height: ( )
max-height: ( none )
min-width: ( )
max-width: ( none )
overflow: ( visible )
明確な幅またはフローティングを持つ要素の大部分はBUGを生成しません.haslayout(spanまたはdisplay:inlineなどのインライン要素)がトリガーされるとwidthまたはheight属性が無視されるため、widthまたはheightを設定して要素にlayoutを持つように命令することはできません.
zoom:1
zoomプロパティは常にhasLayoutをトリガーすることができ、一般的な方法はzoom:1を設定することです.これは、多くの場合、既存のスタイルに影響を与えない条件で要素のhaslayoutを励起することができるからです.