1. 4.8 埋め込みコンテンツ
      1. 4.8.1 picture要素
      2. 4.8.2 source要素
      3. 4.8.3 img要素

4.8 埋め込みコンテンツ

4.8.1 picture要素

Support: pictureChrome for Android 59+Chrome 38+UC Browser for Android 11.4+iOS Safari 9.3+Firefox 38+IE NoneSamsung Internet 4+Opera Mini NoneSafari 9.1+Edge 13+Android Browser 56+Opera 25+

Source: caniuse.com

カテゴリー
フローコンテンツ
フレージングコンテンツ
エンベディッドコンテンツ
この要素を使用できるコンテキスト
エンベディッドコンテンツが期待される場所。
コンテンツモデル
1つ以上のsource要素、その後に来る1つのimg要素、任意でスクリプトサポート要素と混合される。
text/htmlにおけるタグ省略
どちらのタグも省略不可。
コンテンツ属性
グローバル属性
DOMインターフェイス
[HTMLConstructor]
interface HTMLPictureElement : HTMLElement {};

picture要素は、スクリーンピクセル密度、ビューポートサイズ、画像フォーマット、およびその他の要素を元にした、著者に宣言的にコントロールを許可するために、または画像が使用するためのリソースに関するユーザーエージェントに対するヒントを与えるために、ソースの含まれたimg要素に複数のソースを提供するコンテナである。この要素は、要素の子を表す

picture要素は、videoおよびaudio要素によく似た異なる何かである。それら要素のすべてがsource要素を含む一方で、source要素のsrc属性は、要素がpicture要素内でネストされる場合に意味を持たず、リソース選択アルゴリズムは異なる。同様に、picture要素自身は何も表示しない。要素は複数のURLから選択する要素を有効にする 要素の含まれるimg要素にコンテキストを単に提供する。

4.8.2 source要素

カテゴリー
なし。
この要素を使用できるコンテキスト
img要素の前の、picture要素の子として。
任意のフローコンテンツまたはtrack要素の前で、メディア要素の子として。
コンテンツモデル
Nothing
text/htmlにおけるタグ省略
終了タグなし。
コンテンツ属性
グローバル属性
src — リソースのアドレス
type — 埋め込みリソースタイプ
srcset — 異なる状況で使用するための画像(たとえば、高解像度ディスプレイ、小さなモニター、など)
sizes — 異なるページレイアウトの画像サイズ
media — 受け入れ可能なメディア
DOMインターフェイス
[HTMLConstructor]
interface HTMLSourceElement : HTMLElement {
  [CEReactions] attribute USVString src;
  [CEReactions] attribute DOMString type;
  [CEReactions] attribute USVString srcset;
  [CEReactions] attribute DOMString sizes;
  [CEReactions] attribute DOMString media;
};

source要素は、著者にimg要素に対する複数の代替ソースセットまたはメディア要素に対する複数の代替メディアリソースの指定を許可する。この要素は、自分自身で何かを表すものではない。

type属性は存在してもよい。存在する場合、値は妥当なMIMEタイプでなければならない。

要件の残りの部分は、親がpicture要素またはメディア要素であるかどうかによって異なる:

source要素の親がpicture要素である

srcset属性は存在しなければならず、かつsrcset属性である。

source要素が選択される場合、srcset属性はソースセット画像ソースに寄与する。

srcset属性が幅記述子を用いる任意の画像候補文字列を持つ場合、sizes属性も存在しなければならず、かつsizes属性である。source要素が選択される場合、sizes属性はソースセットソースサイズに寄与する。

media属性は存在してもよい。存在する場合、値は妥当なメディアクエリーリストでなければならない。値が環境とマッチしない場合、ユーザーエージェントは次のsource要素にスキップする。

The type attribute gives the type of the images in the source set, to allow the user agent to skip to the next source element if it does not support the given type.

type属性が指定されない場合、ユーザーエージェントがフェッチする後で画像フォーマットをサポートしないならば、ユーザーエージェントは異なるsource要素を選択しない。

source要素が次の兄弟source要素または指定されるsrcset属性をもつimg要素を持つ場合、この要素は少なくとも以下の1つを持たなければならない:

src属性は存在してはならない。

source要素の親がメディア要素である

src属性は、メディアリソースURLを与える。値は、潜在的にスペースで囲まれた妥当な空でないURLでなければならない。この属性は存在しなければならない。

