|
1 | 1 | # 東の星 ~Water.css~ |
| 2 | + |
| 3 | +リポジトリ:[github.com/kognise/water.css](https://github.com/kognise/water.css) |
| 4 | + |
| 5 | +東ゆうが「ワラーシーエスエス」と読みそうなWater.cssは、簡単なデモページやシンプルな内容のWebサイトを作るときに、良い見た目にするためのライブラリと説明されています。 |
| 6 | + |
| 7 | +## 特徴 |
| 8 | + |
| 9 | +Water.cssのREADMEには下記の特徴があると書かれています。 |
| 10 | + |
| 11 | +- レスポンシブである |
| 12 | +- テーマを変えられる |
| 13 | +- 古いKindleブラウザーでも動作するほどのブラウザーサポート |
| 14 | +- 小さなサイズ |
| 15 | +- 美しい |
| 16 | +- クラスレス |
| 17 | + |
| 18 | +今回紹介するライブラリとの比較では、下記の特徴があります。 |
| 19 | + |
| 20 | +- `:root` 擬似クラスに定義されている変数を使ってスタイルのカスタマイズができる |
| 21 | +- `blockquote` 要素の `font-style` 値に `italic` を定義している |
| 22 | +- `input` 要素の `display` 値に `block` を定義することで、フォーム要素の縦並び表示を実現している |
| 23 | +- 印刷向けのスタイル定義がある |
| 24 | +- もっとも多くのルールセット・セレクター・スタイル宣言がされている |
| 25 | + |
| 26 | +それぞれの特徴について詳しく見ていきます。 |
| 27 | + |
| 28 | +### `:root` 擬似クラスに定義されている変数を使ってスタイルのカスタマイズができる |
| 29 | + |
| 30 | +Almond.cssやnew.cssと同じく `:root` 擬似クラスに変数が定義されています。変数の値を自分の書いたCSS内で上書きすることで、見た目を変えられます。 |
| 31 | + |
| 32 | +[v2.1.1時点のWater.cssのソースコード](https://github.com/kognise/water.css/blob/2.1.1/src/variables-light.css)から引用してきたコードで示すと、下記の変数が定義されています。 |
| 33 | + |
| 34 | +```css |
| 35 | +:root { |
| 36 | + --background-body: #fff; |
| 37 | + --background: #efefef; |
| 38 | + --background-alt: #f7f7f7; |
| 39 | + --selection: #9e9e9e; |
| 40 | + --text-main: #363636; |
| 41 | + --text-bright: #000; |
| 42 | + --text-muted: #70777f; |
| 43 | + --links: #0076d1; |
| 44 | + --focus: #0096bfab; |
| 45 | + --border: #dbdbdb; |
| 46 | + --code: #000; |
| 47 | + --animation-duration: 0.1s; |
| 48 | + --button-base: #d0cfcf; |
| 49 | + --button-hover: #9b9b9b; |
| 50 | + --scrollbar-thumb: color-mod(var(--button-hover) lightness(+6%)); |
| 51 | + --scrollbar-thumb-hover: var(--button-hover); |
| 52 | + --form-placeholder: #949494; |
| 53 | + --form-text: #1d1d1d; |
| 54 | + --variable: #39a33c; |
| 55 | + --highlight: #ff0; |
| 56 | + --select-arrow: svg-load('./assets/select-arrow.svg', fill: #161f27); |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +変数の詳細は、[リポジトリのREADME](https://github.com/kognise/water.css?tab=readme-ov-file#theming)の「Theming」内にまとまっています。 |
| 61 | + |
| 62 | +### `blockquote` 要素の `font-style` 値に `italic` を定義している |
| 63 | + |
| 64 | +`blockquote` 要素内の文字を斜体で表示するようにした上で、`border` も左側に表示されていて、一目で引用と分かる見た目になっています。 |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | +### `input` 要素の `display` 値に `block` を定義することで、フォーム要素の縦並び表示を実現している |
| 69 | + |
| 70 | +sakuraでもフォームが縦並びになるよう `label` 要素に対して `display: block;` が適用されていました。ただ、この方法は `label` 要素内に各要素を入れ子にすることを強制するものでした。せっかく `label` 要素と `input` 要素は入れ子にしなくても良い仕様になっているので、それ、ちゃんと尊重してほしかったなという感じでした。 |
| 71 | + |
| 72 | +Water.cssは仕様を尊重しているのか、`input` 要素に対して `display: block;` を適用することでフォーム要素を縦に並べた表示を実現しています。 |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | +一方で `type="checkbox"` と `type="radio"` が `input` 要素に対して定義されている場合は、`display: initial;` を適用しているため、横並びに表示したいフォーム関連の要素はちゃんと横並びに表示されます。 |
| 77 | + |
| 78 | +### 印刷向けのスタイル定義がある |
| 79 | + |
| 80 | +唯一、印刷時に適用されるスタイル定義があります。適用されるスタイルを挙げると下記の通りになります。 |
| 81 | + |
| 82 | +- 背景色を変更している要素に対して `background-color: #ffffff;` を適用 |
| 83 | +- 前景色を変更している要素に対して `color: #000000;` を適用 |
| 84 | +- `a` 要素に対して `color: #0000ff;` を適用し、下線を付けるように変更 |
| 85 | + |
| 86 | +### もっとも多くのルールセット・セレクター・スタイル宣言がされている |
| 87 | + |
| 88 | +今回紹介しているクラスレスCSS(sakura、Almond.css、Water.css、new.css)の中ではWater.cssがもっともルールセット・セレクター・スタイル宣言の数が多いです。 |
| 89 | + |
| 90 | +[CSS Stats](https://cssstats.com/)というWeb上でCSSの内容を解析できるツールを使って、Water.cssで定義されているルールセット・セレクター・スタイル宣言の数を出してみたのが下記の画像です。 |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | +78個のプロパティ・195個のルール・262個のセレクター・578個のスタイル定義が存在していることが分かります。 |
| 95 | + |
| 96 | +対象的にもっとも少ないsakuraをCSS Statsで解析した結果が下記の画像です。 |
| 97 | + |
| 98 | + |
| 99 | + |
| 100 | +39個のプロパティ・37個のルール・70個のセレクター・105個のスタイル定義しか存在していないことが分かります。 |
| 101 | + |
| 102 | +## 気になる点 |
| 103 | + |
| 104 | +### `input` 要素に特定の属性を定義したときに、`input` 要素と `label` 要素を横並びにした場合、チェックボックスの表示が上にずれる |
| 105 | + |
| 106 | +他のライブラリと比較した際に、`input` 要素の `type` 属性に `checkbox` または `radio` が定義されていると、`label` 要素を並べたときにチェックボックスの表示が上にずれることです。 |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | +これに関しては `input` 要素と `label` 要素の両方に `vertical-align: text-top;` を定義すれば、横並びで表示したときに表示位置が揃います。 |
| 111 | + |
| 112 | + |
| 113 | + |
| 114 | +### `body` 要素の `font-family` に `system-ui` が定義されている |
| 115 | + |
| 116 | +`font-family` の値にさまざまなフォントが定義されています。ただ一番先頭が `system-ui` のため `Yu Gothic UI` が適用される環境(主にWindows)もあります。 |
| 117 | + |
| 118 | +この `Yu Gothic UI` が曲者で、Chrome系ブラウザーでかぎ括弧を連続して表示した場合(たとえば「あああ」「いいい」など)に、かぎ括弧同士が重なって表示されます。 |
| 119 | + |
| 120 | +[「Yu Gothic UI」フォントの鍵括弧、繋げるとブラウザ表示で重なる問題を調べてみた - 俵のメモ帳](https://tawara-memo.hatenablog.com/entry/2024/10/12/174432)という記事によると、割と最近実装されたCSSのプロパティ `text-spacing-trim` のデフォルト値と、Yu Gothic UI内部の設定の組み合わせによって引き起こされている問題のようです。 |
| 121 | + |
| 122 | +游ゴシック自体、Windowsでは `font-weight: normal;` の状態で使うと文字の線の太さが細くて見づらかったり、OSレベルで標準インストールされているWindows以外ではフィンガープリントの観点で使えなくなる可能性があったり、クセがあるフォントですが、上手くスタイルを適用すればメイリオと比較してスッキリした見た目になるので、嫌なやつかもしれないけど、そういうところも、そうじゃないところもあるよ、という感じです。 |
| 123 | + |
| 124 | +### 更新されていない |
| 125 | + |
| 126 | +また重要な点として、2021年8月頃から更新が途絶えていることが挙げられます。 |
| 127 | + |
| 128 | +[This repository is not currently being maintained](https://github.com/kognise/water.css/issues/351)というissueが挙がっているように、元々の作者がリポジトリをメンテナンスしておらず、IssueやPull Requestに対して何も行動しない状態が続いています。 |
| 129 | + |
| 130 | +今回紹介するライブラリではnew.cssも更新が途絶えていますが、new.cssはアナウンスをしないまま更新が途絶えているのに比べて、Water.cssは作者ではないとはいえPull Requestのマージ権限を持ったメンテナーがアナウンスをしているため、ある程度の公式感を伴ったアナウンスがされていると言えます。 |
| 131 | + |
| 132 | +とはいえ、更新が途絶えていることには変わりないため、将来的にForkして使う可能性も検討したほうが良いでしょう。 |
0 commit comments