悲しいことに、これらの答えはどちらも絶対的な証拠ではなく、それぞれに 1 つの大きな欠点があります。
@rossipedia私はすべてのアイコンをこの方法で実装していましたが、非常にうまく機能します。しかし、これは大きな問題ですが、テキストを含むコンテナー内にアイコンを配置するために background-position プロパティを使用しているため、スプライトでは機能しません。また、可能な限りスプライトを使用しないことは、パフォーマンスと SEO に悪影響を及ぼします。
@Jamie Wong 最初のソリューションには、マークアップに 2 つの欠陥があります。要素をセマンティックに正しく使用することは、悲しいことに過小評価されている人もいますが、検索エンジンのランキングでフォームを優先することには利点があります。まず第一に、コンテンツが段落でない場合は p-tag を使用しないでください。代わりにスパンを使用してください。次に、img タグはコンテンツ専用です。非常に特殊なケースでは、このルールを無視する必要があるかもしれませんが、これはその 1 つではありません。
私の解決策:私はあなたに嘘をつきません。私はこれまでに多くの場所をチェックインしましたが、私見では最適な解決策はありません。ただし、これらの 2 つのソリューションはそれに最も近いソリューションです。
インライン ブロック ソリューション
HTML:
<div class="container">
<div class="icon"></div>
<span class="content">Hello</span>
</div>
CSS:
.container {
margin-top: 50px;
}
.container .icon {
height: 30px;
width: 30px;
background: #000;
display: inline-block;
vertical-align: middle;
}
.container .content {
display: inline-block;
vertical-align: middle;
}
「表示:インラインブロック;」美しいものです。あなたはそれで多くのことができ、レスポンシブデザインで非常にうまく機能します.
しかし、それはクライアント次第です。Inline-Block は IE6、IE7 ではうまく機能せず、IE8 でも問題が発生します。私は個人的に IE6 と 7 をサポートしなくなりましたが、IE8 はまだサポートされています。クライアントが Web サイトを IE8 で使用できるようにする必要がある場合、残念ながらインライン ブロックは選択できません。これをまず評価します。icon-element の黒い背景をスプライトに置き換えて配置し、そこに no-repeat をスローすると、出来上がりです。そうそう、プラスとして、垂直方向の配置を使用して、テキストを好きなように配置できます。
PS: そこに空の HTML タグがあることは承知しています。それを埋める方法について誰か提案があれば、私は感謝します。
高さ固定ソリューション
.clearfix:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
.clearfix {
display: inline-block;
}
html[xmlns] .clearfix {
display: block;
}
* html .clearfix {
height: 1%;
}
.container {
margin-top: 50px;
border: 1px solid #000;
}
.container .icon {
height: 30px;
width: 30px;
background: #000;
float:left;
}
.container .content {
line-height: 30px;
float: left;
display: block;
}
私はこれが嫌いです。テキストには固定行の高さが使用され、アイコンのボックスと同じ高さを選択すると、テキストはその高さに中央揃えされます。テキストを上に揃えるには、行の高さをカットします。下に関しては、それを position: absolute で固定し、コンテナの幅と高さを固定する必要があります。誰かがそれを要求しない限り、私はそれに入るつもりはありません. このパスの主な欠点は、高さが固定されていることです。固定された高さは常に柔軟性がなく、特にテキストの場合、多くの問題を引き起こす可能性があります (テキストを切り取らずにユーザーとして拡大縮小することはできなくなります。さらに、ブラウザーによってテキストのレンダリングが異なります)。そのため、どのブラウザーでもテキストが途切れないようにし、行の高さの内側に小刻みの余地があることを確認してください。PS: コンテナーの clearfix を忘れないでください。そしてもちろん、黒い背景をスプライトに置き換えて、位置に応じて + 繰り返しなしにします。
結論
可能であればインラインブロックを使用してください。;) そうでない場合は、深呼吸して 2 番目の解決策を試してください。