[CSS]HTML以外のXMLでも画像を画像として表示したい
CSS組版アドベントカレンダー2024の6日目の記事です。
題の通り組版としてはあまり関係無いかもしれませんが、Prince XMLやAntenna House CSS FormatterはXML+CSSで組版できるので、まあいいんじゃないでしょうか。
XML + CSSという界隈
XML編集の機能補助というと、一般的には開始タグを書いたら閉じタグを補完してくれたり、属性のユニークネス判定や互い違いタグの警告など、XML整形式(well-formed)に類する判定が思い浮かぶでしょう。実際その辺りはXMLが複雑化する程大切になりますが、汎用のエディタにも付属しているくらいの機能ですから、XMLの専用エディタのValueにはなりません。
商用のXMLエディタには様々に機能がありますが、代表的なものに[1]XMLにCSSを当てた状態でグラフィカルにXML編集ができる機能があります。<?xml-stylesheet?>
はXSLT専用では無いってことです。
私が今適当に書いた独自のXMLには、当然ながら「どう表示されるべきか」というスタイル指定はありません。
<doc>
<title>これがタイトル</title>
<p>aaaa</p>
<fig>
<image href="label.jpg"></image>
</fig>
</doc>
スタイル指定の無い状態でOxygen[2]の作者モードを開いてみるとこんな感じ。
スタイルが無いなりに頑張っていい感じにしようとしてくれています。まあ正直この状態だとテキストモードで普通に全部テキストとして見えていた方が編集し易いです[3]。
ではこれにスタイルをあてるとどうなるのか。
doc {
display: block;
}
title {
display:block;
font-size: 80pt;
font-weight: bold;
text-align: center;;
}
p {
display: block;
margin: 1em 0;
}
p::before {
content: "¶";
color: red;
margin-right: 0.5em;
}
<?xml-stylesheet type="text/css" href="oxy.css"?>
<doc>...</doc>
デーン!
こんな感じでHTMLみたいに要素ごとにスタイルが適用された状態で編集が可能になります。
とまあ、ここで今日の本題です。HTMLには<img>
があり、Webブラウザはユーザやサイト製作者がCSSの適用などしなくてもsrc
属性に指定された画像を表示してくれます。乱暴にはHTMLがそういう風に決まっているからとも言えますし、CSSがそれに合うように決まっているからとも言えます。ではHTML以外では?
<image href="label.jpg"></image>
で、content
プロパティにurl()
で画像を表示可能、という話になります。画像を表示可能な他の方策ではbackground-image
もありますが、画像を画像として扱える方がセマンティクス的にも嬉しいですよね。このcontent: url()
のやり方だと表示画像のサイズ制御などは結構アクロバティックになってしまうので、その辺りの制御が必要な場合は逆にbackground-image
の方が手厚いです。
image {
display: inline;
content: url(attr(href url));
}
終わりに
明日の担当はhidarumaさんです。重めの記事を書き始めることはできるのでしょうか。
参考資料
- Prince XML https://www.princexml.com/
- Antenna House CSS Formatter https://www.antenna.co.jp/AHF/
- Oxygen XML Editor https://www.oxygenxml.com/
Discussion