hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

テキストとボタンの配置(2〜3ページ目)

2ページ目のプロフィールページ作成。

index.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(前略)
<section class="about" id="about">
  <h2 class="heading">PROFILE</h2>
  <p class="about-text">
    子どもの頃からモノづくりが好きで、いまはウェブアプリをつくることにハマっています。
    Railsは難しくて最初は使えるようになるのかな?と不安に感じましたが、いまは本当に便利なフレームワークだなと思っています。<br>      
    これから、共通の趣味を持った仲間がコミュニケーションを取れるようなオリジナルアプリをつくっていきます。来月リリース予定なので、興味のある方はぜひお試しください!
  </p>
</section>
(後略)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(前略)
.about {
  height: 100vh;
  padding: 80px 30px;
  background-color: #fff;
  color: #333;
}

.about-text {
    width: 600px;
    margin: 30px auto;
    line-height: 2.5;
    text-align: left;
}

.heading {
    display: inline-block;
    margin: 30px 0 15px;
    padding-bottom: 15px;
    letter-spacing: 2px;
    font-size: 4rem;
    border-bottom: double 4px #999;
}
(後略)

HTML,CSSを追加するとこのようになる。

https://tech-master.s3.amazonaws.com/uploads/curriculums//6faa07c59d33728b67961bbc0f245bc1.png

style.css
 9
10
11
12
13
14
.about-text {
    width: 600px;
    margin: 30px auto;
    line-height: 2.5;
    text-align: left;
}

11行目のmarginの設定で、30px autoという指定を行なっている。
上下の余白が30px、左右の余白がautoという意味で、このautoとは左右の余白を均等にするという指定。

 line-height

12行目ではline-heightは行の高さを指定するプロパティで、

ここでは行間を広げるために使っている。

また、

サイト全体ではテキストをセンターに寄せているが、

ここだけは左寄せにしたいためtext-alignにleftを指定。

  

横並びのレイアウトを作る方法

続いて3ページ目を作成する。

index.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<section class="works">
  <h2 class="heading">MY WORKS</h2>
  <div class="works-wrapper">
    <div class="work-box">
      <img class="work-image" src="images/pictweet.jpg" alt="制作事例">
      <div class="work-description">
        Pictweet<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>

    <div class="work-box">
      <img class="work-image" src="images/mooovi.jpg" alt="制作事例">
      <div class="work-description">
        Mooovi<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>

    <div class="work-box">
      <img class="work-image" src="images/profy.jpg" alt="制作事例">
      <div class="work-description"> 
        Profy<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>
  </div>
</section>

このコードを追加するとこのようになる。

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

制作物を表現する部分が3つ、縦に並んでいる。

HTMLのブロック要素は基本的に縦に並ぶ仕組みになっているため、これを横並びにする。

横並びにするには、CSSにおけるflexboxというレイアウトを利用。

style.css
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(前略)
.works {
  height: 100vh;
  background-color: #383634;
  padding: 80px 0 10px;
}

.works-wrapper {
  display: flex;
  width: 860px;
  margin: 60px auto 0;
}

.work-box {
  background-color: rgba(100, 100, 100, 0.3);
  border: 1px solid #333;
}

.work-image {
  display: block;
  width: 100%;
}

.work-description {
  margin: 20px 0;
}

.work-description .button {
  width: 60%;
  margin-top: 20px;
  padding: 3px;
}

.button-ghost {
  border: 2px solid #fff;
  background-color: rgba(255, 255, 255, 0.15);
}
(後略)

作品全体をworks-wrapperというクラスを持つ要素で囲って、その中のwork-boxで作品を表示。
そして、親要素であるworks-wrapperにdisplay: flexを当てている。

https://tech-master.s3.amazonaws.com/uploads/curriculums//03195bd4831ea61554cd2578eed5b250.png

このように、要素を横並びにしたい場合は、横並びにしたい要素の親要素を用意しdisplayプロパティの値をflexとする。

 display:flex

指定した要素の子要素を横並びにする。
display:flexを利用した横並びの幅の設定については、様々なパターンを指定できる。

詳しくは、https://liginc.co.jp/web/html-css/css/21024など。

 

 border

