はじめに

CSSのプロパティの順番や全体の書き方を統一するため、CSScombというツールを使いました。「Sublime Text 3」というテキストエディタにプラグインとして組み込みます。

整形に使った設定ファイルと備忘録を書いておきます。

Sublime Text 3は、Build 3065、Windows64bit portable versionを使っています。

csscombは、2014年10月26日にインストールしたのを使っています。

このページの初公開は2015年1月ですが、内容は2014年10月末に書いたものです。公開前に確認と変更をしていますが、すでに古くなっている箇所があるかもしれません。

Sublime Text 3

イマイチ勝手がわからず難儀しました。今はCSSの整形のみ使っています。

インストールからカスタマイズまで

  1. 公式サイトからインストーラをダウンロード
  2. インストール
  3. Package Controlのインストール
  4. 日本語化を行うため、Package Controlから「japanize」をインストール
  5. 「japanize」インストール時のメッセージに従って作業を行い日本語化完了
  6. 日本語入力をやりやすくするため、Package Controlから「IME Support」をインストール
  7. [基本設定]→[基本設定 - ユーザ]で、基本設定のカスタマイズを行う

とりあえずここまでやったあと、他のプラグインを入れました。といっても今回は「CSScomb」と「Bracket Highlighter」だけですが。

「CSScomb」の動作条件として「Node.js」の導入があります。Downloadsから適切なものをダウンロードしてインストール。私はWindowsインストーラ形式の64bit版を使いました。バージョンは0.10.32。ウィザードに従ってインストールした後、コマンドプロンプトからnode -vと打ってバージョンが表示されたら成功。その後Sublime Text 3に戻って「CSScomb」のインストールを行いました。

  1. Package Controlから「CSScomb」をインストール
  2. [基本設定]→[Package Settings]→[CSScomb]→[Settings - User]で、基本設定のカスタマイズを行う

[基本設定]→[Package Settings]→[CSScomb]→[Settings - Default]で、CSScombの基本設定を表示し、それをコピー。使い慣れているテキストエディタWZ Editor8で改変作業を行い、[Settings Default]にペーストしています。

「Bracket Highlighter」はPackage Controlからインストールしておしまい。

インストール参考

インストール後のカスタマイズは[tips][Sublime Text] Sublime Text 3をインストールしたらまずやることKeid's LIFE)を参考にしました。

ポータブル版でテストをしたことがありますが、そのときは簡単5分!WindowsでSublime Text3ポータブル版を日本語化する方法寝ログ)を参考にしました。

「sublime text 3」で日本語のページをググるだけでも多くのブログなどがヒットします。

タブでトラブル

デフォルトの設定でテスト後、自前の設定を実行しましたが、なぜかタブのところが空白4個に変換されています。

基本のユーザ設定では、タブをスペースに変換しないようにしてます。設定をいじってみましたがさっぱり判らず。

ググってみたところ、SublimeText - Sublime TextでTabを押した際にスペース4つと認識される。というページを発見。

とりあえず[表示]→[インデント設定]→[インデントをタブに変換]で、空白だったのがタブに変換されました。[インデント設定]の項目も、2箇所の[インデント幅[4]]にチェックが入っています。

その後はcsscombを使ってもタブが空白になることもなくなっています。

CSScombプラグインのユーザ設定

カスタマイズ

ルールの整形は、設定ファイルの値をいじってなんとかしてます。

弱ったのがプロパティの並び順。2014年4月にサイトのサービスでCSScombを使ったときと、9月以降に再度使ったときでは順序が違いました。最近のはfont系から並んでいます。個人的にはdisplayあたりから並ぶ方がしっくりくるのですが。

ということでプロパティの順番もカスタマイズ。この辺についても「CSS プロパティ 順番」あたりでググるといろいろヒットします。

カスタマイズ参考

CSScombのカスタマイズは、設定ファイル冒頭にあるURLのページConfiguration optionsに詳細な解説があります。before、afterくらいしか英語のわからない私でも例を見るだけでなにがどうなるか判ります。

