hasLayout によって発生する CSS バグの一覧

hasLayout によって発生する CSS バグの一覧
IE には長い間問題がありました。誰もがテストを受けたとき、誰もが笑顔でしたが、それはただのニヤニヤでした...

残念ながら、国内市場にはそのようなニヤニヤしたブラウザが溢れているので仕方がありません...( IE678の死の速度に注目してください

一つ一つ確認し、読み、抜粋し、記録し、練習し、要約した後、私はついに彼の悪い癖の原因を根本的に理解することができました。

レイアウトがあります!

まず定義:

これは IE のユニークな特性です。要素がサイズを計算して独自のコンテンツを整理するか、親要素に依存してコンテンツを計算して整理するかを決定します。これら 2 つの概念を区別するために、レンダリング エンジンは hasLayout 属性 (true または false) を使用します。属性が true の場合、この要素はレイアウトをトリガーすると言えます。

hasLayout属性を持つタグ:

<html>、<body>、<table>、<tr>、<td>、<td>、<img>、<hr>、<input>、<button>、<select>、<textarea>、<fieldset>、<legend>、<iframe>、<embed>、<object>、<applet>、<marquee>

この属性の重要性は何ですか?

要素オブジェクトのレイアウトがアクティブになると、その要素とその子要素の配置とサイズの計算が独立して実行されるため、つまり独立したレイアウトになるため、ブラウザはレイアウトされた要素を処理するためにより多くのコストを消費します。パフォーマンスを向上させるために、IE はこのプライベート プロパティを考案しました。

hasLayout をトリガーできる CSS 機能:


コードをコピー
コードは次のとおりです。

表示: インラインブロック
高さ: (auto以外の任意の値)
幅: (auto以外の任意の値)
フロート: (左 || 右)
位置: 絶対
書き込みモード: tb-rl
ズーム: (通常以外の任意の値)

IE7 は hasLayout CSS 機能をトリガーできます。


コードをコピー
コードは次のとおりです。

min-height: (任意の値)
min-width: (任意の値)
max-height: (none 以外の任意の値)
max-width: (none以外の任意の値)
overflow: (visible 以外の任意の値、ブロックレベル要素のみ)
overflow-x: (visible 以外の任意の値、ブロックレベル要素のみ)
overflow-y: (visible 以外の任意の値、ブロックレベル要素のみ)
位置:固定

口角が下がり目が細くなる臨床症状を見てみましょう。(以下の内容はすべて私自身がテストしたものです)

質問ブラウザデモ解決
1入力[ボタン | 送信]が中央に配置されていませんIE8バグ | 修正済み幅を追加
2 body{overflow:hidden;} はスクロールバーを削除しませんIE6/7バグ | 修正済みhtml{overflow:hidden;}に変更
3 hasLayoutタグには高さがあるIE6/7バグ | 修正済みオーバーフローを追加:hidden;*height:0
4フォーム>[hasLayout]要素にmargin-leftがある場合、子要素の[input | textarea]には2×margin-leftがあります。 IE6/7バグ | 修正済みフォーム > [hasLayout 要素] {margin-left: width;}
フォーム div{*margin-left:width÷2;}
5子要素に position:relative が設定されている場合、親要素に overflow:[hidden|auto] を設定することは、子要素に position:visible を設定することと同じです。 IE6/7バグ | 修正済み親要素に対して位置を相対的に設定します。
6リスト内での混乱したフローティング:リスト内で画像をフローティングすると、画像が通常の位置からはみ出したり、リストスタイルがなくなったりするIE8バグ | 修正済みリストスタイルを背景画像に置き換える
7 thは親要素のテキスト配置を自動的に継承しません。 IE8バグ | 修正済みth; に text-align:inherit を追加します。
8許可されるスタイルの最大数(link/style/@import(link)を含む)は32です。 IE6-8 ─ 常識99.99%の場合、遭遇することはありません
9 PNG画像の色と背景色は同じ値ですが、表示が異なりますIE6-7バグ | 修正済みpngcrushを使用して画像からガンマプロファイルを削除します
10 margin:0 auto; ブロック要素を水平方向に中央揃えにすることはできませんIE6-8バグ | 修正済みブロック要素に幅を追加する
11疑似クラス :first-line | :first-letter を使用すると、属性値に !important が存在すると、属性が無効になります。 IE8バグ | 修正済み!important は悪です。もう使用しないでください
12 :first-letterは無効になりましたIE6バグ | 修正済み:first-letter を、p:first-letter h1{} ではなく、h1、p:first-letter{} などの {} に最も近い場所に移動します。
13 Position:absolute要素、display:blockでは、:hoverでないときはテキストのみがクリック可能IE6/7バグ | 修正済みa に背景を追加します。背景が透明な場合は、background:url('任意のページ内のキャッシュされたファイルリンク') を使用します。background:url(#)[公式ソリューション] は、HTTP リクエストが増加するため推奨されません。
14 dt、dd、li 背景が無効IE6バグ | 修正済みdt、dd、li{位置:相対;}
15 <noscript /> 要素のスタイルは、JavaScript が有効になっている場合に表示されます。 IE6-8バグ | 修正済みjs を使用して、display:none を <noscript /> に追加します。
16 liの要素はベースラインから外れて下に引っ張られますIE8/9バグ | 修正済みliにdisplay:inlineまたはfloat:[direction]を設定する
17リスト内のliのリストスタイルが表示されないIE6/7バグ | 修正済みli に margin-left を追加して表示用のスペースを残します (ul には追加しないでください)
18画像を垂直方向に中央配置できませんIE6/7バグ/修正空のタグを追加し、display:inline-block; などの「レイアウト」に割り当てます。
19ポインターのスタイルをカスタマイズできませんIE6-8バグ | 修正済みポインタファイルへの絶対パスを設定する
20高さが高さで定義された高さを超えていますIE6バグ/修正_overflow:hidden; (推奨) または _font-size:0; を追加します。
21幅がwidthで定義された幅を超えていますIE6バグ/修正オーバーフローを追加します:hidden;
22二重マージンIE6 ─ 常識フロート要素にdisplay:inlineを追加する
23負のマージン値が非表示になる: hasLayout の親要素内の非 hasLayout 要素。負のマージンを使用すると、親要素の外側の部分は見えなくなります。 IE6/7バグ/修正親要素から hasLayout を削除するか、子要素に hasLayout を割り当てて position:relative; を追加します。
24 2つのフローティング要素のうち1つのテキストを斜体に設定すると、もう1つの要素は斜体テキストの要素の下にドロップされます。 IE6バグ/修正斜体テキストの要素に overflow:hidden を追加します。
25 3pxの間隔: フロート要素の後の要素は3pxの間隔になりますIE6バグ/修正ちょうど3pxなので、_margin-left: -3px;などの「ブルートフォース」を使用するか、floatを設定します。
26 text-alignはブロックレベル要素に影響しますIE6/7バグ/修正フロートを配置するか、テキストの配置を個別に設定してください

<<:  SpringBoot と Docker の統合の詳細なプロセス

>>:  CSS子要素選択親要素の実装

推薦する

CSSプロパティに基づいたボタンホバーボーダーと背景アニメーションのコレクション

ハートの属性不透明度: .999 は要素のスタッキングコンテキストを作成し、ボタン6と8のアニメーシ...

nginx で gzip 圧縮を実装してウェブサイトの速度を向上させる方法

目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...

ネイティブjsはショッピングカートのロジックと機能を実装します

この記事の例では、ショッピングカートのロジックと機能を実装するためのjsの具体的なコードを共有してい...

IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...

フロントエンド開発における一般的なテクニックのまとめ

1. 記事タイトルリストの右側に日付を表​​示する方法:コードをコピーコードは次のとおりです。 &l...

jsを使用して簡単なスネークゲームを書く

この記事では、参考までに、jsで書かれたシンプルなスネークゲームの具体的なコードを紹介します。具体的...

ウェブサイトのパフォーマンスを向上させるために画像を最適化する方法

目次概要画像圧縮とはJPEG/JPG JPGの利点JPGの使用シナリオJPGの欠点MozJPEG を...

CSSは高さを設定せずにdivを完全に中央に配置することを実現します

必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

Centos8 で yum を使用して rabbitmq をインストールするチュートリアル

/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

JavaScript を使用したコマンドライン アプリケーションの構築

目次1. ノードをインストールする2. Commander.jsをインストールする3. JavaSc...

JavaScript カスタム カレンダー効果

この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...