CSSフロートを1行に保つにはどうすればよいですか?


216

float: left左側のアイテムに使用している同じ行に2つのアイテムが欲しいです。

私はこれを一人で達成するのに問題はありません。問題は、私は2つの項目がしたい、あるとどまる同じ行にあなたは非常に小さく、ブラウザのサイズを変更した場合でも。ご存知のように...テーブルでどうだったか。

目標は、右側のアイテムが何に関係なくラッピングしないようにすることです。

divがの下にくるようにラップするのではなく、コンテナをストレッチするdivことをCSSを使用してブラウザに伝える方法float: right;float: left; div

私が欲しいもの:

                                   \
 +---------------+  +------------------------/
 | float: left;  |  | float: right;          \
 |               |  |                        /
 |               |  |content stretching      \   Screen Edge
 |               |  |the div off the screen  /  <---
 +---------------+  +------------------------\
                                             /

54
StackOverlowが小さな描画ウィジェットを追加して、マウスでこれらの図を作成できるとしたら、どれほどすばらしいでしょうか。デザイン指向のSEサイトに適しているかもしれませんが、それでも素晴らしいでしょう。
JoeCool

5
@JoeCool UX SEサイトには、実際にモックアップを作成するためのツールがすでにあります。meta.ux.stackexchange.com/questions/1291/...
率直hadder

回答:


77

このクロスブラウザーの最小幅ハックを使用<div>するコンテナーにフローティングsをラップします<div>

.minwidth { min-width:100px; width: auto !important; width: 100px; }

あなたはありもセット「オーバーフロー」する必要があるが、おそらくありません。

これは機能します:

  • !important組み合わせ宣言、min-width原因のすべてがIE7 +で同じ行に滞在します
  • IE6はを実装していませんが、宣言min-widthwidth: 100pxオーバーライドして!important、コンテナーの幅が100pxになるというバグがあります。

これは2つのフロートに対してはうまく機能しますが、3つに対しては機能しません。それは3人で働くことができますか?
tylerthemiler

15
唯一の問題は、固定された最小幅を強制することです。
Matt Montag

6
これは解決策ではありません。コンテンツが非常に小さくなったとき(質問を参照)、100px未満では同じ問題が発生するので、最小幅です。特にテーブルセルでは、これは問題のままです。
サンネ

絶対に衝撃的-私の問題を即座に解決しました。私は、この問題に対処するために、私が指定できるよりも多くのボックスハックを使用した単純な2列のブートストラップレイアウトで取り組んでいますが、これは完全に機能しました。なぜこの作品が魅力的なのか、ドムはなぜかという説明をありがとうございます。
nocarrier 2014

これはdivで動作する可能性がありますが、ul / liでテストしただけでは機能しません:(
AsGoodAsItGets

132

別のオプションは、フローティングではなく、空白のプロパティnowrapを親divに設定することです。

.parent {
     white-space: nowrap;
}

空白をリセットし、インラインブロック表示を使用して、divが同じ行に留まるようにしますが、幅を指定することもできます。

.child {
    display:inline-block;
    width:300px;
    white-space: normal;
}

ここにJSFiddleがあります:https ://jsfiddle.net/9g8ud31o/


4
間違いなく私が見た中で最高のソリューションです。それは私のユースケースで動作しますが、それがどれだけうまくサポートされているのかと思います。幸い、すべてにフロートを使用することはゆっくりと過去のものになりつつあります。
Ryan Ore

1
これがどのように機能するか説明できますか?または少なくともリンクがありますか?
Anirudhan J 2014

4
@AnirudhanJ難しいことではありません。Inline-blockは、要素をインラインテキストで通常どおりに流します(ただし、ブロックのパディング/マージン機能の一部を保持します)。そして、CSSに文字列をホワイトスペース:nowrapオプションでラップしないように指示するだけです(「通常の"再び子供に、それがすべてに伝わるのを避けるために)
ブライアン

しかし、右側のdivを画面の右側にフロートさせるにはどうすればよいですか?これは、改行しない2つのインラインブロックを並べて配置するだけです。
addMitt 2016年

また、letter-spacing:-3px(または任意の値が機能する)を使用して、インラインブロック要素間のスペースを削除することもできます。PS:受け入れられた回答よりも優れています
Claudiu

15

フローターの幅とマージンの合計よりも大きい最小幅のdivでフローターをラップします。

ハッキングやHTMLテーブルは必要ありません。


10

解決策1:

display:table-cell(広くサポートされていません)

解決策2:

テーブル

(私はハックが嫌いです。)


8

別のオプション:右の列をフロートさせないでください。フロートを超えて移動するには、左マージンを与えます。IE6を修正するにはハックが必要ですが、それが基本的な考え方です。


4

浮動ブロックレベルの要素がこの問題の最善の解決策であると確信していますか?

私の経験でCSSの難しさと、多くの場合、それはどのように私は作ることができる」思考(私は私がしたいことをする方法を見ることができない理由は、私は私のマークアップに関してトンネルビジョンに巻き込まれているということであることが判明し、これらを要素はこれを行いますか? ")戻ってそれが正確に何を達成する必要があるかを調べるのではなく、おそらくそれを容易にするためにhtmlを少し修正します。


うまく動作し、既存のレイアウトはそれに基づいています。テキストサイズを大きくしすぎたり、ブラウザウィンドウの幅を700px未満に変更すると、レイアウトが壊れる問題を修正しようとしています
Jiaaro

2

この問題にはテーブルを使用することをお勧めします。私は同様の問題を抱えていますが、テーブルが一部のデータを表示するためだけに使用されており、メインページのレイアウトではない場合は問題ありません。


2

この行をフロート要素セレクターに追加します

.floated {
    float: left;
    ...
    box-sizing: border-box;
}

それはパディングとボーダーが幅に追加されるのを防ぐので、たとえあなたが持っていたとしても、要素は常に並んでいます 幅33.33333%の3つの要素


0

ユーザーがウィンドウサイズを水平方向に縮小し、これによりフロートが垂直にスタックする場合、フロートを削除し、2番目のdiv(フロートでした)でmargin-top:-123px(あなたの値)とmargin-left:444px(あなたの値)を使用してdivがフロートで表示されるように配置します。このようにすると、ウィンドウが狭くなると、右側のdivはそのまま残り、ページが狭すぎてそれを含めることができないと消えます。...(私にとって)これは、ユーザーがブラウザウィンドウを狭めたときに、右側のdivが左側のdivの下に「ジャンプ」するよりも優れています。


-3

これを回避する方法は、jQueryを使用することでした。私がこのようにした理由は、AとBがパーセント幅であるためです。

HTML:

<div class="floatNoWrap">
    <div id="A" style="float: left;">
        Content A
    </div>
    <div id="B" style="float: left;">
        Content B
    </div>
    <div style="clear: both;"></div>
</div>

CSS:

.floatNoWrap
{
    width: 100%;
    height: 100%;
}

jQuery:

$("[class~='floatNoWrap']").each(function () {
    $(this).css("width", $(this).outerWidth());
});

1
CSSのフレームワーク?すべての JavaScript検索には-jqueryを使用する必要があります。品質を完全に無視するため、-jqueryを使用してCSSを明示的に検索する必要がありますか?正しく実行するか、まったく実行しないでください。
ジョン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.