CSSで作るボタン

# 2000年のホームページってこんな感じ

当時中学生だった私が家で見つけた「牛飼いと作ろうホームページ」だとこんな感じだった記憶。

## `<a>`要素の中に`<img>`要素を入れる

```html
  <body>
    <p>戻るボタンは<a href="#"><img src="img/navigationj_back.png"></a>これ</p>
  </body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/a68c1a39-c1ce-9a2f-c989-6fd27c247192.png)

## `<input type="submit">`を使う

これなんかもうただのボタンでありコレだけだと何も意味を成さない。

```html
  <body>
    <h1>ボタンをつけたい</h1>
    <input type="submit" value="ボタン">
  </body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/2f2afffc-f130-2bdf-0c98-885535408999.png)

# いまどきのボタンってこんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/5b584055-4b58-0921-8ef6-305ffc8a324d.png)
例えばこの「プロフィールを編集する」ボタン。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/f661fdd3-ffa1-0eba-75b4-028aedbda67c.png)
開発者ツールで覗き込むとこんな感じ。画像じゃない！

## STEP1. ただのリンクを作る

```html
  <body>
    <h1>ボタンをつけたい</h1>
    <a href="#">イケてるボタン</a>
  </body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/64476519-e14c-d98b-a2a7-59f69c0242b1.png)

## STEP2. クラス名を付与する＆CSSファイルを関連付ける

```html
  <head>
  <meta charset="utf-8">
  <title>ボタンの幅とか変えたい</title>
  <link rel="stylesheet" href="css/stylesheet.css">
  </head>
  <body>
    <h1>ボタンをつけたい</h1>
    <a href="#" class="btn">イケてるボタン</a>
  </body>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/64476519-e14c-d98b-a2a7-59f69c0242b1.png)

見た目に変化なし

## STEP3. CSSでアゲていく

```text:フォルダ構成
modern_web\
|`sample.html
|`img\
|  `blue.png
 `css\
   `stylesheet.css
```

```html:sample.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>ボタンの幅とか変えたい</title>
    <link rel="stylesheet" href="css/stylesheet.css">
  </head>
  <body>
    <h1>ボタンをつけたい</h1>
    <a href="#" class="btn">イケてるボタン</a>
  </body>
</html>
```

```css:css/stylesheet.css
.btn {
  display: inline-block;
  width: 400px;
  padding: 20px 30px;
  opacity: 0.7;
  font-size: 30px;
  letter-spacing: 5px;
  color: white;
  background-color: darkgreen;
  text-decoration: none;
  text-align: center;
  border-radius: 10px;
}

.btn:hover {
  opacity: 1;
}

body {
  background-image: url("../img/blue.png");
  background-size: cover;
  background-color: rgba(255,255,255,0.5);
  background-blend-mode: lighten;
}
```

`blue.png`は適当な画像を指定。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/9734edc7-9867-7f26-87b1-d8d3908b2af2.png)


マウスオーバをするとボタンの色(透過率)が変わる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/75054021-acc5-04e0-b269-ad1fdd41d8a0.png)

# 細かいレシピ

いきなりいろいろ突っ込んだので順番に。

## `.btn`

`class`に`btn`を指定している箇所に以下を適用

|パラメータ|値|解説|
|---|---|---|
|display|inline-block|`<a>`を`inline-block`要素にする。これがないと高さや幅を変えることができない(`inline`)。逆に`block`にしてしまうと横に並べるのができない(`float`で出来なくはない？)|
|width|pxで指定|ボタンの幅を指定。無いと文字列の幅に従ってしまうので、いくつかボタンを並べた時に統一感がなくなってしまう|
|padding|pxで指定。<br>1個だけ書いた場合は上下左右に適用。<br>2個スペース区切りで書いた場合は"上下", "左右"に適用。4個スペース区切りで書いた場合は"上","右","下","左"に適用。時計回り。|余白を追加。無いとボタンの縁ギリギリに文字が配置される|
|opacity|歩合(0.0～1.0)|不透明率。0.7だと70%の濃さになり、背景画像が透けて見える|
|font-size|pxで指定|文字の大きさ|
|letter-spacing|pxで指定|文字の間隔。ちょっと広めになる|
|color|RGBコードか色名で指定|文字の色を指定|
|background-color|RGBコードか色名で指定|背景色を指定|
|text-decoration|none|指定しないとリンクと同じく下線がひかれる|
|text-align|center|文字をエリア内中央に配置|
|border-radius|pxで指定|ボタンの角を指定した大きさの円が置かれたように丸く削る|

## `.btn:hover`

`class`に`btn`を指定している箇所へマウスオーバされた際に指定したパラメータで`.btn`の値を上書き。
今回は`opacity` = 不透明度を`1`にすることで透過を無くしている(色が変わったわけではない)

## `body`

`<body>`に以下を適用

|パラメータ|値|解説|
|---|---|---|
|background-image|url("xxx")|背景画像を指定。<font color="red">相対パスはこの`css`ファイルからの位置であることに注意</font>。
|background-color|RGBAで不透明率も指定|イメージとは別に背景色を指定。これだけだと役に立たない？|
|background-blend-mode|lighten|背景画像と背景色を混ぜっ子する方法。`lighten`はおそらく明度でMIX|

# 今後の課題

こういったパラメータがものすごいたくさんある。
すべてを記憶する必要はないが、触っておけば「あ、こんなのあったな」と思い出せるので、一度全部網羅しておきたい。

`background-blend-mode`なんかはもう感覚掴むのが大変そう。