borderは要素の周りに線を引くためのプロパティ。

1
border: 2px solid #fff;

このように、「線の太さ」「線の種類」「線の色」を指定します。線の種類には以下のものなどがある。

内容
none なし(何も指定しないとnoneになる)
solid 1本線
dashed 破線
dotted 点線

 

横並びレイアウトの別解

flexboxは比較的近年になって広まったレイアウト手法。flexboxに対してブラウザの対応などが追いついていない時代は、clearfixという手法が使われてた。

今後遭遇することもあるため以下、簡単に。

 

実は、横並びにしたい要素にfloat: leftというプロパティと値を指定すると

その親要素の中で横並びになってくれる。

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(前略)
.works {
  height: 100vh;
  background-color: #383634;
  padding: 80px 0 10px;
}

.works-wrapper {
  width: 970px;
  margin: 60px auto 0;
}

.work-box {
  float: left;
  background-color: rgba(100, 100, 100, 0.3);
  border: 1px solid #333;
}

.work-image {
  display: block;
  width: 100%;
}

.work-description {
  margin: 20px 0;
}

.work-description .button {
  width: 60%;
  margin-top: 20px;
  padding: 3px;
}

.button-ghost {
  border: 2px solid #fff;
  background-color: rgba(255, 255, 255, 0.15);
}
(後略)

ただし、

この方法だとfloatプロパティ特有の仕様により

横並びにした要素の親要素の高さが0になってしまう。

これを解消するために、親要素に以下のプロパティを当てる。

style.css
1
2
3
4
.clearfix:after{
  content: "";
  clear: both;
  display: block;

 

それぞれのプロパティがなぜ必要なのか?

.clearfix:after

:afterという記述は擬似要素と呼ばれる書き方。

これにより、このクラスが当たっている要素の子要素として新たにインライン要素が追加される。

display:blockcontent:""は、追加されたインライン要素に対して当たることになる。

content: "";

擬似要素afterには、必ずcontentプロパティを使って中身の文字を指定する必要がある。

今回は中身の文字が必要ないため空の文字を値にする。

clear: both;

このの中でもっとも大事なプロパティ。

clearプロパティは、floatプロパティによる副作用(親の高さを0にする)を修正する。

親要素に一連のプロパティを適用すれば、

どれだけの要素をfloatによって横並びにしたとしても

必ず副作用を解消することができる。

クラスにまとめることで一連のプロパティをまとめて適用できる。

必ずclearfixというクラス名にする必要はない。

display:block

clearプロパティはインライン要素には適用されない。
擬似要素afterで追加される要素は必ずインライン要素になるので、これをblock要素にする必要がある。

 

clearfixクラスも活用しましょう。

style.css
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(前略)
.works {
  height: 100vh;
  background-color: #383634;
  padding: 80px 0 10px;
}

.works-wrapper {
  width: 970px;
  margin: 60px auto 0;
}

.work-box {
  float: left;
  background-color: rgba(100, 100, 100, 0.3);
  border: 1px solid #333;
}

.work-image {
  display: block;
  width: 100%;
}

.work-description {
  margin: 20px 0;
}

.work-description .button {
  width: 60%;
  margin-top: 20px;
  padding: 3px;
}

.button-ghost {
  border: 2px solid #fff;
  background-color: rgba(255, 255, 255, 0.15);
}

.clearfix:after{
  content: "";
  clear: both;
  display: block;
(後略)
index.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<section class="works">
  <h2 class="heading">MY WORKS</h2>
  <div class="works-wrapper clearfix">
    <div class="work-box">
      <img class="work-image" src="images/pictweet.jpg" alt="制作事例">
      <div class="work-description">
        Pictweet<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>

    <div class="work-box">
      <img class="work-image" src="images/mooovi.jpg" alt="制作事例">
      <div class="work-description">
        Mooovi<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>

    <div class="work-box">
      <img class="work-image" src="images/profy.jpg" alt="制作事例">
      <div class="work-description"> 
        Profy<br>
        <a href="#" class="button button-ghost">READ MORE</a>
      </div>
    </div>
  </div>
</section>