要素がvideoaudio要素にすでに挿入されている場合、source要素とその属性を動的に変更しても効果はない。再生している内容を変更するためには、使用可能なリソースの中から選択するcanPlayType()メソッドをおそらく利用して、直接メディア要素src属性を単に使用する。一般に、文書が解析された後に手動でsource要素を操作することは、不必要に複雑なアプローチとなる。

type属性は、この属性をフェッチする前に、このメディアリソースを再生できるかどうかをユーザーエージェントが判断するために、メディアリソースの型を示す。特定のMIMEタイプが定義するcodecsパラメーターは、リソースがエンコードされる方法を正確に指定する必要があるかもしれない。[RFC6381]

次のリストは、type属性でcodecs=MIMEパラメーターを使用する方法の例を示す。

H.264制約ベースラインプロファイルビデオ(メインおよび拡張ビデオ互換性のある)レベル3とMP4コンテナでのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
H.264拡張プロファイルビデオ(ベースライン対応)レベル3とMP4コンテナでのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="avc1.58A01E, mp4a.40.2"'>
H.264メインプロファイルビデオレベル3とMP4コンテナのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'>
H.264 'High'プロフィールビデオ(メイン、ベースライン、または拡張プロファイルと互換性がない)レベル3とMP4コンテナでのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="avc1.64001E, mp4a.40.2"'>
MPEG-4ビジュアルのシンプルプロファイルレベル0ビデオとMP4コンテナのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="mp4v.20.8, mp4a.40.2"'>
MPEG-4アドバンストシンプルプロファイルレベル0ビデオとMP4コンテナのLow-Complexity AACオーディオ
<source src='video.mp4' type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"'>
MPEG-4映像シンプルプロファイルレベル0ビデオおよび3GPPコンテナ内AMRオーディオ
<source src='video.3gp' type='video/3gpp; codecs="mp4v.20.8, samr"'>
TheoraビデオとOggコンテナでのVorbisオーディオ
<source src='video.ogv' type='video/ogg; codecs="theora, vorbis"'>
TheoraビデオとOggコンテナ内のSpeexオーディオ
<source src='video.ogv' type='video/ogg; codecs="theora, speex"'>
OggコンテナでVorbisオーディオ単独
<source src='audio.ogg' type='audio/ogg; codecs=vorbis'>
Oggコンテナ内のSpeexオーディオ単独
<source src='audio.spx' type='audio/ogg; codecs=speex'>
Oggコンテナ内のFLACオーディオ単独
<source src='audio.oga' type='audio/ogg; codecs=flac'>
DiracビデオとOggコンテナでのVorbisオーディオ
<source src='video.ogv' type='video/ogg; codecs="dirac, vorbis"'>

srcsetsizesおよびmedia属性は存在してはならない。

If a source element is inserted as a child of a media element that has no src attribute and whose networkState has the value NETWORK_EMPTY, the user agent must invoke the media element's resource selection algorithm.

The IDL attributes src, type, srcset, sizes and media must reflect the respective content attributes of the same name.

ユーザーエージェントがすべて提供されたメディアリソースをレンダリングすることができるかどうか、著者が確信できない場合、著者は最後のsource要素のフォールバック動作にerrorイベントをリッスンできる:

<script>
 function fallback(video) {
   // replace <video> with its contents
   while (video.hasChildNodes()) {
     if (video.firstChild instanceof HTMLSourceElement)
       video.removeChild(video.firstChild);
     else
       video.parentNode.insertBefore(video.firstChild, video);
   }
   video.parentNode.removeChild(video);
 }
</script>
<video controls autoplay>
 <source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
 <source src='video.ogv' type='video/ogg; codecs="theora, vorbis"'
         onerror="fallback(parentNode)">
 ...
</video>

4.8.3 img要素

Spec bugs: 24055, 26068, 28096

