はじめに

CSSのプロパティの順番や全体の書き方を統一するため、CSScombというツールを使いました。Visual Studio Code(VSCode)というエディタに拡張機能として組み込みます。

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

以前はSublime Text 3を使った方法を書いていましたが、インストール時にいろいろ面倒なのでVSCodeに変更しました。今のところVSCodeはCSS整形にしか使っていません。その後、構文チェックを行ってくれる「CSSTree validator」「HTMLHint」も入れました。

VSCodeとCSScombは、2020年01月26日にダウンロード、インストールしたものを使っています。

VSCodeは、バージョン1.41.1、Windows64bit zip版。

CSScombは、バージョン5.3.0。

VSCode

メインで使うエディタはあるし、あまり使うことはなさそうなので、ポータブル版(zip版)を使っています。インストーラ版とは手順で異なる箇所があると思います。

手順

  1. 公式サイトからアーカイブファイルをダウンロード。
  2. ファイルを解凍し、できたフォルダ内に「data」フォルダを作成。
  3. 適当なフォルダにコピー。
  4. 拡張機能の日本語パックをインストール。再起動して日本語化。
  5. 設定変更。再起動して有効化。
  6. 拡張機能のCSScombをインストール。設定を変更して有効化する。
  7. csscomb.jsonを設定変更済みのファイルに変更。

インストール関係の手順は、VS Codeを持ち運ぶには(ポータブルモード):Visual Studio Code TIPS - @ITを参考にしました。

インストール

Download Visual Studio CodeからWindowsのzip版、64bitをダウンロード。

解凍すると長い名前のフォルダができるのでわかりやすく変更。私は「VSCode」にしてます。

フォルダの中に「data」という名のフォルダを作成。ユーザーデータや拡張機能がこのフォルダにコピーされていくようです。

ファイラ(As/R)での表示

その後、VSCodeフォルダをプログラム関連のフォルダに移動。

日本語化

フォルダ内のCode.exeを実行。英語版で起動します。

右下にメッセージが出ます。Help improve VS Code by allowing Microsoft to collect usage data.~とあり、マイクロソフトが利用状態を収拾する件について書いているようですが、とりあえずそのまま進みます。

左端の四角いアイコン(拡張機能)をクリック。上に検索窓が開くので「japan」と入れると「Japanese Language Pack for Visual Studio Code」が出てくるのでそれを選択、Installボタンを押してインストール。

画像は日本語化済みのもの

右下にWould you like to restart VS Code to activate the language pack that was just installed?(インストールされたばかりの言語パックを有効にするためにVSコードを再起動しますか?)と出るのでYes。再起動で日本語化されます。1月26日のインストール時にはこれを忘れてエディタを終了させ再度起動させましたが、うまくいってるようでした。

画面右側に「使用法」とあってlocale.json 内で "locale": "ja" を設定とありますが、特に何もせず日本語化されているようです。使い込んでいるわけではないのでなにか見落としているかもしれませんが。

設定変更

[ファイル]→[基本設定]→[設定]から設定変更。フォントファミリなどを変更していきます。

[ファイル]→[基本設定]→[設定]で右側に設定項目が表示

「Tabキーを押すとスペースが挿入されます」はチェックを外しています。アプリケーションの更新とテレメトリはチェックを外したりnoneを選択しています。

(VSCodeフォルダ)\data\user-data\User\settings.jsonが、デフォルトから変更した項目のファイルっぽいです。

この後とりあえずVSCodeを再起動。

CSScombインストール

拡張機能の検索で「CSScomb」を検索し、インストール。2020年01月25日ではバージョン違いで2つ表示されましたが、バージョンが進んでいる「5.3.0」をインストールしました。

(VSCodeフォルダ)\data\user-data\User\settings.jsonを開き、最後の項目の行末にカンマを打ち、改行。文字列"csscomb.preset": "csscomb"をコピー&ペーストしたあと一旦終了。

最後の項目の行末にカンマを打ち、改行。次に「"csscomb.preset": "csscomb"」を書く。

CSScomb設定変更

(VSCodeフォルダ)\data\extensions\mrmlnc.vscode-csscomb-5.3.0\node_modules\csscomb\config\csscomb.jsonが設定ファイル。これの拡張子に「.old」でも追加して無効化する。

用意しておいたcsscomb.jsonをコピー&ペースト。下記のCSScomb設定で書いているもの。

CSScomb使用

使用手順

  1. ドラッグ&ドロップなどでCSSファイルをエディタで表示させる。
  2. Ctrl+Aで全体を選択。
  3. F1(全コマンド表示)を押し、[CSScomb: Format Styles]を選択。
  4. 整形が行われるので、[ファイル]→[保存]で保存。