CSScombを実行すると、プロパティで1行間が空くものがあります。種類ごとに分かれるようで判りやすくはあるのですが、私としては詰めて書きたいところ。その辺はSublime Text 3のプラグインCSScombのカスタマイズSoraxism)の「プロパティのソート順の変更」が参考になりました。

プロパティの順番

mozilla.org Base Styles冒頭の並び順と、CSS 2.1仕様書のプロパティ登場順の折衷でいきました。mozilla.orgのはlist-styleが二番目だったのが馴染めず、変更するためにCSS 2.1仕様書のを使っています。

CSS 2.1仕様書でプロパティが紹介されるのは8章から18章と付録Aの範囲です。これをmozilla.org風に並べ替え、CSS3を間に追加しています。

これで作ったのですが、試すとエラーが出るため、少し省いて短くしました。省いたのは視覚効果のmask系、グリッドレイアウト、聴覚スタイルシートです。

プロパティの順番は基本的にCSS2.1仕様書の記述順を優先。overflow-x、overflow-y、overflow-styleは、overflowのすぐ後に追加するなど、例外もあります。

簡略プロパティは個々の数値を指定したプロパティより先に書いています。簡略でまず4箇所同時に指定し、次に1箇所だけ変更する場合があるためです。書き順は上、右、下、左で、値を4つ書くときの順番と同じです。

ユーザ設定ファイル

CSScombのユーザ設定ファイルです。今回作成した設定は以下の通りです。訳はいくつかのブログに載っていたもの+Google翻訳+公式サイトのbefore、afterを見ながら適当にやってます。

