* p 要素型 (HTML, XHTML 1) [11] [DFN[[CODE(HTMLe)[p]] 要素]]は、[DFN[[[段落]]]]を表します。 [16] 仕様書: - [[HTML 2.0]]: [[RFC 1866]] 5.5.1. Paragraph: P - [[HTML 4]]: -- -- -- Visual rendering of paragraphs (参考) [5] 段落とは何か。 HTML 4 [SRC[HTML 4 9.3]] 曰く: > Authors traditionally divide their thoughts and arguments into sequences of paragraphs. The organization of information into paragraphs is not affected by how the paragraphs are presented: paragraphs that are double-justified contain the same thoughts as those that are left-justified. > [[著者]]は、伝統的に、自身の意思や主張を段落の連続体に分割します。 段落としての情報の組織化は、その段落がどう表現されるかには影響されません。 両端揃えの段落は、左揃えの段落と同じ意見を含んでいます。 [12] :[[開始タグ]]:必須 :[[終了タグ]] (HTML 2, HTML 4):省略可能 :終了タグ (XHTML 1):必須 :[[内容模型]]:[CODE(SGML)[(%[[inline]];)*]] :出現できる文脈:[CODE(SGML)[%[[block]];]] な文脈 :[[属性]]: ,[CODE(HTMLe)[[[align]]]] , , ,揃え ,[HTML4] 非推奨 ,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]] ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]] ,[CODE(HTMLa)@en[[[csclick]]]] , , , ,非標準 ,[CODE(HTMLa)@en[[[dynamicanimation]]]] , , , ,非標準 ,[[FrontPage]] ,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr ,[CODE(HTMLa)@en[[[mce_keep]]]] ,[CODE(HTML example)@en[true]] , , ,非標準 ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1] ,[CODE(HTMLa)@em[[[mode]]]] , , ,[[折返し]] ,非標準 ,[Vodafone] ,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,[HTML4] %coreattr ,[CODE(HTMLa)@en[[[titleid]]]] ,[CODE(XML)@en[[[IDREF]]]] ,(なし) , ,非標準 ,[[HTMLayout]] ,[CODE(HTMLa)@en[[[wrap]]]] , , , ,非標準 [[#comment]] ** 内容模型 [4] [CODE(HTMLe)[p]] 要素は、 (歴史的理由により、) [[行内要素]]しか[[内容]]に含めることができません。 [CODE(HTMLe)[p]] 要素型自体を含めることも、もちろんできません。 [[#comment]] *** 空の p 要素 [13] HTML 4 は、 - [[著者]]が空の [CODE(HTMLe)[p]] 要素を使うことは非推奨 (discourage) - [[UA]] は空の [CODE(HTMLe)[p]] 要素は無視するべき (should) としています。 [[#comment]] ** レンダリング [14] [[HTML 4]] は、[CITE[Visual rendering of paragraphs]] ([[参考]]) で、 段落のレンダリングについて言及しています。 (HTML 4 のこの章の説明自体は特に [CODE(HTMLe)[p]] 要素に限定したものではなく、 一般に文内容についての考察でしょう。) 概略: 次に述べるのは、現在の幾つかの[[視覚UA]] の動作についてである。 - [[スタイルシート]]を使えば、段落の[[書式付け]]をよりよく制御できる。 [SRC[RFC 1866 5.5.1., HTML 4]] - 段落は通常 ([CODE(XSL)[[[lr]]]] では) 左を揃え、 右はぎざぎざにレンダリングされる。 [SRC[HTML 4]] - 段落は伝統的に前後に空白(行)を置いてレンダリングされる。 [SRC[RFC 1866 5.5.1., HTML 4]] -- 半行から1行くらい [SRC[RFC 1866 5.5.1.]]。 -- これとは異なり、小説なんかだと段落間は特に空けずに、 段落の最初の行を[[字下げ]]する。 [SRC[HTML 4]] - 典型レンダリングでは最初の行を字下げすることもある [SRC[RFC 1866 5.5.1.]]。 - 1993年の [[NCSA Mosaic]] 以来の慣習で、普通は両[[余白]]を揃えない。 ちゃんとした[[ハイフン付け]]をしないとこれをするのは難しいのだ。 [SRC[HTML 4]] - スタイルシートとか、部分画素 (subpixel) 配置によって[[アンチエイリアス]]したフォントとか、 以前よりも[[著者]]の選択肢は豊かになっている。 [SRC[HTML 4]] - スタイルシートで文字の大きさ、フォントの様式、余白、段落前後の間隔、 最初の行の字下げ、端揃えその他の詳細な制御ができる。 [SRC[RFC 1866 5.5.1., HTML 4]] -- UA の[[既定スタイル]]は前述のようになっている。 [SRC[HTML 4]] -- やろうと思えば段落境界が分からないような感じにもできるが、 混乱の元であるからにして[RUBYB[非推奨] [discourage]]。 [SRC[HTML 4]] - 視覚 UA は余白に合わせて文を折り返す。 [SRC[HTML 4]] -- 折り返しの算法は[[用字系]]に依存する。 -- [[西洋用字系]]では、文は[[空白]]をもってのみ折り返す[RUBYB[べき] [should]]。 --- 初期の UA は誤って何かの要素の[[開始タグ]]直後や[[終了タグ]]直前でも折り返していたから、 終了タグの直後に[[読点]]があるような場合に変ちくりんなことになっていた。 [[#comment]] ** 実装 [1] [[mosaic]] や [[NN]] では、[CODE(HTMLe)[p]] [[タグ]]を連続させても1つ分の空行しかできませんでした。 [2] >>1 は現代的に言えば、[[既定スタイル]]に [SAMP(CSS)[[CODE(HTMLe)[p]] + [CODE(HTMLe)[p]] {[[margin-top]]: 0}]] とかいろいろ書いてあったとでも思えばいいでしょう。 [3] >>1-2 は別に HTML の規定ではなく、同時代のほかの [[WWWブラウザ]], たとえば [[Arena]] は [CODE(HTMLe)[p]] の数だけ空行を作りました。 [[#comment]] ** 歴史 *** お尻

から段落要素へ [15] ''Toward Closure on HTML'' (1994年4月) で [[Dan Connolly]] は、 [CODE(HTMLe)[p]] 要素についてこういっています。 - なぜ [[TeX]] のように空行で段落区切りにせず、 [CODE(HTML)[

]] と書かないといけないのか? -- 一つ、もう遅すぎる。 -- 二つ、みんながそれを望むのではない。 たとえば Dan はリストの途中なんかで気楽に空行を入れたいのだ。 -- 三つ、[[短縮参照]]を使うことにしたら [CODE(SGML)[[[SHORTREF]]]] 有効だから [SAMP[]] を置くように変えるだけ。 -- [CODE(HTML)[

]] は [CODE(SGML)[[[OMITTAG]]]] を使えば省略できる。 -- そうすれば DTD もより綺麗になるし、もっと意味を成すし。 [24] [CITE[EMail Msg <9308260107.AA23088@stat1.cc.ukans.edu>]] ([TIME[2007-07-01 04:44:10 +09:00]] 版) ([[名無しさん]]) [[#comment]] *** メモ [23] [CITE[Toward Closure on HTML]] ([CODE[1994-04-07 09:56:59 +09:00]] 版) ([[名無しさん]]) [[#comment]] ** 不思議解釈 [18] '''[CODE(HTMLe)@en[br]]は1改行、[CODE(HTMLe)@en[p]]は2改行?''' 特定の実装の挙動を根拠に、 [CODE(HTMLe)@en[[[br]]]]は[[改行]]1つ分、 [CODE(HTMLe)@en[[[p]]]]は[[改行]]2つ分だとする誤った解釈が古今東西広く流布されています。 [19] '''[CODE(HTMLe)@en[p]]は段落ではない?''' [[HTML 4]]で[CODE(HTMLe)@en[[[p]]]][[要素]]の[[子供]]として[CODE(HTMLe)@en[[[ul]]]][[要素]]等を入れられない問題がよく取り上げられていますが、 それを[[日本語]]と[[英語]]の文法的・文章的構造の違いに拠るものだとする主張が後を絶ちません。 果てには[[日本語]]の[[段落]]と[[英語]]の[[パラグラフ]]はまったく別概念であり、[[段落]]を[CODE(HTMLe)@en[[[p]]]]で表せないという珍説まで発表されています ([[パラグラフ非段落説]])。しかし、 [[日本語]]と[[英語]]における違いについて ([[HTML 4]]の規定以外の) 根拠を挙げた主張は寡聞にして見たことがありません。 [[HTML]]が[[フラットでリニアな構造]]なのは他書式との互換性のための歴史的制約に過ぎず [WEAK[([[TimBL]]自身の発言他、軽く調べるだけですぐわかること。)]]、 この制約への不満は英語圏からも古くからあるもので、 [[HTML 5]]や[[XHTML 2]]では撤廃されています。 [20] '''[CODE(HTMLe)@en[object]] hack''' >>19 で取り上げられている制約を回避するための方法が幾つも検討されており、 その候補の一つが[[[CODE(HTMLe)@en[object]] hack]]で、 歴史的に何度も[Q[再発見]]されています。 詳しくは[[[CODE(HTMLe)@en[object]] hack]]の項を参照してください。 [[#comment]] ** 例 [17] 段落の例 [SRC[RFC 1866 5.5.1.]] [PRE(HTML)[

This Heading Precedes the Paragraph

This is the text of the first paragraph.

This is the text of the second paragraph. Although you do not need to start paragraphs on new lines, maintaining this convention facilitates document maintenance.

This is the text of a third paragraph.

]PRE] [[#comment]] ** メモ [21] [[HTML 4]]: には > The [CODE(HTMLe)@en[P]] element represents a paragraph. とは書いてあるけど、[[段落]]は [CODE(HTMLe)@en[[[p]]]] で表される/表されなければならないとは書いてない。 ;; もっとも、こんなことも書いてあるから[[段落]]は [CODE(HTMLe)@en[[[p]]]] しかないと解釈できなくもない。 > The HTML markup for defining a paragraph is straightforward: the [CODE(HTMLe)@en[P]] element defines a paragraph. ;; [[HTML 5]] では [CODE(HTMLe)@en[[[p]]]] 以外にも[[段落]]を表す[[要素]]があるし、 いわゆる[[段落]]より広い範囲のものを [CODE(HTMLe)@en[[[p]]]] で表すことになっている。 ([[名無しさん]]) [22] [[HTML 4]]: には > The [CODE(HTMLe)@en[P]] element represents a paragraph. とは書いてあるけど、[[段落]]は [CODE(HTMLe)@en[[[p]]]] で表される/表されなければならないとは書いてない。 ;; もっとも、こんなことも書いてあるから[[段落]]は [CODE(HTMLe)@en[[[p]]]] しかないと解釈できなくもない。 > The HTML markup for defining a paragraph is straightforward: the [CODE(HTMLe)@en[P]] element defines a paragraph. ;; [[HTML 5]] では [CODE(HTMLe)@en[[[p]]]] 以外にも[[段落]]を表す[[要素]]があるし、 いわゆる[[段落]]より広い範囲のものを [CODE(HTMLe)@en[[[p]]]] で表すことになっている。 ([[名無しさん]]) [[#comment]] * メモ