divをコンテナーの下部にフロートさせるにはどうすればよいですか?


282

float:right(またはleft)を何度も使用して、コンテナーの上部にあるイメージとインセットボックスをフローティングしました。最近、フロートで得られる通常のテキストの折り返し(上と左にのみテキストが折り返される)を使用して、別のdivの右下隅にあるdivをフロートする必要性に直面しました。

フロートにボトム値がない場合でも、これは比較的簡単なはずだと思いましたが、いくつかのテクニックを使用してそれを行うことができず、Webを検索しても絶対配置を使用する以外は何もできませんでしたが、これはありません正しい単語の折り返し動作を指定します。

これは非常に一般的なデザインだと思っていましたが、明らかにそうではありません。誰も提案がない場合は、テキストを別々のボックスに分割し、divを手動で配置する必要がありますが、それはかなり不安定であり、必要なすべてのページで行う必要はありません。

編集:ここに来る人のための単なるメモ。上記の重複としてリンクされている質問は、実際には重複ではありません。インセット要素をテキストで折り返す必要があるため、完全に異なります。実際、ここで最も投票された回答への回答は、リンクされた質問の回答がこの質問への回答として間違っている理由を明らかにしています。とにかく、この問題に対する一般的な解決策はまだないようですが、ここおよびリンクされた質問に投稿された解決策のいくつかは、特定のケースで機能する場合があります。


158
何かを上に沈める方法がわかるとすぐに、この「底に浮かぶ」問題に
取り組み

34
@ Shog9結論:cssには「シンク」要素が必要です。
ゲイルベア

1
ここでの回答のほとんどは、「沈められた」要素の上にテキストを折り返す必要があることを無視しています。しかし、Stuの答えは(JQueryで)機能します。
スティーブベネット

1
私はそれがそれほどおかしいとは思わない、私はどのようにして実際の生活で最初に右または左に浮かぶことができるのか知りたい...それは完全にZ軸の視点で浮いている。
Whimusical 2013

回答:


302

親divをに設定しposition: relative、次に内部divを...に設定します

position: absolute; 
bottom: 0;

...そしてあなたは行き​​ます:)


101
ええ、私はこれも行く方法だと思いましたが、位置を絶対に設定すると、要素は含まれている要素のレイアウトに参加しなくなったので、折り返しがなく、下隅のテキストが見えなくなります。
スティーブンマーティン

2
おそらく、フロートを含むdivと位置相対および絶対テクニックの組み合わせを使用できます。
dylanfm 2008年

1
フロートを右に設定してから、たとえば負の上部相対位置を適用すると、画像がコンテナ内でその前にテキストレンダリングの上または下にプッシュされます。
Felix Lamouroux、2011

6
絶対的な位置は、残念ながら容認できない解決策として言及されました
Vitaly

2
いいえ。これは機能しません。代わりに、ページ全体の下部に配置されます。
Erik Aronesty 2014年

76

これを機能させる方法は次のとおりです。

  • エレメントを通常どおりに浮かせます
  • を使用して親divを180度回転します。

    -moz-transform:rotate(180deg);
    -webkit-transform:rotate(180deg);
    -o-transform:rotate(180deg);
    -ms-transform:rotate(180deg);
    filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);

    JSfiddle:http ://jsfiddle.net/wcneY/

  • 次に、左に浮かぶすべての要素を180度回転させて(クラスを指定)、それらを再びまっすぐにします。出来上がり!彼らは底に浮かぶ。


1
コンテンツから動的な高さを保つことができるため、これが最良のソリューションです。ありがとう
ジョーダンモリス

2
これは素晴らしいソリューションですが、Firefox Nightlyの開発ツールを台無しにしています。divピッカーは、回転したdivとその内部のすべてを無視しているようです。
Traubenfuchs 2014年

右下のボックスでテキストを折り返すことができません。すべての文字が逆さまになり、下から上にread(?)します。jsfiddle.net/xu8orw5L
robert4

これは狂気の男です!すべてを逆さまにする必要がない場合に機能します
MQ87

5
これは鬼畜作品ですぐに使っています。
Stumblor

49

数日間様々なテクニックに苦労した後、私はこれは不可能に思われると言わざるを得ません。(私がしたくない)javascriptを使用することさえ可能ではないようです。