{
    // サポートされているオプションと値のリストは、以下のURL先で:
    // https://github.com/csscomb/csscomb.js/blob/master/doc/options.md
    "config": {

        // Whether to add a semicolon after the last value/mixin.
        "always-semicolon": true,// 常にセミコロンを入れるか(入れる)

        // Set indent for code inside blocks, including media queries and nested rules.
        "block-indent": "\t",// インデントの記述(タブを使用)

        // Unify case of hexadecimal colors.
        "color-case": "lower",// 16進数での色の記述(小文字)

        // Whether to expand hexadecimal colors or use shorthands.
        "color-shorthand": true, // 16進数での色の記述で簡略記法を使うか(使う)

        // Unify case of element selectors.
        "element-case": "lower",// セレクタの記述(小文字)

        // Add/remove line break at EOF.
        "eof-newline": true, // EOFで改行を入れるか(改行を入れる)

        // Add/remove leading zero in dimensions.
        "leading-zero": true, // 小数点前のゼロの記述(省略しない)

        // Unify quotes style.
        "quotes": "double",// 引用符のスタイルを統一(二重引用符を使用)

        // Remove all rulesets that contain nothing but spaces.
        "remove-empty-rulesets": false,// 空のルールセットを削除するか(しない)

        // Set space after `:` in declarations.
        "space-after-colon": 1,// 「:」の後(空白1文字)

        // Set space after combinator (for example, in selectors like `p > a`).
        "space-after-combinator": 1,// 子、兄弟結合子の後(空白1文字)

        // Set space between declarations (i.e. `color: tomato`).
        "space-between-declarations": "\n",// 「プロパティ:値」同士の間(改行)

        // Set space after `{`.
        "space-after-opening-brace": "\n",//「{」の後(改行)

        // Set space after selector delimiter.
        "space-after-selector-delimiter": 1,// セレクタ区切り文字の後(空白1文字)

        // Set space before `}`.
        "space-before-closing-brace": "\n\t",//「}」の前(改行+タブ)

        // Set space before `:` in declarations.
        "space-before-colon": "",// 「:」の前(空白なし)

        // Set space before combinator (for example, in selectors like `p > a`).
        "space-before-combinator": 1,// 子、兄弟結合子の前(空白1文字)

        // Set space before `{`.
        "space-before-opening-brace": "\t",//「{」の前(タブ)

        // Set space before selector delimiter.
        "space-before-selector-delimiter": "",// セレクタ区切り文字の前(空白なし)

        // Whether to trim trailing spaces.
        "strip-spaces": true,// 末尾の空白文字(タブや複数の改行)の処理(削除)

        // Whether to remove units in zero-valued dimensions.
        "unitless-zero": true,// 値がゼロの単位の記述(省略)

        // Whether to align prefixes in properties and values.
        "vendor-prefix-align": true,// ベンダープレフィックスを整列させるか(整列)

        // Sort properties in particular order.
        "sort-order": [
            [
                //------------------------------------ 視覚整形モデル
                "display",
                "position",
                "top",
                "right",
                "bottom",
                "left",
                "float",
                "clear",
                "z-index",
                "direction",
                "unicode-bidi",
                "-webkit-writing-mode",
                "writing-mode",
                "-webkit-text-orientation",
                "text-orientation",
                "text-combine-upright",
                //------------------------------------ 視覚整形モデル詳細
                "width",
                "min-width",
                "max-width",
                "height",
                "min-height",
                "max-height",
                "line-height",
                "vertical-align",
                //------------------------------------ 視覚効果
                "overflow",
                "overflow-x",
                "overflow-y",
                "-ms-overflow-style",
                "overflow-style",
                "clip",
                "visibility",
                "-webkit-marquee-style",
                "marquee-style",
                "marquee-loop",
                "-webkit-marquee-direction",
                "marquee-direction",
                "-webkit-marquee-speed",
                "marquee-speed",
                "rotation",
                "rotation-point",
                "-webkit-clip-path",
                "clip-path",
                "clip-rule",
                //------------------------------------ フレキシブルボックス
                "-webkit-flex-direction",
                "flex-direction",
                "-webkit-flex-wrap",
                "flex-wrap",
                "-webkit-flex-flow",
                "flex-flow",
                "-webkit-order",
                "-ms-flex-order",
                "order",
                "-webkit-flex",
                "-ms-flex",
                "flex",
                "-webkit-flex-grow",
                "flex-grow",
                "-webkit-flex-shrink",
                "flex-shrink",
                "-webkit-flex-basis",
                "flex-basis",
                "-webkit-justify-content",
                "justify-content",
                "-webkit-align-items",
                "align-items",
                "-webkit-align-self",
                "align-self",
                "-webkit-align-content",
                "align-content",
                //------------------------------------ 段組レイアウト
                "-webkit-columns",
                "-moz-columns",
                "columns",
                "-webkit-column-width",
                "-moz-column-width",
                "column-width",
                "-webkit-column-count",
                "-moz-column-count",
                "column-count",
                "-webkit-column-gap",
                "-moz-column-gap",
                "column-gap",
                "-webkit-column-rule",
                "-moz-column-rule",
                "column-rule",
                "-webkit-column-rule-color",
                "-moz-column-rule-color",
                "column-rule-color",
                "-webkit-column-rule-style",
                "-moz-column-rule-style",
                "column-rule-style",
                "-webkit-column-rule-width",
                "-moz-column-rule-width",
                "column-rule-width",
                "break-before",
                "break-after",
                "break-inside",
                "-webkit-column-span",
                "column-span",
                "-webkit-column-fill",
                "-moz-column-fill",
                "column-fill",
                //------------------------------------ ボックスモデル
                "margin",
                "margin-top",
                "margin-right",
                "margin-bottom",
                "margin-left",
                "padding",
                "padding-top",
                "padding-right",
                "padding-bottom",
                "padding-left",
                "border",
                "border-width",
                "border-color",
                "border-style",
                "border-top",
                "border-right",
                "border-bottom",
                "border-left",
                "border-top-width",
                "border-right-width",
                "border-bottom-width",
                "border-left-width",
                "border-top-color",
                "border-right-color",
                "border-bottom-color",
                "border-left-color",
                "border-top-style",
                "border-right-style",
                "border-bottom-style",
                "border-left-style",
                "border-radius",
                "border-top-left-radius",
                "border-top-right-radius",
                "border-bottom-right-radius",
                "border-bottom-left-radius",
                "border-image",
                "border-image-source",
                "border-image-slice",
                "border-image-width",
                "border-image-outset",
                "border-image-repeat",
                "box-shadow",
                "-webkit-box-decoration-break",
                "-ms-box-decoration-break",
                "-o-box-decoration-break",
                "box-decoration-break",
                "-moz-box-sizing",
                "box-sizing",
                "text-overflow",
                //------------------------------------ 画像値と置換内容
                "object-fit",
                "object-position",
                "image-resolution",
                "image-orientation",
                "image-rendering",
                //------------------------------------ 色と背景
                "color",
                "background",
                "background-color",
                "background-image",
                "background-repeat",
                "background-attachment",
                "background-position",
                "background-clip",
                "background-origin",
                "background-size",
                "mix-blend-mode",
                "isolation",
                "background-blend-mode",
                "opacity",
                //------------------------------------ フィルタ(Filter Effects Module Level 1)
                "-webkit-filter",
                "filter",
                //------------------------------------ フォント
                "font",
                "font-family",
                "font-style",
                "font-variant",
                "font-weight",
                "font-size",
                "font-stretch",
                "font-size-adjust",
                "font-synthesis",
                "src",
                "unicode-range",
                "-webkit-font-kerning",
                "font-kerning",
                "-webkit-font-variant-ligatures",
                "font-variant-ligatures",
                "font-variant-position",
                "font-variant-caps",
                "font-variant-numeric",
                "font-variant-alternates",
                "font-variant-east-asian",
                "-webkit-font-feature-settings",
                "-o-font-feature-settings",
                "font-feature-settings",
                "font-language-override",
                //------------------------------------ テキスト
                "text-indent",
                "text-align",
                "text-decoration",
                "-webkit-text-decoration-line",
                "-moz-text-decoration-line",
                "text-decoration-line",
                "-webkit-text-decoration-color",
                "-moz-text-decoration-color",
                "text-decoration-color",
                "-webkit-text-decoration-style",
                "-moz-text-decoration-style",
                "text-decoration-style",
                "-webkit-text-decoration-skip",
                "text-decoration-skip",
                "-webkit-text-underline-position",
                "text-underline-position",
                "letter-spacing",
                "word-spacing",
                "text-transform",
                "white-space",
                "-webkit-text-emphasis",
                "text-emphasis",
                "-webkit-text-emphasis-style",
                "text-emphasis-style",
                "-webkit-text-emphasis-color",
                "text-emphasis-color",
                "-webkit-text-emphasis-position",
                "text-emphasis-position",
                "text-shadow",
                "-moz-tab-size",
                "-o-tab-size",
                "tab-size",
                "-webkit-line-break",
                "line-break",
                "word-break",
                "-webkit-hyphens",
                "-moz-hyphens",
                "-ms-hyphens",
                "hyphens",
                "overflow-wrap",
                "word-wrap",
                "-webkit-text-align-last",
                "-moz-text-align-last",
                "text-align-last",
                "-webkit-text-justify",
                "text-justify",
                "hanging-punctuation",
                //------------------------------------ ルビレイアウト
                "-webkit-ruby-position",
                "ruby-position",
                "ruby-merge",
                "ruby-align",
                //------------------------------------ テキスト流し込み形状
                "-webkit-shape-outside",
                "shape-outside",
                "-webkit-shape-image-threshold",
                "shape-image-threshold",
                "-webkit-shape-margin",
                "shape-margin",
                //------------------------------------ 生成内容
                "content",
                "quotes",
                "counter-reset",
                "counter-increment",
                "list-style",
                "list-style-type",
                "list-style-image",
                "list-style-position",
                "icon",
                //------------------------------------ 表
                "caption-side",
                "table-layout",
                "border-collapse",
                "border-spacing",
                "empty-cells",
                //------------------------------------ 変形
                "will-change",
                "-webkit-transform",
                "transform",
                "-webkit-transform-origin",
                "transform-origin",
                "-webkit-transform-box",
                "transform-box",
                "-webkit-transform-style",
                "transform-style",
                "-webkit-perspective",
                "perspective",
                "-webkit-perspective-origin",
                "perspective-origin",
                "backface-visibility",
                //------------------------------------ アニメーション
                "-webkit-animation",
                "animation",
                "-webkit-animation-name",
                "animation-name",
                "-webkit-animation-duration",
                "animation-duration",
                "-webkit-animation-timing-function",
                "animation-timing-function",
                "-webkit-animation-iteration-count",
                "animation-iteration-count",
                "-webkit-animation-direction",
                "animation-direction",
                "-webkit-animation-play-state",
                "animation-play-state",
                "-webkit-animation-delay",
                "animation-delay",
                "-webkit-animation-fill-mode",
                "animation-fill-mode",
                "-webkit-transition",
                "transition",
                "transition-property",
                "transition-duration",
                "transition-timing-function",
                "transition-delay",
                //------------------------------------ ユーザーインタフェース
                "cursor",
                "outline",
                "outline-width",
                "outline-style",
                "outline-color",
                "outline-offset",
                "-moz-resize",
                "resize",
                "nav-index",
                "nav-up",
                "nav-right",
                "nav-down",
                "nav-left",
                "ime-mode",
                "scroll-behavior",
                "-webkit-user-select",
                "-moz-user-select",
                "-ms-user-select",
                "pointer-events",
                //------------------------------------ ページメディア
                "page-break-before",
                "page-break-after",
                "page-break-inside",
                "orphans",
                "widows",
                "size",
                //------------------------------------ IE独自
                "-ms-zoom",
                "zoom",
                "-ms-filter",
                "filter:progid",
                "-ms-interpolation-mode"
            ]
        ]
    }
}
// 2015-01-13
// 2015-03-09 -moz-box-sizingを追加

