ホームページ ウェブフロントエンド htmlチュートリアル よくあるブラウザの互換性問題、ボックスモデルの2つのモードとCSSハックの知識解説_html/css_WEB-ITnose

よくあるブラウザの互換性問題、ボックスモデルの2つのモードとCSSハックの知識解説_html/css_WEB-ITnose

Jun 24, 2016 am 11:37 AM

什么是浏览器兼容问题?所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果。所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题。

总结一下我编写代码的时候遇到的浏览器兼容问题,跟大家学习。

一、解决无法在IE6下面设置1px高的容器(div)的问题。

  大家看看这一段代码:

  

  当然,这段代码在非IE6下是能够设置1px高度的div的(如左图),但是在IE6中的效果如右图:

  非IE6下: IE6下:

  解决方案:在div里面添加一个空格符( )以创建内容;再设置line-height:1px;即可。

  

二、透明度opacity不兼容的问题,opacity是属于css2.1的内容,在IE6中并不支持(另外position:fixed;也是css2.1的内容,并不支持IE6)。

  创建一个宽高100px的div,设置透明度为0.5,背景色黑色如下:

  

  

  效果图分别如下:左边为非IE6,右边是IE6

  非IE6:  IE6:

  会看到在IE6中并不支持该属性,解决方案:

  

  

3. IE6 での水平方向の二重マージンのバグ。 float に設定された div に設定されたマージンは、IE では 2 倍になります。これはie6に存在するバグです。

このようなバグを最初に引き起こすには、次の条件が満たされている必要があります:

1. 要素は float である必要があります;

2. 要素は水平マージン、マージン左、マージン右を持つ必要があります

3. 要素ブロック要素である必要があります

4. ブラウザは IE6 である必要があります。

上記の条件は必須なのでIE6でない限りこの問題は存在しません。解決策は簡単で、条件の 1 つを破棄するだけです。

例:

<head>    <meta charset="UTF-8">    <title>测试浏览器兼容问题</title>    <style>        body{            background: #fff;        }        .wrap{            width: 300px;            height: 150px;            margin:50px auto;            border: 2px solid #333;            overflow: hidden;        }        .wrap div{            height: 100px;            width: 100px;            background: #333;            float: left;             margin-left: 20px;        }    </style></head><body>    <div class="wrap">        <div></div>        <div></div>    </div></body>
ログイン後にコピー

レンダリングは次のとおりです: 左が非IE6、右がIE6です

IE6では、左側のmargin-leftの値が40pxであることがわかります。 、解決策は、display:inline を row 属性に変換することです。

4. IE6 では、画像に a タグを追加すると、デフォルトで枠線が表示されます。

img{

幅: 100px;

高さ: 100px;

}

レンダリングは次のとおりです: 左が非 IE6、右が IE6

この問題は比較的簡単に解決できます。画像の border:none; を設定するだけです。なお、aタグのborder値は設定されていませんが、画像が設定されています。

5. IE6 は、png 形式の画像の透明効果をサポートしていません。

解決策: プラグインを使用します: DD_belatedPNG.js プラグイン (このプラグインが必要な場合は、自分で Baidu を使用できます:))

使用方法の説明: 次のコードを貼り付けるだけです

<!--[if IE 6]>    <script src="js/DD_belatedPNG_0.0.8a.js"></script>    <script>    DD_belatedPNG.fix('*');    </script>    <![endif]-->
ログイン後にコピー

6. 所有権レイアウト haslayout について言及します。ブラウザの互換性の問題について話すときは、haslayout について言及する必要があります。

IE6と7では、レイアウトを持っていることがトリガーされない場合があります。ハレイアウトとは何ですか?私の理解では、要素 (タグ) にレイアウトがある場合、その要素は独自のデフォルト スタイルを取得し、すべてのレイアウトはこのデフォルト標準に従ってレイアウトされます。つまり、このレイアウトは正常であるということです。しかし、要素にデフォルトのレイアウトがない場合、レイアウトが乱雑になるでしょうか? (指定するスタイルは要素のレイアウト [デフォルト スタイル] に基づいているため)。したがって、この場合は、この所有レイアウトをトリガーし、haslayout をトリガーする必要があります。

haslayout をトリガーするには多くの方法があります:

1. 最も一般的で最も安全な方法: haslayout のない要素にzoom:1; を設定します (実際には、それが 1 であるかどうかは問題ではありません。なし)。他のブラウザではまったく認識されないため、最も安全であると言われています。

2. 高さを設定します: auto を除く任意の値。

3. フロートを設定します。

4. 幅を設定: auto 以外の任意の値。

7. ボックスモデルの 2 つのモードを紹介します。