カテゴリー
フローコンテンツ
フレージングコンテンツ
エンベディッドコンテンツ
フォーム関連要素
要素がusemap属性をもつ場合:インタラクティブコンテンツ
パルパブルコンテンツ
この要素を使用できるコンテキスト
エンベディッドコンテンツが期待される場所。
コンテンツモデル
Nothing
text/htmlにおけるタグ省略
終了タグなし。
コンテンツ属性
グローバル属性
alt — 画像が利用不可である場合に使用する置換テキスト
src — リソースのアドレス
srcset — 異なる状況で使用するための画像(たとえば、高解像度ディスプレイ、小さなモニター、など)
sizes — 異なるページレイアウトの画像サイズ
crossorigin — 要素がcrossorigin要求を処理する方法
usemap — 使用するイメージマップの名前
ismap — 画像がサーバー側イメージマップであるかどうか
width — 横の次元
height — 縦の次元
referrerpolicy — 要素によって開始されたフェッチのためのリファラポリシー
DOMインターフェイス
[HTMLConstructor, NamedConstructor=Image(optional unsigned long width, optional unsigned long height)]
interface HTMLImageElement : HTMLElement {
  [CEReactions] attribute DOMString alt;
  [CEReactions] attribute USVString src;
  [CEReactions] attribute USVString srcset;
  [CEReactions] attribute DOMString sizes;
  [CEReactions] attribute DOMString? crossOrigin;
  [CEReactions] attribute DOMString useMap;
  [CEReactions] attribute boolean isMap;
  [CEReactions] attribute unsigned long width;
  [CEReactions] attribute unsigned long height;
  readonly attribute unsigned long naturalWidth;
  readonly attribute unsigned long naturalHeight;
  readonly attribute boolean complete;
  readonly attribute USVString currentSrc;
  [CEReactions] attribute DOMString referrerPolicy;

  Promise<void> decode();
};

img要素は画像を表す。

親がpicture要素である場合、srcおよびsrcset属性、および任意の兄source要素のsrcset属性によって与えられる画像は、エンベティッドコンテンツである。alt属性の値は、画像を処理することができないまたは読み込みが無効である画像に対して、等価なコンテンツを提供する。(すなわち、img要素のフォールバックコンテンツである)。

Support: srcsetChrome for Android 59+Chrome 38+UC Browser for Android 11.4+iOS Safari 9.0+Firefox 38+IE NoneSamsung Internet 4+Opera Mini NoneSafari 9+Edge NoneAndroid Browser 56+Opera 25+

Source: caniuse.com

alt属性の値に関する要件は、個々の節で説明される。

src属性は存在しなければならず、画像リソースは潜在的にページ化もスクリプト化もされていない、任意でアニメーションである、非対話型を参照する潜在的にスペースで囲まれた妥当な空でないURLを含めなければならない。

上記の要件は、画像が静的ビットマップ(たとえばPNG、GIF、JPEG)、単一ページのベクター文書(単一ページのPDF、SVG文書要素を持つXMLファイル)、アニメーションビットマップ(APNG、アニメーションGIF)、アニメーションベクターグラフィックス(宣言型SMILアニメーションを使用するSVG文書要素を持つXMLファイル)などであることを意味する。しかし、これらの定義は、スクリプトを伴うSVGファイル、複数ページのPDFファイル、インタラクティブMNGファイル、HTML文書、プレーンテキスト文書などを排除する。[PNG] [GIF] [JPEG] [PDF] [XML] [APNG] [SVG] [MNG]

srcset属性も存在してもよく、かつsrcset属性である。

幅記述子が使用されない場合)srcset属性およびsrc属性は、ソースセット画像ソースに寄与する(どのsource要素も選択されなかった場合) 。

srcset属性が存在しかつ幅記述子を用いる任意の画像候補文字列を持つ場合、sizes属性も存在しなければならず、かつsizes属性である。source要素が選択される場合、sizes属性はソースセットソースサイズに寄与する。

crossorigin属性はCORS設定属性である。その目的は、クロスオリジンなアクセスにcanvasとともに使用できるサードパーティのサイトからの画像を許可することである。

referrerpolicy属性は、リファラポリシー属性である。その目的は、画像を取得する際に使用されるリファラポリシーを設定することにある。[REFERRERPOLICY]


img要素は、レイアウトツールとして使用してはならない。特に、画像はめったに意味および文書に有用なものを追加しないので、img要素は、透明な画像を表示するために使用すべきでない。


What an img element represents depends on the src attribute and the alt attribute.

If the src attribute is set and the alt attribute is set to the empty string

The image is either decorative or supplemental to the rest of the content, redundant with some other information in the document.

If the image is available and the user agent is configured to display that image, then the element represents the element's image data.

