CSS記述規則「プロパティ別整理法」の提案
- 2005-03-06 はじめに
- 2005-03-11 多くのCSSは図書館方式で整理されている
- 2005-03-06 図書館方式の例
- 2005-03-07 図書館方式の利点
- 2005-03-11 図書館方式の欠点
- 2005-03-04 図書館方式の何が不満か
- 2005-03-06 プロパティ別整理法とは
- 2005-03-04 絶対規則
- 2005-03-04 推奨規則
- 2005-03-06 プロパティ別整理法の例
- 2005-03-11 プロパティ別整理法の利点
- 2005-03-04 プロパティ別整理法の欠点
- 2005-03-04 プロパティ別整理法に近い例
- 2005-03-04 機械との親和性
- 2005-03-04 Grep検索を活用する
- 2005-03-04 機械が完全に理解できる
- 2005-03-06 蓄々CSS自動整形で、今日からプロパティ別整理法を
- 2005-03-07 蓄々CSS自動整形とは
- 2005-03-06 書き始めはプロパティ別整理法を用いることは推奨されない
- 2005-03-07 セレクタ別のスタイルを把握したいときは、セレクタ基準で整形
- 2005-03-06 例外ケース
- 2005-03-20 反応リンク集(反応への返信付)
- 2005-03-20 Refererログから見つけたもの
- 2005-03-20 コメント付のはてなブックマーク
- 2005-03-20 ChangeLog
はじめに
多くのCSSは図書館方式で整理されている
私の印象では、多くのCSSは以下のルールで記述されています。
- 一つのセレクタに複数のプロパティを与える。
- 製作者の任意のグループ別に集める。
- 製作者の任意の並び順で並べる。
- 要するに「セレクタ基準」で整理している。
この文書内において、以上に基づいた整理法を図書館方式と呼びます。
図書館方式の例
/* 全般 */
body {
background-color:#fff;
color:#000;
}
/* ナビゲーション */
div.navigation {
background-color:#fff;
color:#555;
font-size:80%;
}
div.navigation p {
margin:1em 10%;
padding:1ex;
}
/* コンテンツ */
div.contents {
background-color:#e0e0e0;
color:#333;
font-size:100%;
}
実際はもっともっと巨大なCSSだと思って下さい。
分かり易い例ではないかもしれませんが、大規模な例として私が過去に作成したCSSも併せてどうぞ。
図書館方式の利点
- 製作者の任意のグループごとのスタイルが把握し易い。
- セレクタ毎のスタイルが把握し易い。
図書館方式の欠点
- 「君の名は問題」が発生する。通常、グループには名前をつける。グループを作成する際は、その都度グループ名を考えなくてはならない。
- スタイルを記述する際に、どのグループに含めるか考える必要がある。その判断は、製作者に委ねられる。
- 「こうもり問題」が発生する。既存グループに属さないスタイルを記述しなくてはならないときに、グループを追加しなくてはならない。しかし、グループに属するまでもないスタイルの場合はその他グループに入れてしまう傾向がある。
- 「複数属性問題」が発生する。複数のグループに属するスタイルが出現したとき、どちらかに入れるか、それとも新しいグループを追加するか悩む。
- そもそも、どんなグループ or グループ名が存在するのか忘れてしまう。
- 問題が顕著化したとき、スタイル変更時に変更対象の探索が困難になる。
- 変更対象が巨大なCSSの場合、変更個所の探索は困難を極める。
- 継承するスタイルの場合、HTMLに入れ子構造を採用しているとどのレベルで定義されているのか把握し辛くなる。
- CSSが巨大になるとグループ分けが機能しなくなり、グループの中での並び順が重要になってしまう。
「君の名は問題」「こうもり問題」「複数属性問題」は深刻です。根本的な解決法が無いからです。そしてこの問題は徐々に顕著化していきます。
図書館方式の何が不満か
とにかく無駄な時間がかかることが不満です。
メンテナンス性の低さ、見栄えと関係の無い事象への負担が無視できないほどに大きいのです。これは、良いスタイルを目指す際の重い足かせとなっています。
プロパティ別整理法とは
絶対規則
- 1セレクタに記述できるプロパティは一種類のみ。
- プロパティでグループする。
- [セレクタ] { [識別名]:[値] }[改行] で記述する。
- セレクタとプロパティは一行で記述する。
推奨規則
- 同じプロパティでも、複数セレクタで記述しない。
- セレクタは、文字コード順にソートする。
- グループは、プロパティの文字コード順にソートする。
プロパティ別整理法の例
図書館方式の例を、蓄々CSS自動整形を用いて、プロパティ別整理法に基く記述に変換しました。
/* background-color */
body { background-color:#fff }
div.contents { background-color:#e0e0e0 }
div.navigation { background-color:#fff }
/* color */
body { color:#000 }
div.contents { color:#333 }
div.navigation { color:#000 }
/* font-size */
div.contents { font-size:100% }
div.navigation { font-size:80% }
/* margin */
div.navigation p { margin:1em 10% }
/* padding */
div.navigation p { padding:1ex }
私が過去に作成したCSSを整形した結果も併せてどうぞ。
プロパティ別整理法の利点
整理基準が自明であり、図書館方式に比べてメンテナンス時の負担が少ない点が特徴です。
- 「君の名は問題」が発生しない。グループの名前はプロパティ名なため。
- 記述先のグループはプロパティに基づくため、自明である。
- 並び順はプロパティのアルファベット順に基づくため、自明である。
- 「こうもり問題」「複数属性問題」が発生しない。前提として記述先のグループは必ず存在するため。
- 整理基準がCSSの仕様に基づいているため、機械との親和性が高い。自動整形やGrep検索等に有利である。
- 変更対象が巨大なCSSであったとしても、変更すべきプロパティさえ認識していれば変更個所の探索は容易である。
- 絶対的であるが故に、共同作業をするときのレギュレーションとして利用できる。
プロパティ別整理法の欠点
- 図書館方式に比べてCSSの記述量が増える傾向にある。
- あるセレクタに対して、どのようなスタイルが指定されているか一望出来ない。(ただし、Grep検索によって解決することができる)
- とっつきにくい。
プロパティ別整理法に近い例
私が提案する識別名別記述法に完全に合致していませんが、方向性は同じです。
機械との親和性
Grep検索を活用する
あるセレクタのスタイルをGrep検索によって一気に抽出することができます。また、特定のセレクタに限らず抽出することもできます。
プロパティ別整理法の例から、div.navigation
セレクタのスタイルを一望したいとしましょう。秀丸エディタのGrep検索を使い、検索してみます。検索文字列がdiv.navigation
ではなくdiv.navigation {
となっていることに注目してください。
結果は以下の通りです。思惑通り、div.navigation
セレクタのスタイルを抽出することが出来ました。
(4): div.navigation { background-color:#fff } (9): div.navigation { color:#000 } (13): div.navigation { font-size:80% }
次に、検索文字列をdiv.navigation
として検索してみましょう。結果は以下の通りです。
(4): div.navigation { background-color:#fff } (9): div.navigation { color:#000 } (13): div.navigation { font-size:80% } (16): div.navigation p { margin:1em 10% } (19): div.navigation p { padding:1ex }
div.navigation p
セレクタも抽出されました。これをうまく活用することで、関連するセレクタのスタイルを一気に抽出することができます。
これらの例は小さなCSSを対象としているのでGrep検索の必要性は低いですが、巨大なCSSから抽出するときに非常に強力な手段となり得ます。Grep検索のためにスタイルは一行に収めて記述することを推奨します。
機械が完全に理解できる
プロパティ別識別法の手がかりは全てCSSの仕様によるものです。ということは、機械にも完全に理解できるということです。
蓄々CSS自動整形で既存のCSSをプロパティ別整理法で整理されたCSSへ変換することができます。ソートも行われますので視認性の向上が期待できます。お好みで同じプロパティを複数セレクタにまとめることもできます。是非ご利用ください。
蓄々CSS自動整形で、今日からプロパティ別整理法を
蓄々CSS自動整形とは
- 拙作の蓄々CSS自動整形を使えば、既存のCSSをプロパティ別整理法で整理されたCSSへ一括変換することができます。
- CSSのサイズを抑えたいニーズもあると思いますので、同じプロパティ値の場合は複数セレクタで記述するオプションを用意しました。是非お試し下さい。
- 2005-03-07 セレクタ基準で整形するオプションを用意しました。
書き始めはプロパティ別整理法を用いることは推奨されない
CSSを新たに書き始めるときはメンテナンス性はほとんど必要ありません。図書館方式でも何でもよいですから、体裁を気にせずに頭の中にあるスタイルを一気に記述しましょう。メンテナンスを行うわけではないので、その方が早いです。最初からプロパティ別整理法を用いるのは不適当です。
それではどうするかというと、蓄々CSS自動整形を利用してください。だいたいのスタイルが完成してCSSのサイズが増えてきて調整が難しくなってきたときに、蓄々CSS自動整形で変換するとよいでしょう。作成はセレクタ基準、メンテナンスはプロパティ基準。これがスマートです。
ウェブサイト製作のステップと CSS 記法の選択 - 備忘録にてその理由が詳しく述べられています。
セレクタ別のスタイルを把握したいときは、セレクタ基準で整形
この文書を公開後に沢山の方々からご意見をいただき、セレクタ基準での整形も一定のニーズがあることがわかりましたので、蓄々CSS自動整形にセレクタ基準で整形するオプションを用意しました。セレクタ基準で記述する方式も、小規模なCSSであったり「慣れ」によってメンテナンス性が確保されている場合においては推奨できる方式です。
一瞬にしてセレクタ毎のスタイルが一望できるのは場合によっては便利だと思います。セレクタ名順にソートも行われるので、記述位置も発見し易い(筈)です。2つの方式を行き来できるエディタがあればそれはもう便利だと思います。
宜しければぜひ一度お試しください。
例外ケース
サイズの小さいCSSや、1セレクタに対して1スタイルで済むような場合ははわざわざプロパティ別整理法を使わなくてもよいでしょう。それだけでメンテナンス性は確保されています。
例外ケースについてCSS の記法 - 備忘録にて詳しく言及されています。
反応リンク集(反応への返信付)
Refererログから見つけたもの
- 2005-03-04 2005年3月4日(金)今日のブックマーク
- パソコン遊戯日記~2005年3月 -
これは言えてますねぇ。私もメンテナンス性の高い書き方を考えてみることにしよう。
- 2005-03-05 プロパティ別整理法に乗っかってみる
-
蓄々CSS自動整形にて整形してみました。うん、なるほどbeautifier!。この方式に慣れてしまえば、後から弄りやすいかもしれません。
- 2005-03-05 X *ole.net : 蓄々CSS自動整形
-
ふむ。
- 2005-03-05 Hatena::agenda - 2005-03-05
-
これは同じ値のプロパティを持っていても別の宣言として記述するらしい(中略)それゆえ図書館方式に比べてCSSの記述量が増える傾向にあるけれども、これでメンテナンス性は高くなると。どちらの方式でも表示できて、保存する時に記述量を最適化してくれるCSSエディタが欲しいと少し思った。既にあったりして。
蓄々CSS自動整形では、同じ値のプロパティを持っている場合に同じ宣言として整形してくれるオプションがありますので、如何でしょうか。エディタ向けにASPとして提供してもいいかもしれません。スクリプト(php)の公開も考えています。
- 2005-03-05 暴満館 ≫ CSS記述規則「プロパティ別整理法」の提案
-
欠点の部分を読むと、確かに身に覚えのある部分が。
- 2005-03-05 エンコーダー - CSSの整理
-
今日紹介したサイトで提案されている「プロパティ整理法」 私もこれを一度やったのですが、直感的に分かりづらいですし、行数がものすごいことになったのでやめたんです。GREP検索なんてその当時は知りませんでしたし(苦笑)
つまり、この項目で言いたいことは「GREP検索を使うのであれば『プロパティ整理法』は普通に書くよりいいんじゃないか?」ということを発見させられたという話です。
Grep検索なんてまどろっこしいものではなく、セレクタを選択するとそのセレクタに設定されている全てのプロパティがツールチップでポップアップ表示されるエディタがあればさらに便利なんですが...。
- 2005-03-06 CSS の書き方 - gaban
-
今までいろいろな書き方を試行錯誤してきて、現在「図書館方式」に落ち着いている。色関連と表示関連を別ファイルにしたりもしてきたけれど、ここまで徹底した記述はある意味すごいかも。ちょっと試してみたくなったので、蓄々CSS自動整形で作ってみて、これから試してみます。
- 2005-03-06 CSS の記法 - 備忘録
-
プロパティ別整理法は損益分岐点が高いので、要注意。私は過去に3回挑戦して、ことごとく失敗しました。
私が失敗した理由は簡単、私の書く CSS はいつも簡単なものでしかなかったからです。あきやんさんのいう図書館方式の欠点は、あくまでもヘビーなカススタイラーの抱える問題。私には関係ないのでありました。直感的なわかりやすさを犠牲にするだけの価値があるかどうか? 導入の際はよく注意すべきですね。
あくまでもヘビーなカススタイラーの抱える問題とは、その通り。簡単なCSSでサイズが小さければそれだけでメンテナンス性は確保されますから、どんな方式でもよいでしょう。公開後にそのことに言及していないことに気づいて、2005-03-05の深夜に例外ケースの節を追加しましたが、行き違いになってしまったようです。
さらに、徳保氏は続けます。
もう1点、付け加えるならば、そもそも CSS を基本的な形で利用する限り、CSS ファイルが肥大化なんてするはずがない。class 属性や id 属性や div 要素なんかを駆使して、同じ種類の要素に対して全然違うスタイルを指定しようとすること自体に問題がある。
つまり、基本的には、1要素型につきスタイル指定は1回でよいのだし、であれば図書館方式さえ必要ない。現に、最近のアドバイスで私が作成した改善案に用いられている CSS は、グループ化とか分類とか、そんなことは一切していない。50行に満たない CSS を書くのに、そんなことをいちいち考える方が面倒くさい。
……というレベルの方は、少なくないと思う。そして、それで別にいいんじゃないかと。
はい、それで別にいいと思います。1要素に対して1スタイルで済む場合は、複数のプロパティを持たせるほうが遥かにメンテナンス性は高いと思います。
的確なご意見を下さり、有難うございました。
- 2005-03-06 ウェブサイト製作のステップと CSS 記法の選択 - 備忘録
-
たいていの方は前者(作者注:セレクタを基準に整理)を用います。それは何故か? 一般に「直感的にわかりやすいから」と説明されますが、それでは言葉が足りないでしょう。より正確には、「CSS を書き上げていく段階において、セレクタを基準に整理していく方が自然だから」となるのではないでしょうか。
(中略)
なるほど、構築からメンテナンスへ段階を移すにしたがって、CSS を整理する基準をセレクタからプロパティへ変更することには大きな意義があるわけです。
とはいえ、従来、それは難題でした。過去、CSS を再整理する試みがたいてい成功しなかったのは、手作業ではあまりにも面倒だからです。だからといって、最初からプロパティ基準で CSS を書く不自然さ・わかりにくさといったらない。
あきやんさんは、ここにひとつの技術革新をもたらしました。蓄々CSS自動整形は、セレクタ基準の CSS をプロパティ基準へ自動で再整理するツールです。
プロパティ別整理法において蓄々CSS自動整形は必須だということを、今までさんざんテストしてきた自分自身が忘れていました。CSSを新規に構築する際にプロパティ別整理法を最初から用いるのはむしろ推奨されないことは、強く書くべきでした。
最初からプロパティ基準で CSS を書く不自然さ・わかりにくさといったらない
のは、私も初期の段階で経験しました。幸い私にはプログラムと正規表現の心得があったので、ツールを作成するのは難しいことではありませんでした。ツールを完成させたのは一年前でした。一年間使い続けて便利だと確信したので、この文書とツールの公開に踏み切った次第です。(実は、この文書も一年前にほぼ完成していました)
再々のご意見、ありがとうございました。
- 2005-03-06 atsushifxの七転八倒 ≫ 小規模なんで問題ない、というかスタイルシートを1ファイルにする必要はないでしょ?
-
要するに機能分割やネーミングなどをちゃんとしてないからグチャグチャになるってことじゃないかしら?
機能分割やネーミングにかかる時間がもったいない、と考えています。わざわざネーミングするまでもないものや、複数のグループに属するようなスタイルが発生した場合、頭を抱ることになるでしょう。どこに記述したのか忘れてしまうこともあります。ただし小規模な場合は問題ありません。
ちゃんとしてないから
...というのは、普段から整理整頓していれば、という発想かと思います。ですが、ちょっとしたカスタムスタイルでついつい整理せずに記述してしまい、収集がつかなくなったり、整理するのが面倒くさくなることはままあります。図書館方式は整理したときは完璧に整理されているのですが、エントロピーは増大していくのです。プロパティ別整理法ならエントロピーの増大は小さく抑えられますし、自動整形で一発リセットすることができます。また、スタイルシートを1ファイルにする必要は提案していません。私もglobal.cssを基本としてcontent.cssなどを派生として作成する継承方式を採用していますので、スタイルシートを複数ファイルに分けて管理することは自然だと思います。
- 2005-03-06 プロパティ別整理法 - 日これ(2005-03-06)
-
非常に面白く、かつ実用的なアイデアだと思います。同じCSSテキストを「図書館方式」と「プロパティ別整理法」で相互に行き来しながら編集できるエディタ(あるいは Emacs のモード)があれば便利でしょうね。
- 2005-03-06 CSS の書き方 その2 - gaban
-
で、プロパティ別整理法を試してみての感想は、図書館方式の利点である
製作者が考案したグループごとのスタイルが把握し易い
の部分より大きく勝る利点が、自分的には少ないかな。結局、自分の頭の中で処理できる程度のグループ分けしかしていないので、グループごと、というよりセレクタごとのスタイルを把握しにくいのは大きなマイナス点でした。
ただ、Grep検索よりもっと簡単な操作で、これらの表示を切り替えられればいいのかもしれない、とちょっと思ったりしました。
蓄々CSS自動整形にセレクタ基準で整形するオプションを用意しました。
ご意見、ありがとうございました。
- 2005-03-06 yu-note - CSS記述規則「プロパティ別整理法」の提案
-
メモ。なるほどねー。後でやってみよう。
ちなみに、私はいつも構造化エディタを使って図書館方式で記述している。
- 2005-03-07 atsushifxの七転八倒 - Comments on 小規模なんで問題ない、というかスタイルシートを1ファイルにする必要はないでしょ?
-
僕にとってはスタイルシートファイルの分割も機能分割に入ります。プロパティー別整理法は、機能分割に時間をかけないという意味でスタイルシートを1ファイルにするようなものだと思ったんです。
実際の話、プロパティ別整理法を使っている人がスタイルシートをどう分割しているかで話が変わってきちゃいますけど。
ファイルを分割する際や分割後にどれに入れるか悩んだり、どれに入れたのか忘れる場合はよろしくありません。ということは、悩まないような分割方法であれば構わないといえます。
そうなると
どう分割しているか
が重要になってきます。ナビゲーション系・本文系...という風に分割するのは後々エントロピーの増加を招きますが、幅余白指定系・色系・文字装飾系という風に分割するなら問題ありません。私が採用している継承方式は基準となる大規模なスタイルがあって、ページごとにちょっとだけカスタムしたいときに別ファイルにして定義するという方式です。稀にどちらに入れたかわからなくなったりしますが、ほんとに稀なのであまり問題になりません。派生スタイルがシンプルな(小規模な)CSSだからでしょう。
また、あるプロパティの記述箇所を探すときにプロパティ別整理法を使っていれば、たとえファイルが分割されていたとしても最大でも分割された数だけ検索をかければ発見することが可能です。
ご意見、ありがとうございました。
- 2003-03-07 CSSの書き方? - 日記/2005-03-05 - okkezのPukiWiki
-
イイかも知れない。頭の片隅に置いておこう。
- 2003-03-08 ぷろじぇくと、みすじら。 - diary
-
そういえば関係ないけど、スタイルシートブラウザ/エディタみたいなのが欲しいなぁー
- 2005-03-11 [WEB]プロパティ別整理法 - 32nd diary(2005-03-11)
-
ズバリ,ひとことで説明するならば,CSSの第一正規化といえるのではなかろうか.
つまり,CSSを行思考のデータベースとすることにより,grepを用いてプロパティをキーにしてデータベース内を検索できる,というわけだ.
CSSの第一正規化という表現は、データベースを知っている人ならなるほどと頷ける表現ですね。
- 2005-03-20 oogattaの日記 - 2005-03-16
-
とにかく手法そのものだけでなく、CSSという「存在自体がなんとなくぐちゃぐちゃ」なものに対してもびしっと切り込んでいく考え方に学ぶべきところは多くあるように感じました。
oogattaさん、褒め過ぎです。すぐに調子に乗る私には危険な言及です。
- 2005-03-20 覚え書き@kazuhi.to: CSS記述規則「プロパティ別整理法」の提案
-
要はCSSの記述の仕方をどの程度まで厳密にルール化し、またそれを維持するかってことに尽きるのではないかと思います。特にid/class属性値の命名規則とか、mozilla.orgのCSSファイルで話題になった同一セレクタ内でのプロパティ登場順、といった部分のルール化ですね。スタイル変更時に変更対象の探索については、いずれツールの類が進化すれば(いつも他力本願ですけど)十分解決が可能と期待しています。
mozilla.orgのプロパティ登場順でソートは需要があると感じてきました。私もpaddingとmarginは隣り合わせたいと常々思いますから。
- 2005-03-20 Flash MX 2004 MAKING BOOKS: 本の進捗[雑記22]CSSメンテナンス
-
直感的なGUIを持つ(DreamweaverやGoLiveなどの)ホストアプリケーションのエクステンションとして展開できそうな気がする。プロダクションなどはワークフローが強固だから道具を変えるのは難しいが、エクステンションなら導入しやすい。
エクステンションですか、いい提案ですね。
コメント付のはてなブックマーク
はてなブックマーク - CSS記述規則「プロパティ別整理法」の提案より。
- twwbm:検索、EC、ウェブデザ、flickrをメモ。 thiswholeworld - 『cssのネックを解消できるかも。』
- ignorance's Bookmark ignorance - 『CSSの管理記法』
- 高森太郎のアドレスクリップ TakamoriTarou - 『作った後「○○を修正したい」という場合には便利かも。なるほど。利点欠点を考え参考にちょっと試してみよ』
- ventureのブックマーク venture - 『巨大なスタイルシートの整理法。これは試してみたい』
- usj12262のブックマーク usj12262 - 『300行ぐらいのcssならこの方法も考えたい』
- mkanedaのブックマーク mkaneda - 『CSS の編集がしやすくなった、気がする』
- clippin' kotastyle - 『なるほど。』
- zwfkのブックマーク zwfk - 『1セレクタ1プロパティ。grepの事も考えて1行で、という書き方』
- yukattiのブックマーク yukatti - 『「プロパティ別整理法」は長所もあるが欠点もある。ツールは便利そう。』
- 未確認歩行物体Yunyのネット遊歩道 Yuny - 『はてなダイアリーテーマ改造でもできるかな? 文字色は文字色、サイズはサイズでまとめていく感じ。』
- gadget jetrug - 『CSS手書きする時代なんか早く終わればいいのにね』
- orz wacky - 『視点を変えたCSSの記述法。発想は面白いけど、まぁ採用することは無いだろう。』
- mktmkの気になる出来事 mktmk - 『css初心者ですが、自動生成やってみたら、すんごくかっこえくなった。びっくり。』
- Yuichirouの投げやりクリッピング Yuichirou - 『セレクタを行、プロパティを列とするなら、「行セット」だったものを「列セット」にしてしまう逆転の発想。』
- kunimiyaのブックマーク kunimiya - 『複雑なCSSスタイルシートの記述をするときにおすすめの整理法』
ChangeLog
- 2005-03-20
- 反応リンク集のRefererログから見つけたものを更新。
- コメント付のはてなブックマークを更新。
- 2005-03-11
- 2005-03-09
- 2005-03-08
- 反応リンク集のRefererログから見つけたものを更新。
- コメント付のはてなブックマークを更新。
- 2005-03-07
- セレクタ別のスタイルを把握したいときは、セレクタ基準で整形節を追記。
- 反応リンク集を更新。
- 図書館方式の利点を更新。
- 図書館方式の欠点を更新。
- 2005-03-06
- 反応リンク集を更新。
- 提案の目的を更新。
- 例外ケースを追加。
- 図書館方式の例とプロパティ別整理法の例に大規模なCSSの例を追加。
- 2005-03-05 反応リンク集を更新。
- 2005-03-04 公開。