web-dev-qa-db-ja.com

Flexboxで要素を下に揃える

私は何人かの子供たちと一緒にdivを持っています:

<div class="content">
  <h1>heading 1</h1>
  <h2>heading 2</h2>
  <p>Some more or less text</p>
  <a href="/" class="button">Click me</a>
</div>

そして私は次のようなレイアウトが欲しい:

 -------------------
|heading 1          |
|heading 2          | 
|paragraph text     |
|can have many      |
|rows               |
|                   |
|                   |
|                   | 
|link-button        |
 -------------------

p内のテキストの量に関係なく、フローから取り出さずに常に.buttonを一番下に固定したいと思います。私はこれがFlexboxで達成可能であると聞きました、しかし私はそれを働かせることができません。

272
supersize

オートマージン を使えます

justify-content および align-self を介したアライメントの前に、正の空き領域はその次元の自動マージンに分配されます。

それで、あなたはこれらのうちの1つ(または両方)を使うことができます:

p { margin-bottom: auto; } /* Push following elements to the bottom */
a { margin-top: auto; } /* Push it and following elements to the bottom */
.content {
  height: 200px;
  border: 1px solid;
  display: flex;
  flex-direction: column;
}
h1, h2 {
  margin: 0;
}
a {
  margin-top: auto;
}
<div class="content">
  <h1>heading 1</h1>
  <h2>heading 2</h2>
  <p>Some text more or less</p>
  <a href="/" class="button">Click me</a>
</div>

代わりに、利用可能なスペースを埋めるためにaの前の要素を大きくすることもできます。

p { flex-grow: 1; } /* Grow to fill available space */
.content {
  height: 200px;
  border: 1px solid;
  display: flex;
  flex-direction: column;
}
h1, h2 {
  margin: 0;
}
p {
  flex-grow: 1;
}
<div class="content">
  <h1>heading 1</h1>
  <h2>heading 2</h2>
  <p>Some text more or less</p>
  <a href="/" class="button">Click me</a>
</div>
463
Oriol

Display:flexを使用して要素を下に配置できますが、この場合はflexを使用したくないと思います。これはすべての要素に影響するためです。

Flexを使用して要素を下に配置するには、これを試してください。

.container {
  display: flex;
}

.button {
  align-self: flex-end;
}

ボタンに絶対位置を設定してbottom: 0に設定するのが最善の策です。または、ボタンをコンテナの外側に配置し、負のtransform: translateY(-100%)を使用して次のようにコンテナに入れることができます。

.content {
    height: 400px;
    background: #000;
    color: #fff;
}
.button {
    transform: translateY(-100%);
    display: inline-block;
}

これをチェックしてください JSFiddle

113
Roumelis George

align-self: flex-end;を使った解決策は私にはうまくいきませんでしたが、これはflexを使いたい場合にはうまくいきました:

CSS

.content{
  display: flex;
  justify-content: space-between;
  flex-direction: column;
}

HTML

<div class="content">
  <div>
    <h1>heading 1</h1>
    <h2>heading 2</h2>
    <p>Some more or less text</p>
  </div>

  <div>
    <a href="/" class="button">Click me</a>
  </div>
</div>

の結果:

 -------------------
|heading 1          |
|heading 2          | 
|paragraph text     |
|can have many      |
|rows               |
|                   |
|                   |
|                   | 
|link-button        |
 -------------------
60
Timo