上記は字下げに空白を使ってますが、実際に使っているのはタブです。ブラウザだとタブをどう表示するか判らないので(たぶん8文字分下げると思いますが)、タブ1個を半角空白4文字に置換しています。CSSの「tab-size」で指定することもできますが、IEが未対応のようなので止めました。

ダウンロード版に含まれるファイルは、タブを使ったものです。

結果

とりあえずなんとかなりました。

プロパティの出典

2014年10月26日~29日に調べてまとめ、2015年1月12日~13日に再度確認しています。

「調べて」とか「確認」とか言いつつ、私の理解不足、勘違い、ミスなどによる間違いが必ずあると思います。

CSS2.1の部分

全体
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) 邦訳版

CSS3の部分

草案も多く、プロパティに変更が出るかもしれません。

CSS3の日本語訳集血統の森 web実験小屋)から当たってみました。

視覚整形モデル
CSS Writing Modes Level 3(編集者草案:2014年10月27日及び2014年12月15日分を参照)
視覚整形モデル詳細
(全てCSS2.1)
視覚効果
CSS basic box model(草案:2007年08月09日)
CSS Masking Module Level 1(勧告候補:2014年08月26日)
フレキシブルボックス
CSS Flexible Box Layout Module Level 1(最終草案:2014年10月28日及び2015年1月9日分を参照)
段組レイアウト
CSS Multi-column Layout Module (日本語訳)(編集者草案:2014年07月21日)
(グリッドレイアウト)
CSS Grid Layout Module Level 1 (日本語訳)(編集者草案:2014年10月27日及び12月20日分を参照)
グリッド レイアウト (Windows)
ボックスモデル
CSS Backgrounds and Borders Module Level 3 (日本語訳)(編集者草案:2014年08月13日)
CSS Fragmentation Module Level 3(編集者草案:2014年10月28日及び12月19日分を参照)(段組とページメディアの箇所に記述)
CSS Basic User Interface Module Level 3 (CSS3 UI) (ja)(草案:2012年01月17日)
色と背景
Compositing and Blending Level 1(編集者草案:2014年10月22日及び12月16日分を参照)
CSS カラーモジュール Level 3(勧告:2011年06月07日)
フィルタ(Filter Effects Module Level 1)
Filter Effects Module Level 1(草案:2013年11月26日及び2014年12月25日分を参照したが、理解不足により「filter」のみ記述)
フィルタ効果 – SVG 1.1 (第2版)(勧告 :2011年08月16 日)
フォント
CSS Fonts Module Level 3 (日本語訳)(勧告候補:2013年10月03日)
テキスト
CSS テキスト装飾モジュール レベル 3(勧告候補:2013年08月01日)
CSS Text Module Level 3(最終草案:2013年10月10日)
ルビレイアウト
CSS Ruby Layout Module Level 1(草案:2014年08月05日分を参照)
テキスト流し込み形状
CSS Shapes Module Level 1(勧告候補:2014年03月20日)
生成内容(iconのみ)
CSS Basic User Interface Module Level 3 (CSS3 UI) (ja)(草案:2012年01月17日)
画像値と置換内容
CSS Image Values and Replaced Content Module Level 3 (日本語訳)(編集者草案:2014年10月19日及び11月24日分を参照)
テーブル
(全てCSS2.1)
変形
CSS Will Change Module Level 1(編集者草案:2014年12月25日分を参照)
CSS Transforms Module Level 1 (日本語訳)(編集者草案:2014年10月25日及び11月25日分を参照)
アニメーション
CSS Animations Level 1(日本語訳)(編集者草案:2014年10月22日及び2015年01月09日分を参照)
CSS Transitions — CSS 遷移効果(日本語訳)(編集者草案:2014年08月21日及び12月28日分を参照)
ユーザーインタフェース
CSS Basic User Interface Module Level 3 (CSS3 UI) (ja)(草案:2012年01月17日)
CSSOM View Module (日本語訳)(編集者草案:2014年10月15日及び12月02日分を参照)
ページメディア(sizeのみ)
CSS Paged Media Module Level 3(草案:2013年03月14日)
(聴覚)
CSS Speech Module(日本語訳)(勧告候補:2012年03月20日)
IE独自
zoom property (Internet Explorer)
-ms-zoom - CSS3ウェブブラウザ実装メモ - 血統の森 web実験小屋
-ms-filter property (Internet Explorer)
AlphaImageLoader Filter
Gradient Filter
-ms-interpolation-mode property (Internet Explorer)
-ms-interpolation-mode/image-rendering;画像処理の速度と品質を指定 - CSS3ウェブブラウザ実装メモ - 血統の森 web実験小屋

