【HTMLとCSS】②ChatAppの大まかなレイアウトについて

https://tech-master.s3.amazonaws.com/uploads/curriculums//99d09f3ea53d6a202c34afbe3e616723.png

 

◯上記のようにページをデザインしたい!

 

【模範解答】

app/views/messages/_main_chat.html.erb

<div class="chat-header">

</div>

 

<div class="messages">

</div>

 

<div class="form">

</div>

 

app/views/messages/_side_bar.html.erb

<div class="side-bar-header">

</div>

 

<div class="rooms">

</div>

 

☆app/assets/stylesheets/messages.css

wrapper {

  display: flex;

}

.side-bar {

  background-color: #253141;

  width: 300px;

  height: 100vh;

}

 

.side-bar-header {

  height: 100px;

}

.rooms {

  background-color: #2F3E51;

  height: calc(100vh - 100px);

}

.chat {

  background-color: #FFFFFF;

  width: calc(100vw - 300px);

}

.chat-header {

  height: 100px;

}

.messages {

  background-color: #FAFAFA;

  height: calc(100vh - 100px - 90px);

}

.form {

  background-color: #DDDDDD;

  height: 90px;

}

 

【自分への解説】

 思考手順

1.まずは、side-barクラスとchatクラスの内部のデザイン編集と捉える

2._main_chat.html.erb_side_bar.html.erbの編集が必要だと判断する

 (部分レイアウトの内部を編集する)

3._main_chat.html.erbでは、3つのクラスが必要と判断し、それぞれ「chat-header」「messages」「form」と命名しHTMLを編集する(命名についてはなんでも良い)

4._side_bar.html.erbでは、2つのクラスが必要と判断し、それぞれ「side-bar-header」「rooms」と命名しHTMLを編集する(命名についてはなんでも良い)

5.CSSをクラスごとに編集していく

 

◯各HTMLの編集については、クラスを定義していくだけなので割愛します。

 

CSSの編集について(ここが理解できていないポイント)

・side-bar-headerクラスの編集について

 

.side-bar-header {

  height: 100px;

}

 

side-bar-headerの編集はこれのみ。

side-barクラスの色をそのまま使用するため、ここでは特に背景色は指定していない。

 

・roomsクラスの編集について

.rooms {

  background-color: #2F3E51;

  height: calc(100vh - 100px);

 

ここではcalc()関数を用いる。

side-bar-headerが縦100pxのためroomsクラスはその残りの部分である。

 

・chat-headerクラスの編集

.chat-header {

  height: 100px;

}

 

ここでも、背景色についてはchatクラスを同じのため特に色は指定しない。

 

・messagesクラスの編集

.messages {

  background-color: #FAFAFA;

  height: calc(100vh - 100px - 90px);

}

 

高さについて、messagesクラスはchat要素の真ん中に位置している。

calc()関数において例えば、要素の上下にへつの要素が存在するとき(headerfooterがある際)は、height: calc(100vh - 100px - 90px);というような記述の仕方をとる。ここでいう「-100pxheader」、「-90pxfooter」を表している。