理解していない可能性がある人のために明確にするために-これは私が探しているものです:パブリッシングでは、インセット(図、表、図など)をレイアウトして、その一番下が最後の一番下に並ぶようにしますブロック(またはページ)のテキストの行。テキストがページのどちら側にあるかに応じて、上から右または左に自然にインセットの周りを流れます。html / cssでは、フロートスタイルを使用して、インセットの上部をブロックの上部に揃えることは簡単ですが、驚いたことに、一般的なレイアウトタスクであるにもかかわらず、テキストの下部とインセットを揃えることは不可能に見えます。 。

ぎりぎりの提案がない限り、このアイテムの設計目標を再検討する必要があると思います。


6
いいえ、これは印刷出版ではありません。html / cssだけを使用して達成するのは非常に困難または不可能ないくつかのことがあります。
Traingamer 2008年

私はこれがかなり古いものであることを知っていますが、このバージョンの質問は、同じ問題が発生したときにポップアップ表示されたものであり、ディスプレイを使用して解決しました。単純にフレックスグローとして底にフロートさせたかったのです。1.もちろん、成長方向はカラムである必要があります。
Alexandra

@Alexandraの右下のボックスは、通常のフロートが行うように、テキストをコーナーの周りにプッシュしますか?「テキストフロー」はOPの要件の1つです
Ejaz

以前にこのような問題に遭遇したことがあり、CSSグリッドを使用してそれを取り除きました。問題の視覚的表現を添付した場合のみです。この質問は、CSSグリッドが私たちを救うためにやって来てから11年後におそらく答えられるでしょう。

16

JQueryでこれを実現するには、フロートの右側に幅0のストラット要素を配置し、次に、親の高さから浮動子の高さを差し引いて、ストラット(またはパイプ)のサイズを変更します。

jsが始まる前に、位置絶対アプローチを使用しています。これは機能しますが、テキストフローを背後に流すことができます。したがって、ストラットアプローチを有効にするために、静的位置に切り替えます。(ヘッダーは親要素、カットアウトは右下にあるもの、パイプはストラットです)

$("header .pipe").each(function(){
    $(this).next(".cutout").css("position","static");       
    $(this).height($(this).parent().height()-$(this).next(".cutout").height());                                                 
});

CSS

header{
    position: relative; 
}

header img.cutout{
    float:right;
    position:absolute;
    bottom:0;
    right:0;
    clear:right
}
header .pipe{
    width:0px; 
    float:right

}

パイプが最初に来て、次にカットアウト、そしてテキストがHTML順になります。


2
これは大変な作業であり、スタイリングにjavascriptを使用することは、後からcssを変更すると簡単に混乱するため、常に最後の手段となるフォールバックです。しかし、はい、これは機能します。そのため、そのdivをワードラップで一番下に揃えることが重要な場合は、どうぞ。
Wytze

2
これは私にとってはうまくいきましたが、正確には言えませんでした。そこに.height()が原因かもしれません。多くのブロックレベルのテキスト(複数のdivや段落など)がフローティングブロックを囲んでいるように見える場合、.height()はテキストが行を分割する方法に応じて小さな変数を取得します。
atwixtor 2013

私は逆に行き、コンテナー(ヘッダー)の幅と折り返さなければならない1つのコンテンツ(ロゴ)を確認し、絶対配置されたコンテンツ(ナビゲーション)に最大幅を設定しました。フロートや余分な要素はありません。まだJSがあり、何をラップする必要があるかを知ることに依存しています。
icrf 2015

これは機能します。それをウィンドウのサイズ変更ハンドラにすることも忘れないでください。そして、手作業で内側のボックスのマージンを差し引く必要がありました。
dspeyer

13

これにより、ページの下部に固定divが配置され、下にスクロールすると下部に固定されます

#div {
    left: 0;
    position: fixed;
    text-align: center;
    bottom: 0;
    width: 100%;
}

4
これは彼がやろうとしていることをしません。@Timotyと@Yonaはそれを正しく理解しました。
アダム

11

divを別のdivに入れ、親divのスタイルをposition:relative;次に設定します。子divで、次のCSSプロパティを設定します。position:absolute; bottom:0;


1
ティモシーへの私のコメントを参照してください。ここでわかるようにemsoft.ca / absolutebottomtest.htmlワードラップは機能しません。また、内容の一部が不明瞭になっています。
スティーブンマーティン

これは、子div内にテキストが必要ない場合に最適なソリューションです。
Aenadon

4