皆さんはボックスモデルに精通しているはずです。ここでは、標準モードと奇妙なモードの2つのモードを紹介します

標準モード:通常、IE以外のブラウザで使用されます。計算方法:占有スペースの幅=コンテンツの幅+左右の内マージンの幅+左右のボーダーの幅+左右のマージンの幅(マージン+パディング+ボーダー+ content)

奇妙なモード:IE6を指す IE以前のバージョンの下側ボックスモデルの計算方法:占有領域の幅の合計=コンテンツ+マージン(コンテンツ+マージン)

類似点それらの違いは実際に簡単に確認できます:

同じ点: それらはすべてマージン、ボーダー、パディング、コンテンツで構成されます

違い: 標準モードのボックスの幅と高さの合計の計算方法が異なります。マージン、パディング、ボーダー、およびコンテンツの合計です。奇妙なモードでは、合計の幅はコンテンツからパディングとボーダーを差し引くことによって取得されます。

8. ブラウザの互換性には他にも問題があります。時間に限りがあるため、以下で一つ一つ説明しません:

①: さまざまなブラウザで img にギャップがあります (理由は次のとおりです)。 )

②: Ie6 では、最大幅、高さ、最小幅と高さが認識されず、min-width/height と Max-width/height は Ie6 では効果がありません、

③: 3 ピクセルの問題: 以下IE6、フローティング要素とフロー要素を並べて表示すると、それらの間に 3 ピクセルの問題が発生します。 (解決にはハックを使用します)

④:インライン要素を包含ボックスとして定義し、その包含ボックスに含まれる絶対配置要素をパーセント単位で配置すると混乱が生じます(ズーム:1)

⑤ : 複数ある場合 フローティング要素の途中にHTMLのコメント文がある場合、フローティング要素の幅が100%の場合、前の行の最後の文字が次の行に表示されます。

⑥: 2 つのブロック要素の場合、垂直マージン値は増加せず、それらの間の距離が最大マージン値になります。

  ⑦:优先级:被!important 注明的css属性具有最高优先级(.abc{color:red !important;})。但在ie6中!important具有一个bug:在同一组css属性中,!important不起作用。

  ⑧:火狐不识别background-position-y 或background-position-x;

  ⑨:ie6 不支持 fixed(前面有提到)

  ⑩:解决 ie6 最大、最小宽高 hack方法(这个说明一下)

  

/* 最小宽度 */.min_width{    min-width:300px;    _width:expression(parseInt(this.clientWidth) < 300 ? "300px" : this.clientWidth);}/* 最大宽度 */.max_width{   max-width:600px;   _width:expression(parseInt(this.clientWidth) > 600 ? "600px" : this.clientWidth);}/* 最小高度 */.min_height{   min-height:200px;   _height:expression(parseInt(this.clientHeight) < 200 ? "200px" : this.clientHeight);}/* 最大高度 */.max_height{   max-height:400px;   _height:expression(parseInt(this.clientHeight) > 400 ? "400px" : this.clientHeight);}
ログイン後にコピー

   ①①:z-index不起作用的 bug

九、css hack:前端开发人员根据不同的浏览器以及不同的版本而分别编写的特定的CSS样式,通俗理解就是专门为不同浏览器设置自己的样式。

  各版本IE的hark,代码表示:

  .bb{

    height:32px;

    background-color:#f1ee18; /*所有识别*/

    .background-color:#00deff\9; /*IE6、7、8识别*/

    +background-color:#f1ee18; /*IE6、7识别*/

    _background-color:#f1ee18; /*IE6识别*/

    }

  < div class ="bb">

  像刚刚png图片不支持插入的代码一样,这种hack用在专门浏览器下,用法如下:下面还有很多类。

    <!--[if IE 6]>        <script src="js/DD_belatedPNG_0.0.8a.js"></script>        <script>        DD_belatedPNG.fix('*');        </script>        <![endif]-->
ログイン後にコピー

符号

含义

示例

非运算符

除IE外都可识别

lt

Less than小于

gt

greater than大于

lte

less than或equal小于等于

gte

greater than或equal大于等于

|

或运算符

&

与运算符

/*类内部hack:*/    .header {_width:100px;}            /* IE6专用*/    .header {*+width:100px;}        /* IE7专用*/    .header {*width:100px;}            /* IE6、IE7共用*/    .header {width:100px\0;}        /* IE8、IE9共用*/    .header {width:100px\9;}        /* IE6、IE7、IE8、IE9共用*/    .header {width:330px\9\0;}    /* IE9专用*//*选择器Hack:*/    *html .header{}        /*IE6*/     *+html .header{}    /*IE7*/
ログイン後にコピー

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Apr 04, 2025 pm 11:54 PM

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する

See all articles