記事本文の読み下す文章に1行45字の上限を置く (#3228) - #3237
Draft
ma91n wants to merge 1 commit into
Draft
Conversation
本文列は 1200px 以上で 52.5字(819px)・61.2字(954px)になり、 和文の読み下しの帯(35〜45字)を超えていた。列(.container / col-md-9)は 他ページと同じ枠なので動かさず、.article-entry 直下の文章の箱 (p / ul / ol / dl / blockquote / h1〜h6 / hr / details / note)にだけ max-width を置く。値は text-body × 45 字で _variables.styl が持つ。 コード・表・図・埋め込みは上限の外で列の幅のまま。狭めると横スクロールの 要るコードブロックが 8.6% → 24.1% に増え、画像の 76% が縮むだけになる。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3228
やったこと
記事本文の読み下す文章に1行 45 字の上限(
article-measure=text-body × measure-chars= 15.6px × 45 = 702px)を置いた。値は_variables.stylが持ち、ルールは.article-entryの直下の文章の箱(p/ul/ol/dl/blockquote/h1〜h6/hr/details/.note-container)にだけmax-widthを当てる。列(.container/col-md-9)は動かさない(#3222 の「ページの最大幅は種類で変えない」のまま)。コード・表・図・埋め込みは上限の外で、列の幅をそのまま使う。
設計判断を含むので Draft。
集めた材料
(a) 他サービスの本文幅(2026-09 実測、playwright で
getBoundingClientRect/getComputedStyle)3サービスとも本文の幅を画面幅に比例させず、固定の幅を中央に置いている。字数は 41〜49 字の帯。
(b) 段落の字数と行数(
source/_posts/**/*.md全 1,487 本・47,499 段落。全角1・ASCII 0.5 で数えた)段落あたり中央値 62.5 字(平均 77.8・p90 154)。1記事の段落数は中央値 28。
(c) 上限の外に置くもの(コード・表・図)
```).scrollの横スクロールに落ちやすくなるwidth属性あり)この3つは行として読み下す対象ではないので、上限の外に置いた。
.article-entryの直下に来る要素を生成 HTML 全記事で数えると、文章の箱(p 47,332 / h2 8,205 / h3 6,005 / ul 5,109 / h4 1,971 / blockquote 869 / ol 761 / h5 401 / note 226 / details 187 / hr 132 / dl 4)と列幅で置くもの(figure.highlight 6,840 / img 4,614 / .scroll 810 / .code-block 621 / figure 122 / iframe 108 / .mermaid-svg 56)にきれいに割れる。<p>の直下に<img>が来る形は全記事で 1 件だけ。右に残る空き(1200〜1399px で 117px、1400px〜で 252px)はサイドバーとの間隔(44px)に足される。本文の左端は動かない。列を狭めてサイドバーを寄せる形は採らない(他ページと枠を共有している #3222)。
(d) 幅 1400px 以上の読者の割合
未確認。
ga4_pv.json/ga_cache.jsonは path・pv・title だけで、画面幅も deviceCategory も持たない。採った案と捨てた案
採った: (1) 文章の箱に上限幅。 読み下しの帯は「字数」の話なので、幅の側で解く。値は段の値(
text-body)に字数を掛けて導き、px を直接書かない(段を動かせば追従する)。Stylus の15.6px * 45は同じ単位の積なのでunquoteは要らない(コンパイル後はmax-width: 702pxの1行)。捨てた: (2)
text-bodyを幅で可変にする。 954px を 45 字に収めるには 21px が要り、段の台帳(#2971)と「1つの要素のサイズは1箇所」(#1927 / #1928)に触る。さらに本文見出しの em の梯子・コード 13px との比・行間 1.75 の帯がすべて連動して動く。字が大きくなるほど 1画面の情報量も落ちる。捨てた:
.article-entry全体(コード・表・図も含めて)に上限。 Zenn / Qiita はこの形だが、あちらは列そのものが 708px。ここでは列を他ページと共有しているので、列いっぱいの 954px を使えるものまで 702px に狭めることになり、(c) のとおりコードの横スクロールが 3 倍近くに増える。捨てた: 列(
col-md-9)を狭めてサイドバーを寄せる。 記事ページだけ枠が変わり、#3222 の「ページの最大幅は種類で変えない」と衝突する。実測(
/articles/20260804a/。コードと表がある記事)make cssの前後差分は追加した2ルール(本文の上限・スタイルガイドの見本)だけ。css_lint.mjs/font_size_lint.mjs/ スタイルガイドの textlint は通過確認ポイント
/articles/20260804a/を 1440px 以上で開き、段落が 702px で折り返し、コードブロック・表が列いっぱい(954px)まで伸びていること。h2 の罫線は文章の右端で止まる/specials/styleguide/の「幅」の節。表に「文章の1行」の列、本文の下に上限の見本(帯 702px と702px = 15.6px × 45字)が出る。このページの段落自身が上限を受けているので、帯は段落の右端と揃う残した論点
detailsの中のコードは 702px に収まる(箱に従う)。折りたたみの中のコードだけ幅が違う形を避けるなら、detailsを上限の外に出すことになるが、そのときは中の文章が 954px に戻る.career-counseling.article-entry > p)にも上限が効く。1116px の帯で 71 字だった1行が 45 字になる。読み下す文なので意図どおりと判断したupdate-cache.ymlを広げるかは別の話<p>の直下に<img>が来る 1 件は画像が 702px に縮む。:has()で外す手はあるが1件のために選択子を増やさない🤖 Generated with Claude Code