IE独自フィルタ(DXフィルタ)は、正直良く判りませんでした。とりあえずCSS3のフィルタと区別できるよう、最後に「filter:progid」と書いておきましたが、これでいいのか良く判りません。というかテストしたらエラーが出ました。私自身はIE独自フィルタをCSSに書くことはないので、このままでいきます。

というかCSSのフィルタも良く判らなかったり。

「CSS Will Change Module Level 1」というのを変形の項目の最初に入れましたが、この位置で本当にいいのかどうか。

ベンダープレフィックス

以下のサイトを参考にしました。

Vendor-prefixed CSS Property OverviewはMDNのCSSリファレンスのページで紹介されているサイトです。更新の日付がありませんが、調べたときにはまだ公開されていなかったFirefox34の情報が反映されていた事もあり、かなり新しい内容だと思います。

Firefoxの場合、Firefox 開発者向けリリースノートにあるFirefox 37までを参考にしています(37は英語版で確認)。

デフォルトの設定からの削除

デフォルトの設定にあった以下のプロパティを削除しています。

これらはCSS3 フォントモジュール草案2002年08月02日にありますが、次の2009年06月18日分で無くなっています。

また、2015年1月12日現在で最新のCSS Fonts Module Level 3(勧告候補:2013年10月08日)にもありませんでした。

もしかして違う仕様書に移動でもしたんでしょうか。その辺少し探したけど判りませんでした。

ダウンロード

CSScombのユーザ設定ファイルです。テキスト形式です。

字下げ空白版(上で書いているのと同じ)
csscomb_usespace_20150309.txt
字下げタブ版
csscomb_use_20150309.txt
字下げタブ版:プロパティノーカット版
csscomb_basic_20150309.txt