テキストの一番下の行だけがブロックの側面に行くのが問題ない場合(完全にその周りとその下にあるのではなく、ブロックを終了して新しいものを開始することなく行うことはできません)、それは親ブロックの下隅の1つにブロックをフロートさせることは不可能ではありません。ブロック内の段落タグにコンテンツを配置し、ブロックの右下隅へのリンクをフロートさせたい場合は、リンクを段落ブロック内に配置し、それをfloat:rightに設定してから、clearでdivタグを挿入します:両方とも段落タグの終わりのすぐ下に設定されます。最後のdivは、親タグがフローティングタグを囲むようにすることです。

<div class="article" style="display: block;">
    <h3>title</h3>
        <p>
            text content
            <a href="#" style="display: block;float: right;">Read More</a>
        </p>
    <div style="clear: both;"></div>
</div>

4

親要素をposition:relativeとして設定すると、子を最下部の設定position:absoluteに設定できます。そして底:0;

#outer {
  width:10em;
  height:10em;
  background-color:blue;
  position:relative; 
}

#inner {
  position:absolute;
  bottom:0;
  background-color:white; 
}
<div id="outer">
  <div id="inner">
    <h1>done</h1>
  </div>
</div>
  


3

テキストをうまく折り返す場合:-

.outer {
  display: table;
}

.inner {
  height: 200px;
  display: table-cell;
  vertical-align: bottom;
}

/* Just for styling */
.inner {
  background: #eee;
  padding: 0 20px;
}
<!-- Need two parent elements -->
<div class="outer">
  <div class="inner">
    <h3>Sample Heading</h3>
    <p>Sample Paragragh</p>
  </div>
</div>


3

私はこれが古いことを知っていますが、最近この問題に遭遇しました。

絶対位置を使用するdivアドバイスは本当にばかげています。なぜなら、フロート全体が絶対位置でポイントを失うからです。

今、私は普遍的な解決策を見つけることができませんでしたが、多くの場合、一連のスパン要素のように何かを一列に表示するためだけにフローティングdivを適切に使用します。縦にそろえることはできません。

同様の効果を得るには、これを行うことができます。divをフローティングにせず、displayプロパティをに設定しinline-blockます。その後、垂直方向に配置できますが、それでもかまいません。あなただけのセット親のdivのプロパティに必要なvertical-alignのいずれかにtopbottommiddleまたはbaseline

それが誰かを助けることを願っています


これが一般的な状況で機能するかどうかはわかりませんが、jQueryMobileでは完全に機能しません。
Wytze 2012年

これは、divを下または横に配置するために必要なものです。大きな助けになります
StudioX

2

Flexboxの導入により、これはあまりハッキングすることなく非常に簡単になりました。align-self: flex-end子要素上で、交差軸に沿って配置します

.container {
  display: flex;
}
.bottom {
  align-self: flex-end;
}
<div class="container">
  <div class="bottom">Bottom of the container</div>
</div>

出力:


質問を完全に読んでいないようです。下に配置するのは簡単ですが、それでは望ましいフローティング動作が得られません。
Dennis98

残念ながら答えはなく、sthも表示されません。それ以外の場合は答えが間違っています。修正が必要です。
Dennis98


1

私はテーブルを作るだけです。

<div class="elastic">
  <div class="elastic_col valign-bottom">
    bottom-aligned content.
  </div>
</div>

そしてCSS:

.elastic {
  display: table;
}
.elastic_col {
  display: table-cell;
}
.valign-bottom {
  vertical-align: bottom;
}

実際に見る:http :
//jsfiddle.net/mLphM/1/


1

私はこれらのテクニックのいくつかを試してみましたが、以下はうまくいきました、それで他のすべてが失敗した場合、それは私のために働いたのでこれを試してください:)

<style>
  #footer {
    height:30px;
    margin: 0;
    clear: both;
    width:100%;
    position: relative;
    bottom:-10;
  }
</style>

<div id="footer" >Sportkin - the registry for sport</div>

1

@ dave-kokのこのアプローチを選択しました。ただし、スクロールせずにコンテンツ全体が適合する場合にのみ機能します。誰かが改善してくれるかどうか私は感謝します

outer {
    position: absolute;
    bottom: 0;
    width: 100%;
    height: 100%;
}
.space {
    float: right;
    height: 75%;  
}
.floateable {
    width: 40%;
    height: 25%;
    float: right;
    clear: right;  
 }

ここにコード http://jsfiddle.net/d9t9joh2/


1

これは、フレックスボックスで可能になりました。親divの「display」を「flex」に設定し、「margin-top」プロパティを「auto」に設定するだけです。これは両方のdivのプロパティを歪めません。