Otherwise, the element represents nothing, and may be omitted completely from the rendering. User agents may provide the user with a notification that an image is present but has been omitted from the rendering.

If the src attribute is set and the alt attribute is set to a value that isn't empty

The image is a key part of the content; the alt attribute gives a textual equivalent or replacement for the image.

If the image is available and the user agent is configured to display that image, then the element represents the element's image data.

Otherwise, the element represents the text given by the alt attribute. User agents may provide the user with a notification that an image is present but has been omitted from the rendering.

If the src attribute is set and the alt attribute is not

The image might be a key part of the content, and there is no textual equivalent of the image available.

In a conforming document, the absence of the alt attribute indicates that the image is a key part of the content but that a textual replacement for the image was not available when the image was generated.

If the image is available and the user agent is configured to display that image, then the element represents the element's image data.

Otherwise, the user agent should display some sort of indicator that there is an image that is not being rendered, and may, if requested by the user, or if so configured, or when required to provide contextual information in response to navigation, provide caption information for the image, derived as follows:

  1. If the image has a title attribute whose value is not the empty string, then the value of that attribute is the caption information; abort these steps.

  2. If the image is a descendant of a figure element that has a child figcaption element, and, ignoring the figcaption element and its descendants, the figure element has no flow content descendants other than inter-element whitespace and the img element, then the contents of the first such figcaption element are the caption information; abort these steps.

  3. There is no caption information.

If the src attribute is not set and either the alt attribute is set to the empty string or the alt attribute is not set at all

The element represents nothing.

そうでなければ

The element represents the text given by the alt attribute.

The alt attribute does not represent advisory information. User agents must not present the contents of the alt attribute in the same way as content of the title attribute.

User agents may always provide the user with the option to display any image, or to prevent any image from being displayed. User agents may also apply heuristics to help the user make use of the image when the user is unable to see it, e.g. due to a visual disability or because they are using a text terminal with no graphics capabilities. Such heuristics could include, for instance, optical character recognition (OCR) of text found within the image.

While user agents are encouraged to repair cases of missing alt attributes, authors must not rely on such behavior. Requirements for providing text to act as an alternative for images are described in detail below.

The contents of img elements, if any, are ignored for the purposes of rendering.


usemap属性が存在する場合、画像が関連付けられたイメージマップを示すことができる。

href属性を持つa要素の子孫である要素で使用される場合、ismap属性は、要素がサーバーサイドのイメージマップへのアクセスを提供することによって、その存在を示す。これは、イベントが対応するa要素でどのように処理されるかに影響する。

ismap属性は真偽属性である。属性は、href属性を持つ祖先a要素を持たない要素に指定してはならない。

usemapおよびismap属性は、picture要素で指定されるmedia属性をもつsource要素と一緒に使用される場合に混乱する振る舞いをもたらすかもしれない。

img要素は、次元属性をサポートする。

altsrcsrcsetsizes IDL属性は、同じ名前の各コンテンツ属性を反映しなければならない。

crossOrigin IDL属性は、crossoriginコンテンツ属性を反映しなければならない。

useMap IDL属性は、usemapコンテンツ属性を反映しなければならない。

isMap IDL属性は、ismapコンテンツ属性を反映しなければならない。

The referrerPolicy IDL attribute must reflect the referrerpolicy content attribute, limited to only known values.

image . width [ = value ]
image . height [ = value ]

これらの属性は、実際のレンダリングされた画像の大きさ、または次元が未知である場合に0を返す。

対応するコンテンツ属性を変更するために、設定が可能である。

image . naturalWidth
image . naturalHeight

これらの属性は、画像の内在次元、または次元が未知の場合に0を返す。

image . complete

画像が完全にダウンロードされている場合、または、何も画像が指定されない場合にtrueを返す。そうでなければ、falseを返す。

image . currentSrc

画像の絶対URLを返す。

image . decode()

画像は通常、エンコードされた形式で存在する。ユーザーエージェントは、画像を表示する前に生のピクセルにデコードする必要がある。このプロセスは、比較的高価になる可能性がある。

This method causes the user agent to decode the image in parallel, returning a promise that fulfills when decoding is complete. デコードされた画像データは、フルフィルメント後の少なくとも1つのフレームに対して容易に利用可能となり、デコード遅延なしに完了する画像の表示を試みることを確実にする。

画像がデコードできない場合、プロミスは"EncodingError" DOMExceptionで拒否される。

