編集済みを表わす要素である<ins>要素と<del>要素を適切に用いるにはどうしたらよいか、またこれらに適切なスタイルを当てるにはどうしたらよいかを考えて見ました。
<ins>要素と<del>要素はいずれも編集済み箇所を明示する要素として知られております。
この二つの要素にはあるややこしい問題があります。
それは、この二つの要素は、ブロックレヴェル要素にもなれば、インライン要素にもなるという事です。
CSSのスタイル定義ファイルにて<ins>要素及び<del>要素のスタイルを定義する場合、当然ながら、以下のような指針が考えられます。
しかしながら、<ins>要素なり<del>要素なりの直下にインライン要素が入った場合、ブロックレヴェル要素なのかそれともインライン要素なのかを判断して処理を分けると言うCSSでの記述はかなり困難です。
結局、<ins>要素なり<del>要素なりがブロックレヴェル要素なのか、それともインライン要素なのかを的確に見分ける事が出来ない事が問題と言う訳です。
問題は、<ins>要素なり<del>要素なりが、文法上自由過ぎると言うところにあると思われます。
特に、ブロックレヴェル要素として扱う場合に、直下に何を入れても良いと言うのはどうかと思っております。
<ins>要素と<del>要素はあくまでも編集した箇所をマークアップする要素であり、それ以上のブロックレヴェル要素としての意味は無いので、<ins>要素なり<del>要素なりの開始・終了タグを記述していない状態でも文法上問題の無い記述にすべきでしょう。
すなわち、<ins>要素なり<del>要素なりをブロックレヴェル要素として用いる場合は、その直下は全てブロックレヴェル要素とするのが順当でしょう。
例えば、以下のような記述は好ましくありません。
<p>武蔵の国は、現在の埼玉県と東京都に当たります。</p>
<ins>実際には神奈川県の一部も含まれます。</ins>このような記述を心がけるべきでしょう。
<p>武蔵の国は、現在の埼玉県と東京都に当たります。</p>
<ins><p>実際には神奈川県の一部も含まれます。</p></ins><p>武蔵の国は、現在の埼玉県と東京都に当たります。<ins>実際には神奈川県の一部も含まれます。</ins></p>
前者は新たに<p>要素として実際には…含まれます。
というテキストを追加しております。
後者は、元の<p>要素の内容(すなわちインライン要素)に実際には…含まれます。
というテキストを追加したものです。
HTML 4.01仕様書に依れば、以下のように書いてあります。
These two elements are unusual for HTML in that they may serve as either block-level or inline elements (but not both). They may contain one or more words within a paragraph or contain one or more block-level elements such as paragraphs, lists and tables.
該当箇所は、HTML 4.01仕様書・邦訳版には
この2要素は、HTMLの常識に反し、ブロックレベル要素としてもインライン要素としても機能する(同時にはならない)。段落中の1つ以上の語を含むこともできるし、段落やリスト、表など1つ以上のブロックレベル要素を含むこともできる。
とあります。
原文・邦訳とも見た限りでは、これらの記述には「ブロックレヴェル要素として用いる場合には」とか「インライン要素として用いる場合には」と言うような但し書きは全く含まれておりません。
このため、制作者はブロックレヴェル要素として用いる場合、生テキストなどのインライン要素を直下に含めても構わないと解釈しております。
ただ、その様な記述はすべきで無いと考えております。
ISO-HTMLのDTDでは、ブロックレヴェル要素にもインライン要素にもなる一方で、ブロックレヴェル要素を含んではいけない事になっております(詳細はISO/IEC 15445:2000 (ISO-HTML)の書式についてをご覧下さい)。
従って、上記の記述作法はISO-HTMLでは不当になってしまいます。
上記の指針に従ってマークアップすれば、CSSスタイル定義ファイルでのスタイル定義もより容易になります。
具体的には、
とすれば良いからです。
但し、内容セレクタ(セレクタの内容によって判断するセレクタ)とでも言うようなセレクタは存在しないので、記述を工夫する事で解決させます。
具体的には、以下のようにすればよいでしょう。
<p>要素や<h○>要素などのスタイルをここで定義します。
このとき、ここで定義されたブロックレヴェル要素を下位に含んだ<ins>要素なり<del>要素なりは、始めに定義しているスタイルが上書きされてしまっている可能性がある事に注意して下さい。
ブロックレヴェル要素のスタイル定義によって、始めに定義している<ins>要素なり<del>要素なりのスタイル定義が上書きされているので、改めて定義し直します。
具体的には「ins * { … }」などで下位要素のスタイルを上書きします。
実際に、<ins>要素と<del>要素に適切なスタイルを当てる場合のパターンを挙げて見ましょう。
ここでは、当サイトが現在利用しているスタイル、すなわち
というスタイルを適用させます。
/* インライン要素として用いる、<ins>/<del>要素のスタイル。 ※インライン要素扱いの<ins>/<del>要素には、このスタイルが適用される。 */ins {text-decoration: none;font: inherit;line-height: 100%;background: #efe;/* <ins>要素の固有のスタイル。 */}del {text-decoration: line-through;/* <del>要素の固有のスタイル。 */font: inherit;line-height: 100%;}/* <del>要素の下位に<ins>要素が入っている場合、 <ins>要素のスタイル定義で抹消線が消されてしまうので、 改めてこのような入れ子関係になっている場合は抹消線を引くようにする。 */del ins {text-decoration: line-through;}/* ブロックレヴェル要素の基礎スタイル。 ※始めの<ins>/<del>要素でのスタイル定義は、 ここで上書きされる可能性がある。 */address, blockquote,div, dl, fieldset, form, legend,h1, h2, h3, h4, h5, h6, hr,menu, ol, p, pre, ul {color: #000;background: transparent;/* <ins>要素のスタイルが上書きされた。 */font: normal normal 100% monospace;line-height: 160%;text-align: left;text-decoration :none;/* <del>要素のスタイルが上書きされた。 */margin: 1em 1em;padding: 0;text-indent: 0;}li {color: #000;background: transparent;/* <ins>要素のスタイルが上書きされた。 */line-height: 160%;}dt, dd {color: #000;background: transparent;/* <ins>要素のスタイルが上書きされた。 */line-height: 160%;}/* ブロックレヴェル要素としての<ins>/<del>要素のスタイル。 ※一般のブロックレヴェル要素でのスタイル定義で上書きされた可能性がある <ins>/<del>固有のスタイルを再定義。 */ins * {text-decoration: inherit;background: #efe;}del * {text-decoration: line-through;background: transparent;}