F1キーでコマンドが大量に表示され、CSScombが見つからないときは、すぐ上の検索窓に「csscomb」等と入れて検索する。次からは先頭で出てくるはず。

一度使えば次からは先頭で表示される

エラー

css変数を使うとき、変数の宣言で連続したハイフン2個を書いた箇所でエラーが出ました。

:root	{
	--border-a: #96663644;
	}

変数の宣言箇所(もしくは全体)をコメントアウトしてからCSScombを使います。

:root	{
	/* --border-a: #96663644;*/
	}

変数の使用箇所はそのままで大丈夫。

nav#nav-inside ol	{
	border-color: var(--border-a);
	}

CSScomb設定変更

カスタマイズ

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

プロパティの順番も、デフォルトのは古い感じなので変更しています。

カスタマイズ参考

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

以前はSublime Text 3のプラグインCSScombのカスタマイズSoraxism)の「プロパティのソート順の変更」も参考にしたのですが、2020年01月26日現在アクセスできませんでした。

プロパティの順番

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

2019年5月の修正では、CSS 2.2仕様書日本語訳を参考にしました。

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

確認には以下のサイトを利用しました。

順序は以下の通りです。

  1. 視覚整形モデル 9章
  2.  ←CSS Writing Modes Module Level 3
  3. 視覚整形モデル詳細 10章
  4. 視覚効果 11章
  5.  ←CSS Overflow Module Level 3
  6.  ←CSS Masking Module Level 1
  7.  ←フレックスボックス
  8.  ←段組レイアウト
  9.  ←グリッドレイアウト
  10. ボックスモデル 8章
  11.  ←CSS Backgrounds and Borders Module Level 3(box-shadow)
  12.  ←CSS Images Module Level 3
  13. 色と背景 14章
  14.  ←CSS Backgrounds and Borders Module Level 3
  15.  ←フィルタ
  16. フォント 15章
  17.  ←CSS Fonts Module Level 3
  18.  ←CSS Fonts Module Level 4(font-language-override)
  19. 16章 テキスト
  20.  ←CSS Text Decoration Module Level 3
  21.  ←CSS Text Module Level 3
  22.  ←ルビレイアウト
  23.  ←インラインコンテンツ流し込み形状
  24. 生成内容 12章
  25. テーブル 17章
  26.  ←CSS Will Change Module Level 1
  27.  ←変形
  28.  ←CSS Transforms Module Level 2
  29.  ←アニメーション
  30.  ←CSS Transitions
  31. ユーザーインタフェース 18章
  32.  ←CSS Basic User Interface Module Level 3
  33.  ←CSSOM View Module
  34.  ←CSS Basic User Interface Module Level 4
  35.  ←Interactivity – SVG 1.1 (Second Edition)
  36. ページメディア 13章
  37.  ←CSS Fragmentation Module Level 3

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

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

ユーザ設定ファイル

CSScombのユーザ設定ファイルです。2019年5月に作り直したもので、2020年1月には非推奨になっていることに気づいた2個のプロパティを削除しています。

訳はいくつかのブログに載っていたもの+Google翻訳+公式サイトのbefore、afterを見ながら適当に書いてます。