.parent {
  display: flex;
  height: 100px;
  border: solid 1px #0f0f0f;
}
.child {
  margin-top: auto;
  border: solid 1px #000;
  width: 40px;
  word-break: break-all;
}
<div class=" parent">
  <div class="child">I am at the bottom!</div>
</div>


1

確かではありませんが、子divで絶対位置ではなく相対位置を使用すると、以前に投稿されたシナリオが機能するように見えました。

#parent {
  width: 780px;
  height: 250px;
  background: yellow;
  border: solid 2px red;
}
#child {
  position: relative;
  height: 50px;
  width: 780px;
  top: 100%;
  margin-top: -50px;
  background: blue;
  border: solid 2px green;
}
<div id="parent">
    This has some text in it.

    <div id="child">
        This is just some text to show at the bottom of the page
    </div>
</div>

そして、テーブルはありません...!


0

相対配置が必要で、DIVがまだ希望どおりにならない場合は、テーブルを使用して、コンテンツを下に配置するセルでvalign = "bottom"を設定します。DIVはテーブルを置き換えることになっているので、それはあなたの質問への良い答えではないことを知っていますが、これは私が最近イメージキャプションで実行しなければならなかったものであり、これまでのところ問題なく機能しています。


0

以前に投稿したこのシナリオも試しました。

div {
  position: absolute; 
  height: 100px; 
  top: 100%; 
  margin-top:-100px; 
}

絶対配置では、ページの読み込み時にdivがブラウザーの最下部に固定されますが、ページが長い場合、下にスクロールすると、スクロールされません。相対的な位置に変更しましたが、完璧に機能します。divはロード時に真っ直ぐ下に行きますので、底に着くまで実際には見えません。

div {
      position: relative;
      height:100px; /* Or the height of your image */
      top: 100%;
      margin-top: -100px;
}

未知の高さで動作させる方法はありますか?残念ながらマージントップ:-100%; 私が推測しているコンテナの高さを指します。
クリスチャン

0

興味深いアプローチの1つは、いくつかの右フロート要素を互いに積み重ねることです。

<div>
<div style="float:right;height:200px;"></div>
<div style="float:right;clear:right;">Floated content</div>
<p>Other content</p>
</div>

唯一の問題は、ボックスの高さがわかっている場合にのみ機能することです。


0

Stuの答えはこれまでの作業に最も近いものですが、テキストの折り返し方に基づいて、外側のdivの高さが変わる可能性があるという事実は考慮されていません。したがって、内側のdivを(「パイプ」の高さを変更することによって)再配置するのは1回だけでは不十分です。この変更はループ内で発生する必要があるため、正しい位置に到達したかどうかを継続的に確認し、必要に応じて再調整できます。

前の回答のCSSはまだ完全に有効です。

#outer {
    position: relative; 
}

#inner {
    float:right;
    position:absolute;
    bottom:0;
    right:0;
    clear:right
}

.pipe {
    width:0px; 
    float:right

}

ただし、JavaScriptは次のようになります。

var innerBottom;
var totalHeight;
var hadToReduce = false;
var i = 0;
jQuery("#inner").css("position","static");
while(true) {

    // Prevent endless loop
    i++;
    if (i > 5000) { break; }

    totalHeight = jQuery('#outer').outerHeight();
    innerBottom = jQuery("#inner").position().top + jQuery("#inner").outerHeight();
    if (innerBottom < totalHeight) {
        if (hadToReduce !== true) { 
            jQuery(".pipe").css('height', '' + (jQuery(".pipe").height() + 1) + 'px');
        } else { break; }
    } else if (innerBottom > totalHeight) {
        jQuery(".pipe").css('height', '' + (jQuery(".pipe").height() - 1) + 'px');
        hadToReduce = true;
    } else { break; }
}

0

私はそれが非常に古いスレッドであることを知っていますが、それでも答えたいと思います。誰かが以下のCSSとHTMLに従っている場合、それは動作します。子フッターのdivは接着剤のように下に貼り付けられます。

<style>
        #MainDiv
        {
            height: 300px;
            width: 300px;
            background-color: Red;
            position: relative;
        }

        #footerDiv
        {
            height: 50px;
            width: 300px;
            background-color: green;
            float: right;
            position: absolute;
            bottom: 0px;
        }
    </style>


<div id="MainDiv">
     <div id="footerDiv">
     </div>
</div>

0

margin-topコンテナーの下部にフッターを設定する目的でcss プロパティを使用するには、また、css text-align-lastプロパティを使用し てフッターのコンテンツを中央に設定します。

 <div class="container" style="margin-top: 700px;  text-align-last: center; ">
      <p>My footer Here</p>  
 </div>