image = new Image( [ width [, height ] ] )

該当する場合、適切な引数で渡された値に設定されたwidthheight属性を持つ、新しいimg要素を返す。

The IDL attributes width and height must return the rendered width and height of the image, in CSS pixels, if the image is being rendered, and is being rendered to a visual medium; or else the density-corrected intrinsic width and height of the image, in CSS pixels, if the image has intrinsic dimensions and is available but not being rendered to a visual medium; or else 0, if the image is not available or does not have intrinsic dimensions. [CSS]

On setting, they must act as if they reflected the respective content attributes of the same name.

The IDL attributes naturalWidth and naturalHeight must return the density-corrected intrinsic width and height of the image, in CSS pixels, if the image has intrinsic dimensions and is available, or else 0. [CSS]

Spec bugs: 23581

Support: img-naturalwidth-naturalheightChrome for Android 59+Chrome 4+UC Browser for Android 11.4+iOS Safari 3.2+Firefox 2+IE 9+Samsung Internet 4+Opera Mini all+Safari 3.1+Edge 12+Android Browser 2.1+Opera 9+

Source: caniuse.com

The IDL attribute complete must return true if any of the following conditions is true:

Spec bugs: 18742, 26113

Otherwise, the attribute must return false.

The value of complete can thus change while a script is executing.

The currentSrc IDL attribute must return the img element's current request's current URL.

The decode() method, when invoked, must perform the following steps:

  1. If any of the following conditions are true about this img element:

    then return a promise rejected with an "EncodingError" DOMException.

  2. Let promise be a new promise.

  3. In parallel, wait for one of the following cases to occur, and perform the corresponding actions:

    This img element's node document stops being an active document
    This img element's current request changes or is mutated
    This img element's current request's state becomes broken

    Reject promise with an "EncodingError" DOMException.

    This img element becomes completely available

    Decode the image's media data entirely into its bitmap form, suitable for rapid painting to the screen.

    If decoding does not need to be performed for this image (for example because it is a vector graphic), resolve promise with undefined.

    If decoding fails (for example due to invalid image data), reject promise with an "EncodingError" DOMException.

    If the decoding process completes successfully, resolve promise with undefined.

    User agents should ensure that the decoded media data stays readily available until at least the end of the next update the rendering step in the event loop. This is an important part of the API contract, and should not be broken if at all possible. (Typically, this would only be violated in low-memory situations that require evicting decoded image data, or when the image is too large to keep in decoded form for this period of time.)

    Animated images will become completely available only after all their frames are loaded. Thus, even though an implementation could decode the first frame before that point, the above steps will not do so, instead waiting until all frames are available.

  4. Return promise.

Without the decode() method, the process of loading an img element and then displaying it might look like the following:

const img = new Image();
img.src = "nebula.jpg";
img.onload = () => {
    document.body.appendChild(img);
};
img.onerror = () => {
    document.body.appendChild(new Text("Could not load the nebula :("));
};

しかし、画像がDOMに挿入された後に発生するペイントでは、メインスレッドで同期デコードが行われるため、フレームが著しく削除される可能性がある。

This can instead be rewritten using the decode() method:

const img = new Image();
img.src = "nebula.jpg";
img.decode().then(() => {
    document.body.appendChild(img);
}).catch(() => {
    document.body.appendChild(new Text("Could not load the nebula :("));
});

This latter form avoids the dropped frames of the original, by allowing the user agent to decode the image in parallel, and only inserting it into the DOM (and thus causing it to be painted) once the decoding process is complete.

Because the decode() method attempts to ensure that the decoded image data is available for at least one frame, it can be combined with the requestAnimationFrame() API. This means it can be used with coding styles or frameworks that ensure that all DOM modifications are batched together as animation frame callbacks:

const container = document.querySelector("#container");

const { containerWidth, containerHeight } = computeDesiredSize();
requestAnimationFrame(() => {
 container.style.width = containerWidth;
 container.style.height = containerHeight;
});

// ...

const img = new Image();
img.src = "supernova.jpg";
img.decode().then(() => {
    requestAnimationFrame(() => container.appendChild(img));
});

A constructor is provided for creating HTMLImageElement objects (in addition to the factory methods from DOM such as createElement()): Image(width, height). When invoked, the constructor must perform the following steps:

  1. Let document be the current global object's associated Document.

  2. Let img be the result of creating an element given document, img, and the HTML namespace.

  3. If width is given, then set an attribute value for img using "width" and width.

  4. If height is given, then set an attribute value for img using "height" and height.

  5. Return img.

