CSSはWEB制作する上で欠かせない言語です。
簡単そうに思われますが、実は奥が深くマスターするまでに時間がかかります。
今回は、「hover」「position」「flexbox」「before・after」の4つを紹介します。
この4つをマスターすれば、初心者から中級者になることが可能です。
hover
hoverは、カーソルが乗ったときに適用するデザインです。
ほぼ全てのサイトで、hoverは使用されています。
例えば、このようなコードをみてください。
HTML
<p class="hover"><a href="">ホバーです</a></p>
CSS
.hover a:hover{
color: green;
}
このような表示結果になります。

ホバーしているだけデザインを適用させることができます。
他にもこのようなデザインがあるので、参考にしてください。
ホバーしたときにアンダーラインをつける
HTML
<p class="hover"><a href="#">ホバーです</a></p>
CSS
.hover a:hover{
text-decoration: underline;
}
背景色を変える
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover{
background: #D8D8D8;
color: #fff;
padding: 10px;
text-decoration: none;
}
.hover:hover{
background: #F2F2F2;
}
枠線をドットに変える
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover{
background: #D8D8D8;
border: solid 1px #D8D8D8;
color: #fff;
padding: 10px;
text-decoration: none;
}
.hover:hover{
background: #fff;
color: #333;
border: dotted;
}
枠線を破線に変える
HTML
<a class="hover" href="#">ホバーです</a>
CSS
background: #fff;
color: #333;
border: dashed;
枠線・文字色・背景色を変える
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover{
background: #D8D8D8;
border: solid 1px #D8D8D8;
color: #fff;
padding: 10px;
text-decoration: none;
}
.hover:hover{
color: #333;
border: solid 1px #333;
background: #fff;
}
文字の感覚をあける
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover{
background: #D8D8D8;
border: solid 1px #D8D8D8;
color: #fff;
padding: 10px;
text-decoration: none;
}
.hover:hover{
letter-spacing: 8px;
}
ホバーしたときに縦軸を中心に回転させる
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover {
text-align: center;
display: block;
transition: 1s;
}
.hover:hover{
transform: rotateY(45deg);
}
ホバーしたときに横軸を中心に回転させる
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover {
text-align: center;
display: block;
transition: 1s;
}
.hover:hover{
transform: rotateX(45deg);
}
要素の中心を軸に回転させる
HTML
<a class="hover" href="#">ホバーです</a>
CSS
.hover {
text-align: center;
display: block;
transition: 1s;
}
.hover:hover{
transform: rotateZ(45deg);
}
position
次は「position(ポジション)」を説明します。
ポジションは、特定の要素を特定の位置に配置できるCSSです。
例えば、このような四角の要素を用意します。

HTML
<div class="sikaku1"></div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
}
この四角の上に幅100px・縦100pxの四角を作ります。

HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
}
赤色の四角(クラス名:sikaku2)は、緑色の四角(クラス名:sikaku1)の左上に配置されています。
赤色の四角の配置を変えるためには、ポジションを適用する必要があります。
実際にコードを見てみましょう。
まず、配置する基準となる要素に「position: relative;」を適用させます。
ここでは緑色の四角に(クラス名:sikaku1)「position: relative;」を適用させます。
HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
}
次に配置を移動させたい赤色の四角(クラス名:sikaku2)に「position: absolute;」を適用させます。
HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
position: absolute;
}
ここまで出来たら、あとは簡単です。
配置させたい位置を赤色の四角(クラス名:sikaku2)に記述するだけです。
例えば、右上に配置させたい場合はこのように記述します。

HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
position: absolute;
top: 0;
right: 0;
}
左下に配置したい場合は、このように記述します。

HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
position: absolute;
bottom: 0;
left: 0;
}
右下に配置したい場合は、このように記述します。

HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
position: absolute;
bottom: 0;
right: 0;
}
上下中央に配置したい場合は、このように記述します。

HTML
<div class="sikaku1">
<div class="sikaku2">
</div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
position: relative;
}
.sikaku2{
width: 100px;
height: 100px;
background: #FA5858;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
ポジションを使って上下中央寄せする場合は、「transform: translate;」を使うことが必要です。
この方法は少し難しいですが次に説明するFlexboxを使えば簡単にできます。
Flexbox
Flexboxは、レイアウトを整えることができるCSSコードです。
これまでは、レイアウトを変更するには非常に手間がかかりました。
しかし、Flexboxを使用することで簡単にレイアウトを整えれるようになりました。
実際にコードを紹介しながら、解説していきます。
例えば、1つの要素の中に要素が3つある場合、子要素は縦に並びます。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
margin-bottom: 20px;
}
Flexboxを使って子要素を横並びにする場合、親要素に「display: flex;」を適用させると子供要素が横並びになります、

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
margin: 0 20px;
}
Flexboxはただ横並びにするだけではありません。
コンテンツの揃え方を指定することも可能です。

これは、親要素に「justify-content: center;」を適用すれば子要素が中央寄せになります。
HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: center;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
margin: 0 20px;
}
ヘッダーでよく使用するするのが「justify-content: space-between;」です。
これは、最初と最後の子要素を両端に配置して、残りの要素を均等に配置するコードです。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: space-between;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
}
両端の子要素も含めて等間隔に配置するのが「justify-content: space-around;」です。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: space-around;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
}
また、横並びだけでなく縦方向の配置も指定できます。
例えば、親要素の一番下に配置したい場合は、「align-items: flex-end;」を適用させます。
すると、子要素をこのように配置することが可能です。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: space-around;
align-items: flex-end;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
}
親要素の中央に配置したい場合は、「align-items: flex-end;」を適用させます。
すると、子要素をこのように配置することが可能です。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: space-around;
align-items: center;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
}
このように記述することで、上下中央寄せすることも可能です。

HTML
<div class="sikaku1">
<div class="sikaku2"></div>
<div class="sikaku2"></div>
<div class="sikaku2"></div>
</div>
CSS
.sikaku1{
width: 300px;
height: 300px;
background: #01DF74;
display: flex;
justify-content: center;
align-items: center;
}
.sikaku2{
width: 50px;
height: 50px;
background: #FA5858;
margin: 0 20px;
}
上下中央寄せするときは、親要素に「justify-content: center;」と「align-items: center;」を適用させます。
before・after
「before・after」は要素を追加できる疑似要素です。
よく使用される例としては、タイトルの下にサブタイトルを表示させる方法などです。

HTML
<div class="sample">メインタイトルです</div>
CSS
.sample{
text-align: center;
font-size: 32px;
padding-bottom: 8px;
position: relative;
}
.sample::before{
content: "サブタイトルです";
font-size: 18px;
position: absolute;
top: 100%;
left: 50%;
transform: translate(-50%);
}
「before・after」と「hover」を組み合わせることでホバーしたときに中央からアンダーラインがでてくるデザインも可能です。

HTML
<a class="hover" href="#">beforeとafterを使ったホバーです</a>
CSS
.hover{
color: black;
text-decoration: none;
padding-bottom: 8px;
position: relative;
}
.hover::before, .hover::after{
content: "";
display: block;
width: 0;
height: 2px;
background: #333;
position: absolute;
top: 100%;
transition: .4s;
}
.hover::before{
left: 50%;
}
.hover::after{
right: 50%;
}
.hover:hover::before, .hover:hover::after{
width: 120px;
}
まとめ
いかがでしたか?
「hover」「position」「flexbox」「before・after」を使うことでデザインの幅はかなり広がります。
色々なプロパティを使いこなして脱初心者を目指しましょう。





