0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gridレイアウト

Posted at

Gridのgrid-template-columnsの罠

固定のトップナビゲーションをGridレイアウトで実現しようとしたとき、プロパティgrid-template-columnsでハマってしまった。この罠について解説する。

例:ウィンドウ幅に合わせた自動グリッド

やりたかったこと:

  • 5つのカテゴリページのリンクをトップナビゲーションに表示する
  • カテゴリページのリンクのリストを作成する
  • 言語切り替えフォーム要素を追加する
  • 言語切り替えのコンボボックスを配置する
  • 画面幅のサイズに応じたGridレイアウトの変更
  • メディアクエリやJSを使わない

image.png

image.png

image.png

image.png

コード

先に実現したいことに対する正解のコードから提示する。

index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>Grid Layout</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  
  <header>
    <div class="container">
      <nav class="topnav">
        <!-- トップナビゲーション -->
        <ul class="nav-list">
          <li class="nav-item"><a href="#" class="nav-link">Home</a></li>
          <li class="nav-item"><a href="#" class="nav-link">Articles</a></li>
          <li class="nav-item"><a href="#" class="nav-link">Geogrphy</a></li>
          <li class="nav-item"><a href="#" class="nav-link">Tech</a></li>
          <li class="nav-item"><a href="#" class="nav-link">Languages</a></li>
        <ul>
        <!-- 言語切り替えコンボボックス -->
        <form class="lang-form" method="post" action="lang_select.php">
          <label for="lang-selector">Language</label>
          <select id="lang-selector" class="lang-selector">
            <option value="en">English</option>
            <option value="ja">日本語</option>
          </select>
        </form>
      </nav>
    </div>
  </header>
  
  <!-- 省略 -->
</body>

</html>

必要に応じてborderoutlineプロパティのコメントアウトを解除し、その要素のコンテンツ領域を確認すると分かりやすいです。

style.css
* {
  margin: 0;
  padding: 0;
  list-style: none;
  text-decoration: none;
}

.topnav {
  display: grid;
  grid-template-columns: 1fr auto;
  /* outline: 3px solid green; */
}

.nav-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  /* border: 3px dashed blue; */
}

.lang-form {
  margin-block: auto;
  /* border: 3px dashed red; */
}

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?