1つの画像は、コンテキストに応じて異なる適切な代替テキストを持つことができる。

次の場合のそれぞれにおいて、同じ画像を使用するが、altテキストは毎回異なる。画像は、スイスのジュネーブ州カルージュ自治体の紋章である。

ここでは、補足的なアイコンとして使用される:

<p>I lived in <img src="carouge.svg" alt=""> Carouge.</p>

ここでは、町を表すアイコンとして使用される:

<p>Home town: <img src="carouge.svg" alt="Carouge"></p>

ここでは町でのテキストの一部として使用される:

<p>Carouge has a coat of arms.</p>
<p><img src="carouge.svg" alt="The coat of arms depicts a lion, sitting in front of a tree."></p>
<p>It is used as decoration all over the town.</p>

ここでは代わりに代替物として、説明が与えられる場所で類似のテキストだけでなく画像もサポートするための方法として使用される:

<p>Carouge has a coat of arms.</p>
<p><img src="carouge.svg" alt=""></p>
<p>The coat of arms depicts a lion, sitting in front of a tree.
It is used as decoration all over the town.</p>

ここでは、物語の一部として使用される:

<p>She picked up the folder and a piece of paper fell out.</p>
<p><img src="carouge.svg" alt="Shaped like a shield, the paper had a
red background, a green tree, and a yellow lion with its tongue
hanging out and whose tail was shaped like an S."></p>
<p>She stared at the folder. S! The answer she had been looking for all
this time was simply the letter S! How had she not seen that before? It all
came together now. The phone call where Hector had referred to a lion's tail,
the time Maria had stuck her tongue out...</p>

ここでは、ある種の紋章であることのみで、どのような画像であるかを公表時点で未知であり、したがって、置換テキストが提供されず、title属性で、代わりに画像に対して簡単なキャプションが提供される:

<p>The last user to have uploaded a coat of arms uploaded this one:</p>
<p><img src="last-uploaded-coat-of-arms.cgi" title="User-uploaded coat of arms."></p>

理想的には、著者は、この場合ですら実際の置換テキストを提供するための方法を見つけるだろう。たとえば、前のユーザーを尋ねることによってなど。置換テキストを提供しないことは、画像を見ることができない人々、たとえば、視覚障害者のユーザー、または非常に低帯域幅の接続や従量課金、またはテキストのみのウェブブラウザーを使用することを余儀なくされているユーザーに対して文書の利用をより困難にする。

ここで、毎回別の適切な代替テキストをともなう、異なるコンテキストで使用したのと同じ写真を示す複数の例を次に示す。

<article>
 <h1>My cats</h1>
 <h2>Fluffy</h2>
 <p>Fluffy is my favorite.</p>
 <img src="fluffy.jpg" alt="She likes playing with a ball of yarn.">
 <p>She's just too cute.</p>
 <h2>Miles</h2>
 <p>My other cat, Miles just eats and sleeps.</p>
</article>
<article>
 <h1>Photography</h1>
 <h2>Shooting moving targets indoors</h2>
 <p>The trick here is to know how to anticipate; to know at what speed and
 what distance the subject will pass by.</p>
 <img src="fluffy.jpg" alt="A cat flying by, chasing a ball of yarn, can be
 photographed quite nicely using this technique.">
 <h2>Nature by night</h2>
 <p>To achieve this, you'll need either an extremely sensitive film, or
 immense flash lights.</p>
</article>
<article>
 <h1>About me</h1>
 <h2>My pets</h2>
 <p>I've got a cat named Fluffy and a dog named Miles.</p>
 <img src="fluffy.jpg" alt="Fluffy, my cat, tends to keep itself busy.">
 <p>My dog Miles and I like go on long walks together.</p>
 <h2>music</h2>
 <p>After our walks, having emptied my mind, I like listening to Bach.</p>
</article>
<article>
 <h1>Fluffy and the Yarn</h1>
 <p>Fluffy was a cat who liked to play with yarn. She also liked to jump.</p>
 <aside><img src="fluffy.jpg" alt="" title="Fluffy"></aside>
 <p>She would play in the morning, she would play in the evening.</p>
</article>