伸縮する2コラムレイアウトを作成したい(flexbox版)

最終更新日

フレックスボックスを使ってメインコンテンツの領域とサイドバーを横に並べます。伸縮するコラムレイアウトでは、通常はメインコンテンツの領域だけを伸縮させ、サイドバーの幅は固定します。フレックスボックスでこの動作を実現するには、メインコンテンツの領域のCSSには「flex:1 1 auto;」を、サイドバーのCSSには「flex: 0 0 300px」というように設定します。サイドバーに設定する「ベースサイズ」には、サイドバーの幅を指定します。フレックスボックスを使った伸縮する2コラムレイアウトは、フロートに比べてHTMLが少しだけ単純になります。

サンプル

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>floatプロパティ</title>
    <style>
        body{
            margin: 0;
        }
        nav{
            background: #000000;
            border-bottom: 5px solid #37a29b;
        }

        nav ul{
            display: flex;
            list-style: none;
            margin: 0;
            padding: 20px 10px 0x 10px;
        }
        
        nav li a{
            display: block;
            padding: 10px 20px;
            text-decoration: none;
            font-size: 14px;
            color: #fff;
        }
        nav li a:hover{
            background: #37a29b;
            border-radius: 10px 10px 0 0 ;
        }
        main{}
        .main-container{
            display: flex;
            padding: 0 0 40px 0;
            background: fff;
        }
        .sidebar{
            flex:0 0 300px;
            margin:0 20px 0 20px;
            padding: 30px 0 30px 0;
            background: #cacaac;
        }
        .maincol{
            flex: 1 1 auto;
            margin: 0 20px 0 0;
            padding: 30px 0 30px 0;
            background: #c5a18c;
        }
        .articles {
        width: 100%;
       }
       .articles ul{
        list-style: none;
        margin: 0 auto;
        padding: 0;
       }
       .articles li{
        overflow: hidden;
        padding: 10px;
        margin-bottom: 20px;
        background:#e9e2de;
       }
       .articles .thumbnail{
        float:left;
        margin-right: 10px;
        font-size: 0;
       }
       .articles .category{
        margin: 0 0 5px 0;
        font-size: 12px;
        font-weight: bold;
        color: #dd3a59;
       }
       .articles .title{
        margin:0;
        font-size: 14px;
       }

       .articles .title a{
        text-decoration: none;
        color:#000000;
       }
       .articles .title a:hover{
        color:#717171;
       }
    </style>
</head>
<body>
    <nav>
        <ul id="localnav">
            <li><a href="#">HOME</a></li>
            <li><a class="current" href="#">会社概要</a></li>
            <li><a href="#">業務内容</a></li>
            <li><a href="#">アクセス</a></li>
            <li><a href="#">問い合わせ</a></li>
        </ul>
    </nav>
    <main>
        <div class="main-container">
            <div class="sidebar">
                <h1>About</h1>
                <ul>
                     <li><a href="#">お知らせ</a></li>
                     <li><a href="#">スタッフ紹介</a></li>
                     <li><a href="#">運営会社</a></li>
                 </ul>
            </div>
            <div class="maincol">
                <div class="articles">
                    <h1>お知らせ</h1>
                    <ul>
                       <li>
                          <div class="thumbnail">
                            <img src="./images/629959_s.jpg" width="100px" height="100px" alt="">
                          </div>
                          <p class="category">古都京都</p>
                          <p class="title"><a href="#">京都は本州に位置する都市です。かつては首都でもあり、数多くの歴史ある仏教寺院、庭園、皇室の宮殿や御所、神社、伝統的な木造家屋で知られています。</a></p>
                       </li>
                       <li>
                        <div class="thumbnail">
                          <img src="./images/春.jpg" width="100px" height="100px" alt="">
                        </div>
                        <p class="category">奈良の田園風景</p>
                        <p class="title"><a href="#">奈良市は本州の中西部にある奈良県の県庁所在地です。平城京として栄えた 8 世紀までさかのぼる有名な寺院や芸術作品があります。</a></p>
                     </li>
                    </ul>
                  </div>
            </div>
        </div>
    </main>
</body>

実行結果

実行結果

2コラムレイアウトの左右を入れ替えたい

フレックスアイテムの並び順は、HTMLをまったく編集せずに、簡単に変えることができます。並び順を変えるには、個々のフレックスアイテムのCSSに「orderプロパティ」を追加します。このプロパティはフレックスアイテムの並び順を決めるもので、値には数字を設定します。設定された番号が小さいフレックスアイテムほど先に配置されるようになります。

サンプル

 .sidebar{
            flex:0 0 300px;
            margin:0 20px 0 20px;
            padding: 30px 0 30px 0;
            background: #cacaac;
            order:2;        ←追加
        }
        .maincol{
            flex: 1 1 auto;
            margin: 0 20px 0 0;
            padding: 30px 0 30px 0;
            background: #c5a18c;
            order: 1;       ←追加
        }

実行結果

実行結果