{
	"exclude": [
		".git/**",
		"node_modules/**",
		"bower_components/**"
	],
	// 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 after `{`.
	"space-after-opening-brace": "\n",//「{」の後(改行)

	// Set space after selector delimiter.
	"space-after-selector-delimiter": "\n",// セレクタ区切り文字の後(改行)

	// 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": "1",//「{」の前(空白1文字)

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

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

	// 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",
				"writing-mode",
				"text-orientation",
				"text-combine-upright",
				//------------------------------------ 視覚整形モデル詳細
				"width",
				"min-width",
				"max-width",
				"height",
				"min-height",
				"max-height",
				"line-height",
				"vertical-align",
				"zoom",
				"-ms-min-zoom",
				"min-zoom",
				"-ms-max-zoom",
				"max-zoom",
				"-ms-user-zoom",
				"user-zoom",
				//------------------------------------ 視覚効果
				"overflow",
				"overflow-x",
				"overflow-y",
				"overflow-inline",
				"overflow-block",
				"text-overflow",
				"block-ellipsis",
				"-webkit-line-clamp",
				"line-clamp",
				"max-lines",
				"continue",
				"visibility",
				"clip-path",
				//------------------------------------ マスク
				"mask-image",
				"mask-mode",
				"-webkit-mask-repeat",
				"mask-repeat",
				"-webkit-mask-position",
				"mask-position",
				"-webkit-mask-clip",
				"mask-clip",
				"-webkit-mask-origin",
				"mask-origin",
				"mask-size",
				"mask-composite",
				"mask",
				"mask-border-source",
				"mask-border-mode",
				"mask-border-slice",
				"mask-border-width",
				"mask-border-outset",
				"mask-border-repeat",
				"mask-border",
				//------------------------------------ フレックスボックス
				"flex-direction",
				"flex-wrap",
				"flex-flow",
				"order",
				"flex",
				"flex-grow",
				"flex-shrink",
				"flex-basis",
				"justify-content",
				"align-items",
				"align-self",
				"align-content",
				//------------------------------------ 段組レイアウト
				"columns",
				"column-width",
				"column-count",
				"column-gap",
				"column-rule",
				"column-rule-color",
				"column-rule-style",
				"column-rule-width",
				"column-span",
				"column-fill",
				//------------------------------------ グリッド
				"grid",
				"grid-template",
				"grid-template-rows",
				"grid-template-columns",
				"grid-template-areas",
				"grid-auto-rows",
				"grid-auto-columns",
				"grid-auto-flow",
				"grid-area",
				"grid-column",
				"grid-row",
				"grid-row-start",
				"grid-column-start",
				"grid-row-end",
				"grid-column-end",
				"gap",
				"row-gap",
				"column-gap",
				"justify-self",
				"justify-items",
				//------------------------------------ ボックスモデル
				"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",
				//------------------------------------ 画像値と置換内容
				"object-fit",
				"object-position",
				"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",
				//------------------------------------ フォント
				"font",
				"font-family",
				"font-style",
				"font-variant",
				"font-weight",
				"font-size",
				"font-stretch",
				"font-size-adjust",
				"font-synthesis",
				"src",
				"unicode-range",
				"font-kerning",
				"font-variant-ligatures",
				"font-variant-position",
				"font-variant-caps",
				"font-variant-numeric",
				"font-variant-alternates",
				"font-variant-east-asian",
				"font-feature-settings",
				"font-language-override",
				//------------------------------------ テキスト
				"text-indent",
				"text-align",
				"text-decoration",
				"text-decoration-line",
				"text-decoration-style",
				"text-decoration-color",
				"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",
				"text-emphasis-position",
				"text-shadow",
				"-moz-tab-size",
				"tab-size",
				"word-break",
				"line-break",
				"hyphens",
				"overflow-wrap",
				"word-wrap",
				"text-align-last",
				"text-justify",
				"hanging-punctuation",
				//------------------------------------ ルビレイアウト
				"ruby-position",
				"ruby-merge",
				"ruby-align",
				//------------------------------------ テキスト流し込み形状
				"shape-outside",
				"shape-image-threshold",
				"shape-margin",
				//------------------------------------ 生成内容
				"content",
				"quotes",
				"counter-reset",
				"counter-increment",
				"list-style",
				"list-style-type",
				"list-style-image",
				"list-style-position",
				//------------------------------------ テーブル
				"caption-side",
				"table-layout",
				"border-collapse",
				"border-spacing",
				"empty-cells",
				//------------------------------------ 変形
				"will-change",
				"translate",
				"rotate",
				"scale",
				"transform",
				"-webkit-transform-origin",
				"transform-origin",
				"transform-box",
				"-webkit-transform-style",
				"transform-style",
				"perspective",
				"-webkit-perspective-origin",
				"perspective-origin",
				"backface-visibility",
				//------------------------------------ アニメーション
				"animation",
				"animation-name",
				"animation-duration",
				"animation-timing-function",
				"animation-iteration-count",
				"animation-direction",
				"animation-play-state",
				"animation-delay",
				"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",
				"box-sizing",
				"resize",
				"caret-color",
				"scroll-behavior",
				"-ms-user-select",
				"-moz-user-select",
				"user-select",
				"pointer-events",
				//------------------------------------ ページメディア
				"break-before",
				"break-after",
				"break-inside",
				"page-break-before",
				"page-break-after",
				"page-break-inside",
				"orphans",
				"widows",
				"-webkit-box-decoration-break",
				"box-decoration-break"
		]
	]
}

セレクタ区切り文字の後は改行するようにしてます。複数のセレクタがある場合、セレクタの名称が長ければ改行、短ければ横に並べたいのですが、そんな器用な設定はなさそうなので、改行することにしました。

結果

なんとかなったようです

ダウンロード

CSScombのユーザ設定ファイル:テキスト形式
csscomb_20200126.txt

使う場合はファイル名と拡張子を「csscomb.json」に変更。コメントは省いています。

文書更新履歴

2020年01月30日
画像1枚追加。ユーザ設定ファイルのアンカー要素でdownload属性削除。
2020年01月28日
全面的に書き直し。
2015年03月09日
-moz-box-sizingを追加。ダウンロード用のファイルも変更。
2015年01月15日
このページを公開。