1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Flexbox で Borderレイアウトを実現する

Last updated at Posted at 2017-02-05

2017年4月になると Windows Vista のサポート終了に伴い、IE10以下への対応が不要になります。これにより、多くの新しい CSS 機能を実戦投入できる状況になりますが、最も影響の大きい新機能として Flexbox があります。

Flexbox を使うと従来の CSS では扱いの難しかった上下中央寄せや残りの高さにフィットしたボックスが簡単かつ柔軟に実現できるようになります。

今回、紹介するのは Flexbox で Border レイアウトを実現する方法です。Border レイアウトとは具体的には、東・西・南・北・中央にコンポーネントを配置するレイアウト機構のことです。Java AWT の BorderLayout、.NET Windows Form の Dock を思い出すとわかりやすいかもしれません1

実際の画面例です2

BorderLayout.png

では、具体的に HTML を見てみましょう。

<!doctype html>
<style>
html, body {
    height: 100%;
    margin: 0;
}
.layout {
    display: flex;
    flex-direction: column;
    height: 100%;
}
.layout-body {
    flex: 1 1 auto;
    overflow: hidden;
    
    display: flex;
    flex-direction: row;
}
.layout-center {
    flex: 1 1 auto;
    overflow: auto;
}
.layout-left,
.layout-right {
    overflow: auto;
}

/* 以下の CSS は色を付けているだけなので無視して構いません。 */
.layout-header { background-color: red; }
.layout-left { background-color: purple; }
.layout-right { background-color: green; }
.layout-footer { background-color: cyan; }
</style>
<body>
<div class="layout">
    <div class="layout-header">header</div>
    <div class="layout-body">
        <div class="layout-left">left</div>
        <div class="layout-center">content</div>
        <div class="layout-right">right</div>
    </div>
    <div class="layout-footer">footer</div>
</div>
</body>

flexbox の仕様を知っていれば簡単に実現できそうですが、実際にやってみると中央部分のスクロールが意外にやっかいでした。ここでは、overflow を指定し、中のコンテンツサイズが溢れてもサイズが変わらないようにすることで解決しています。

なお、layout-center の中に layout を入れ子にしても動作します。

  1. この文章を書いた後に知ったのですが、このようなレイアウトは聖杯レイアウト問題として知られる有名な問題だそうです。リンク先にも同様の解決策が記載されていますので、そちらも参考にしてください。

  2. Windows 上の IE11, Chrome, Firefox, Edge にて動作確認済み。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?