0

ああ、若者たち...ここにいる:

<div class="block">
    <a href="#">Some Content with a very long description. Could be a Loren Ipsum or something like that.</a>
    <span>
        <span class="r-b">A right-bottom-block with some information</span>
    </span>
    <span class="clearfix"></span>
</div>
<style>
    .block {
        border: #000 solid 1px;
    }

    .r-b {
        border: #f00 solid 1px;
        background-color: fuchsia;
        float: right;
        width: 33%
    }

    .clearfix::after {
        display: block;
        clear: both;
        content: "";
    }
</style>

絶対位置はありません!レスポンシブ!古い学校


-1

かなり古い質問ですが、それでも...次のようにdivをページの下部にフロートできます。

div{
  position: absolute; 
  height: 100px; 
  top: 100%; 
  margin-top:-100px; 
}

魔法がどこで起こるかを見ることができます。親divの下部にフローティングする場合も同じようにできると思います。


4
ただし、テキストは折り返されません。その後ろにテキストが表示されます。
ゲイルベア'28

3
はい、これは、CSSの意味での「浮動」ではありません。「移動」しますが、浮遊しません。
ErikE 2013年

-1

シンプル... htmlファイルの右側に...下部に「フッター」(または下部に必要なdiv)があります。だからこれをしないでください:

<div id="container">
    <div id="Header"></div>
    <div id="Footer"></div>
    <div id="Content"></div>
    <div id="Sidebar"></div>
</div>

これを実行してください(フッターを下に置きます)。

<div id="container">
    <div id="Header"></div>
    <div id="Content"></div>
    <div id="Sidebar"></div>
    <div id="Footer"></div>
</div>

これを行った後、CSSファイルに移動して、「サイドバー」を左にフロートさせることができます。次に、「コンテンツ」を右にフロートさせ、次に「フッター」を両方クリアします。

これでうまくいくはずです。


-2

position:absolute; bottom:0;CSS内のdiv IDに追加することで、これを最初の試行で機能させることができました。親スタイルは追加しませんでしたposition:relative;

FirefoxとIE 8の両方で完璧に動作し、IE 7ではまだ試していません。


-2

別の答えは、テーブルと行スパンの賢明な使用です。前の行のすべてのテーブルセル(メインコンテンツのセルを除く)をrowspan = "2"に設定すると、メインテーブルセルの下部に常に1つのセルホールがあり、常にvalign = "bottom"を配置できます。

高さを1行に必要な最小値に設定することもできます。したがって、残りのテキストが占めるスペースに関係なく、常に一番下の行にお気に入りのテキストが表示されます。

私はすべてのdivの答えを試しましたが、私が彼らに必要なことをさせることができませんでした。

<table>
<tr>
   <td valign="top">
     this is just some random text
     <br> that should be a couple of lines long and
     <br> is at the top of where we need the bottom tag line
   </td>
   <td rowspan="2">
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     this<br/>
     is really<br/>
     tall
  </td>
</tr>
<tr>
  <td valign="bottom">
      now this is the tagline we need on the bottom
  </td>
</tr>
</table>

2
テーブルベースのデザインは、ほとんどのWeb開発者の間で悪い習慣と見なされています。ページのスタイル設定にはCSSが推奨され、よりセマンティックな方法で同じことを実現できます。
LoveAndCoding 2012年

テーブルは非常にマルチフォーマット対応(印刷、画面、モバイル)ではなく、フローがありません。代替案を提供するだけです。
cdturner 2012年

-2

これが私の解決策です:

<style>
.sidebar-left{float:left;width:200px}
.content-right{float:right;width:700px}

.footer{clear:both;position:relative;height:1px;width:900px}
.bottom-element{position:absolute;top:-200px;left:0;height:200px;}

</style>

<div class="sidebar-left"> <p>content...</p></div>
<div class="content-right"> <p>content content content content...</p></div>

<div class="footer">
    <div class="bottom-element">bottom-element-in-sidebar</div>
</div>

-2

1px幅の空の要素を使用して、それをフローティングにしてみてください。次に、実際に配置する要素をクリアし、空の要素の高さを使用して、要素が下に行く距離を制御します。

http://codepen.io/cssgrid/pen/KNYrey/

.invisible {
float: left;  
}

.bottom {
float: left;
padding-right: 35px;
padding-top: 30px;
clear: left;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.