blog

IE CSSバグシリーズ:フォームコントロールにおける両側マージンのバグ

IEは多くのCSSプロパティをサポートしていないことで悪名高く、サポートしている部分でもバグがあります。zoffix ZnetはIEにおけるCSSの問題を、問題と解決策の簡単な例とともに照合しています...

Feb 13, 2023 · 4 min. read
シェア

影響版

バグの影響: IE7, IE6

現れ

<input>要素と<textarea>要素は、margin属性とレイアウトを持つ親ノードから水平マージン属性を継承します。

チュートリアル開催日

2009-08-17 22:37:49 Mon

説明

Gérard Talbot さんの IE7 Bugs Collection ページで見つけた別のバグです。 Double Margin Bug に新しい症状が現れ、IE7 で表示されるようになりました。主な症状は <input> 要素と <textarea> 要素に影響します。例を見てみましょう。

代表例

例は別ページにあります。

注意: このデモは合法的なHTMLマークアップを示していますが、HTMLフォームを作成する適切な方法ではありません。

HTMLコード

<form action=""> 
<div> 
    <input type="text" name="ber"> 
    <textarea cols="10" rows="5" name="baz"></textarea> 
    <select name="ber"><option>foo</option></select> 
</div> 
</form> 

CSSコード:

div { 
    margin-left: 100px; 
    width: 100%; /* gives "layout" */ 
} 

今、レイアウトを持ち、margin-left属性が設定されている親ノードがあります。IE6とIE7では、<input>と<textarea>要素は親ノードである<div>からmargin属性を継承したかのように振る舞い、margin属性の値が二重に重なります。親ノードに margin-right 属性を設定しても同じ結果になります。より強力なブラウザでは、<input>と<textarea>要素は<select>と縦に並ぶべきです。

解決方法

以下は、上記の問題に対する解答を、解答タイプ別に並べたものです。

処方

解答日

2009-08-17 22:37:49 Mon

校閲

影響を受けるすべてのバージョン

説明

このバグの修正は、かなり乱暴で簡単な解決法です。一緒に見てみましょう:修正例は個別ページページにあります。

HTMLコード

<form action=""> 
<div> 
    <input type="text" name="ber"> 
    <textarea cols="10" rows="5" name="baz"></textarea> 
    <select name="ber"><option>foo</option></select> 
</div> 
</form> 

CSSコード

div { 
    margin-left: 100px; 
    width: 100%; /* gives "layout" */ 
} 
<!--[if lte IE 7]> 
    <style type="text/css"> 
        input, 
        textarea { 
            margin-left: -100px; 
        } 
    </style> 
<![endif]--> 

注意:私がCSSで定義した選択条件は、そのまま使ってもかまいません。バグに関連するフォーム要素にのみ適用することで、その中の負の数のマージンを必ず修正してください。

Read next

ビジネスに最適なLinuxサーバーシステムを選ぶには?

Linuxデスクトップが何百とあるのに比べ、Linuxサーバーの数はかなり限られていますが、それでも組織のニーズに合った理想的なソリューションを選ぶのは難しいものです。この記事では、私が12年間Linuxを使ってきた経験を活かして、この疑問に対する答えを見つけるお手伝いをしたいと思います。

Feb 11, 2023 · 6 min read