!importantだけは使わんといてくださいよ

## はじめに

タイトルで出落ちです
タイトル思いついて楽しくなって書いてます

## コード

### 仕様

上司「hogeは赤色、mogeは青色にして」

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="sample.css">
    </head>

    <body>
        <div class='hoge'>hoge</div>
        <div class='moge'>moge</div>
    </body>
</html>
```

```css:sample.css
.hoge {
  color: red;
}

.moge {
  color: blue;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 17.54.08.png](https://qiita-image-store.s3.amazonaws.com/0/67471/ef304f20-9f4d-4797-182e-d93572662786.png)

### 仕様変更1

上司「やっぱり全部緑にして」

```css:sample.css
div {
  color: green;
}

.hoge {
  color: red;
}

.moge {
  color: blue;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 17.54.08.png](https://qiita-image-store.s3.amazonaws.com/0/67471/ef304f20-9f4d-4797-182e-d93572662786.png)

実装者「あれ…変わらないぞ…あぁそうか…クラス指定の方が優先されてるのか…めんどくさいからdiv要素にimportant使っちゃおう…」

```css:sample.css
div {
  color: green!important;
}

.hoge {
  color: red;
}

.moge {
  color: blue;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 17.57.33.png](https://qiita-image-store.s3.amazonaws.com/0/67471/b8bf03e1-b399-4f85-f034-b54411244a58.png)

### 仕様変更2

上司「やっぱりhogeだけ赤に戻して」
実装者（div全体にimportant使っちゃってるしhogeだけ変えるの無理だよ…いいやここにもimportant使っちゃお）

```css:sample.css
div {
  color: green!important;
}

.hoge {
  color: red!important;
}

.moge {
  color: blue;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 18.01.34.png](https://qiita-image-store.s3.amazonaws.com/0/67471/1386b574-0b8f-7673-a0c4-277c947583c3.png)

### 仕様変更３

上司「fooとbarを黄色と黒で追加して」
実装者（うわ…またimportant使わなきゃ）

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="sample.css">
    </head>

    <body>
        <div class='hoge'>hoge</div>
        <div class='moge'>moge</div>
        <div class='foo'>foo</div>
        <div class='bar'>bar</div>
    </body>
</html>
```

```css:sample.css
div {
  color: green!important;
}

.hoge {
  color: red!important;
}

.moge {
  color: blue;
}

.foo {
  color: yellow!important;
}

.bar {
  color: black!important;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 18.12.14.png](https://qiita-image-store.s3.amazonaws.com/0/67471/8630cf4c-33f9-c724-04fa-1e38a0df31dd.png)

### 仕様変更4（トドメ）

上司「やっぱり4文字のやつは青にして」

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="sample.css">
    </head>

    <body>
        <div class='hoge four_characters'>hoge</div>
        <div class='moge four_characters'>moge</div>
        <div class='foo'>foo</div>
        <div class='bar'>bar</div>
    </body>
</html>
```

```css:sample.css
div {
  color: green!important;
}

.four_characters {
  color: blue!important;
}

.hoge {
  color: red!important;
}

.moge {
  color: blue;
}

.foo {
  color: yellow!important;
}

.bar {
  color: black!important;
}
```

*イメージ画像*
![スクリーンショット 2018-06-05 18.25.56.png](https://qiita-image-store.s3.amazonaws.com/0/67471/893db855-a64c-52ca-f727-0e89de56d832.png)

実装者（あ、hogeのimportantが勝ってfour_charactersのスタイルが適用できないぞ….hogeの定義より後に書けば適用されるけどこれもうどれが重要なのか分かんねぇな…）

## 解説

htmlやcssは仕様変更されていくものです
安易に!importantを使うと次に変更したくなった時にimportantを上書きするためのimportantを使うしかなくなり、最終的にどうにもならなくなることもあります
上記例は極端だしこんな例のようなことにはならないと思いますが、実際にはそのクラスにjsアクションが紐付いていて安易にクラス名が変えられないなど色んなしがらみがあるものです
importantを使わず都度クラスや構造を見直す、`div.hoge`のようにより優先されるスタイルの指定の仕方にするなど、使わずに済むケースがほとんどだと思います
importantを使いたくなったら一度構造を見直してみましょう

## おわりに

なので「!importantだけは使わんといてくださいよ」