質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

二つの要素を横に並べて配置したい。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 657

aazzkk

score 13

web制作初心者です。不慣れにつき色々お見苦しい点があるかとは思いますが何卒よろしくお願いいたします。

現在作成中のページにて、二つのブロック要素を横に並べて配置したいと考えております(.contents-menuと.contents-main)。
はじめはfloatで左に来させたい要素を左寄せしておりましたが、左の要素の中身を上下左右中央寄せにしたかったので、floatを使えない状況になってしまいました(display:table-cellを使用したため)。
ちなみに、左の要素のサイズは固定、右の要素のサイズは内容量により高さが自動で調節されるという風にしたいです。

色々な方法を試しましたが、うまく左右に並べることができなかったのでどなたか良い方法を教えていただけないでしょうか。よろしくお願いいたします。

●html●

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="sstemp4.css">
  <title>template sample</title>
</head>

<body>
  <header>
    <div id="menu">
      <ul id="menu-list">
        <li><a href="#about">about</a></li><li>
        <a href="main">main</a></li><li id="sitename">
        <a href="#"><span>Site Name</span></a></li><li>
        <a href="#bookmark">bookmark</a></li><li>
        <a href="#contact">contact</a></li>
      </ul>
    </div>
    <div id="header-top"><img src="img/illust8.png"></div>
  </header>

  <div id="wrapper">
    <div id="about" class="contents">
      <div class="contents-menu">
        <div class="contents-menu-title">
          <h2>about</h2>
          <p>サイトについて</p>
        </div>
      </div>
      <div class="contents-main">画面サイズ959px以下でメニューが切り替わります。</div>
    </div>
    <div id="main" class="contents">
      <div class="contents-menu">
        <div class="contents-menu-title">
          <h2>main</h2>
          <p>メインコンテンツ</p>
        </div>
      </div>
      <div class="contents-main">メインコンテンツなど。</div>
    </div>
    <div id="bookmark" class="contents">
      <div class="contents-menu">
        <div class="contents-menu-title">
          <h2>bookmark</h2>
          <p>他サイト様へのリンク</p>
        </div>
      </div>
      <div class="contents-main">
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
        <div class="bookmark-list">
          <p><a href="">サンプル1</a></p>
          <p>説明など説明など説明など説明など説明など</p>
        </div>
      </div>
    </div>
    <div id="contact" class="contents">
      <div class="contents-menu">
        <div class="contents-menu-title">
          <h2>お問い合わせフォーム</h2>
          <p>何かご質問等ございましたらこちらからご連絡ください。</p>
        </div>
      </div>
      <div class="contents-main">
        <form>
          <p>お名前</p>
          <input>
          <p>メールアドレス</p>
          <input>
          <p>お問い合わせ内容</p>
          <textarea></textarea>
        </form>
      </div>
    </div>
  </div>

  <footer>
    <div id="copyright">
    </div>
  </footer>
</body>
</html>

●css●

@charset "utf-8";

* {
  box-sizing: border-box;
}

/*ここから共通の設定*/

html, body {
  height: 100%;
}

h1, h2, h3, h4, h5, h6, p, ul {
  margin: 0;
  padding: 0;
}

a {
  text-decoration: none;
  transition: 0.2s;
  color: rgb(100,100,100);
}

a:hover {
  opacity: 0.7;
}

header, #wrapper, footer {
  width: 100%;
} 

#about, #bookmark, #main, #contact {
  width: 900px;
  margin: 200px auto;
}

/*ここまで共通の設定*/

header {
  height: 100%;
}

#menu-list {
  list-style: none;
  text-align: center;
  background-color: rgb(0,0,0);
}

#menu-list li {
  display: inline-block;
}

#menu-list li a{
  display: block;
  padding: 15px;
  color: rgb(255,255,255);
}

#sitename span::before {
  content: "│";
  color: rgb(200,200,200);
}

#sitename span::after {
  content: "│";
  color: rgb(200,200,200);
}

#header-top {
  height: 100%;
  width: 100%;
}

#header-top img {
  width: 100%;
  height: auto;
}

.contents-menu {
  width: 200px;
  height: 200px;
  background-color: rgb(200,200,200);
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kszk311

    2018/02/08 19:23

    .contents-menuと.contents-mainを横並びにしたいということであってますか?

    キャンセル

  • aazzkk

    2018/02/08 19:32

    はい、そうです。説明不足で申し訳ありません。

    キャンセル

回答 1

checkベストアンサー

+3

テーブルレイアウトの考え方で、
table-cellを使いたい場合は、
tableとセットが基本です。

.contents(table)
    .contents-menu(table-cell)
    .contents-menu-title(table-cell)

という構成になります。

下記CSSを追加すれば、横並びになります。

.contents {
    display: table;
}
.contents-main {
    display: table-cell;
}

.contents-menuと.contents-mainがくっついているので、padding等で余白の調整はしてください。

 追記

「.contents-menu」の方にかかっているheight、background-colorを「.contents-menu-title」の方に移動すれば大体OKです。
そうすると、「.contents-menu-title」の中で上寄せになってしまうので、上下中央になるようにflexで調整です。

.contents-menu {
    width: 200px;
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}
.contents-menu-title {
    height: 200px;
    display: -webkit-flex;
    display: flex;
    flex-direction: column;
    justify-content: center;
    background-color: rgb(200,200,200);
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/08 20:42

    ご回答ありがとうございます。
    とても綺麗に横並びになったのですが、右の要素(.contents-main)が.左の要素(.contents-menu)のサイズをより大きくなると、左も右に合わせて大きくなります。私の説明が下手で申し訳ないのですが、左の大きさは固定(200x200pxの正方形で背景塗りつぶし)で右だけ内容量に合わせて高さが自動調整されるようにしたいと考えております。なにか良い方法がありますでしょうか?

    キャンセル

  • 2018/02/08 21:09

    やはりそこは正方形固定でしたか、追記しましたのでご確認下さい

    キャンセル

  • 2018/02/09 14:22

    理想通りになりました。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる