さて、次のことができます。
http://jsfiddle.net/qzbNr/6/
CSS
div.floats {
padding: 10px;
background-color: #eee;
margin: 10px 0;
}
div.floats > div {
float: left;
width: 20px;
height: 20px;
background-color: #333;
}
div.floats > div + div {
margin-left: 10px;
}
div.overflow-hidden {
overflow: hidden;
}
div.box-sizing {
width: 100%;
box-sizing: border-box;
}
div.known-width {
/* 200px - 2 * 10px of padding */
width: 180px;
}
div.calc {
width: calc(100% - 20px);
}
div.after-pseudo:after {
content: "";
display: block;
clear: both;
}
div.clear {
float: none !important;
clear: both !important;
width: 0 !important;
height: 0 !important;
margin: 0 !important;
}
HTML
<div class="floats overflow-hidden box-sizing">
<div></div>
<div></div>
<div></div>
</div>
<div class="floats overflow-hidden known-width">
<div></div>
<div></div>
<div></div>
</div>
<div class="floats overflow-hidden calc">
<div></div>
<div></div>
<div></div>
</div>
<div class="floats after-pseudo">
<div></div>
<div></div>
<div></div>
</div>
<div class="floats extra-markup">
<div></div>
<div></div>
<div></div>
<div class="clear"></div>
</div>
オーバーフローのアプローチは面倒です。トリックはオーバーフローの非表示と定義された幅です。ボックス モデルのサイズに注意する必要があります。ツールチップなどのようなものを表示したい場合は、問題が発生しますが、それ以外にもあります。古典的で、かなりうまく機能します。
疑似アプローチは最高の私見です。実際、CSS には常に .clear:after があります。
何の意味もない要素を追加し、幅 !important などを適用する他のスタイルに注意する必要があるため、余分なマークアップのアプローチは最悪です。