51
47

『CSS設計の教科書』をエンジニア歴1週間の人間が読んで学んだこと

Posted at

 エンジニアの第一線で活躍しようと志し、現在カリキュラムを学習をさせていただいている者です。
 この1週間模写コーディングをしながら、WEBページの作り方を学んでいますが、カリキュラムとして「谷 拓樹(2014) 『Web制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」の設計手法』 インプレス」を読む機会がありました。
 下記に、エンジニア歴1週間の人間の視点から、この本を読んで学んだこと、感想を備忘録的に抜粋してまとめていきます。
 専門知識がほとんどないため、文章がかなり稚拙になっています。用語の解釈にも誤りがあるかもしれません。また、あくまで私個人が学んだこと、感想であり、この本の内容、主張を代弁しているわけではない点につきましても、予めご了承ください。

cssにおける設計とは

 さまざまな人がコード設計に携わるため、また複雑・リッチなWEBサイトが求められているため、誰がみてもわかりやすいコードを作る必要があります。
そのためには、
 1. コードを変更しても期待通りの変化が起こせるか(予測しやすい
 2. 再利用しやすいコードになっているか
 3. 新しいコードを追加した時に、それが古いコードに支障をきたさないものか(保守しやすい
 4. 後から拡張しやすいコードになっているか
これらを満たすコードを書く必要があります(これらが守れないと破綻しやすいcssになってしまう)。

破綻しやすいcssの特徴

  • クラスを使わず、htmlのタグにcssを適用させている(書く量が増え、タグを変更したい時にcssも変更しなければならない)
      →自分はcssのコードを書く際にhtmlの属性をめちゃめちゃ使っていたので、クラスを積極的に使えるようにしたいと思いました。
  • pxのような絶対値を多用している(一つの文字の大きさを変更しただけで全体の視認性が崩れるため、すべてのpxを変更しなければならなくなる)
      →pxをめちゃめちゃ使っていたので、emなどの相対値も使えるように学習していきます。

→小さな変更が大きなバグに繋がることがあるので、修正しやすいcssを書く必要があります。

cssの基本を振り返る

 修正しやすいcssを書くために、cssの基本を押さえておく必要があります。下記に、自分なりの気づきとともにまとめてみました。

  • 後に書いたコードが、前に書いたコードを上書きする
    ←めっちゃ重要。メディアクエリを実装して、スマホ版のレイアウトを作る時、大事なことは先に書こうと思っていたので、メディアクエリのコードが一切適用されず、何度も先輩に相談し、時間がかかってしまった。

  • セレクタの詳細度の理解
    詳細度は
     1. !important(意図的に使うならOK。使いすぎ=破綻。私も使って注意されました...)
     2. htmlのstyle属性(htmlにスタイル変更のコードを書くよりcssでスタイル変更を一元化したいので、避けた方が良い。使ったことはないですが)
     3. IDセレクタ(#を使って記述。現実的に使える一番詳細度の高いセレクタ。一度使ったIDは同一ドキュメントでしか使えない。一要素にIDは一つだけみたいなもの)
     4. クラスセレクタ(.を使って記述)属性セレクタ([ ]を使って記述。使ったことはない)擬似クラス(:first-childなど)
     5: 要素セレクタ(htmlの<>の中に記述されている、いわゆるタグ。p・li・a・h1などたくさん。cssでは無印)擬似要素(::afterなど)
     6: ユニバーサルセレクタ(*を使う。すべての要素に変更を加える。)
    私はよく、

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "游ゴシック", sans-serif;
}

これで全体の余白を整えたり、フォントを指定したりしています。

  • 詳細度の計算について
    基本上記の強さ順にコードが適用されるが、3〜5番のセレクタに関しては、書いたセレクタの数だけ強さが1ずつ増えていくイメージ。

感想:セレクタめっちゃ多い!!ややこしい!!

1週間プログラミングしてみてそう感じましたが、その上でこの本を読んで学んだことを下記にまとめます。

  • 要素セレクタは、詳細度を上げるだけなので、基本cssでは省略できるところは省略する!
  • クラスセレクタを活用しよう!
    例えば、
    以前私が書いたコード
nav li a{
    color: white;
}

この”li”要らなくない!?
そもそもクラスをhtmlで割り当てればクラスセレクタ1つで済むのでは?
どうしても書きたければコメントで表現して煩雑なコードを避けよう!
...といった気づきを得ました。

  • 不等号を用いた子供セレクタで、冗長化や事故を避けよう!
    先程のコードを
nav > li > a{
    color:white
}

に変更すると、詳細度が押さえられ、他のコードの詳細度を上げる必要がなくなるだけでなく、他のaタグにも影響しないので事故が抑えられるようです。今後ぜひ参考にしたいです!

コンポーネント

 修正しやすいcssを書くうえで大事なことで、ここまで学んできたことをざっくりまとめると、

 ・冗長になりすぎないコードを書くこと
 ・他の要素に影響しないコードを書くこと

こうなりました。
 これらを実現させるために、コンポーネントを意識したコードを書く必要があります。
 コンポーネントには、さまざまなアイデアがありますが、私はその中でも「BEM」をおすすめします。これを使うことで、煩雑になりやすいクラスセレクタを、一目で役割がわかる&他に影響しにくいコードが書け(ると信じて)ます!
 詳しくは、下記に記載するサイトの方の記事が大変参考になりましたので、共有させていただきます。

まとめ

 今までは、とりあえず理想の形に近づけようというスタンスで、効率度外視・パワープレーでコードを組んでいました。
 しかし、実務ではさまざまな方と一緒にコードを組んでいくため、効率的で汎用的でローリスクなコーディングが求められていることに気づきました。
 そのために必要なことをこの本から学べたと思っているので、まずはカリキュラムを通して実践していきたいと思いました。

参考にさせていただいた本・記事

51
47
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
47