reading-flow
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
reading-flow 㯠CSS ã®ããããã£ã§ããããã¯ããã¬ãã¯ã¹ãã°ãªããã®åã¬ã¤ã¢ã¦ãã®åè¦ç´ ã®èªã¿é ã夿´ãããã¨ãã§ãã¾ããããã¯ãã¿ãæä½ã§ãªã³ã¯ããã¿ã³ãé ã«é¸æããã¨ãã£ãé£ç¶çãªããã²ã¼ã·ã§ã³ã使ç¨ããã¦ããéãé³å£°åãããé åºãç§»åå
ã®é åºã«å½±é¿ãä¸ãã¾ãã
æ§æ
/* ãã¼ã¯ã¼ãå¤ */
reading-flow: normal;
reading-flow: flex-visual;
reading-flow: flex-flow;
reading-flow: grid-columns;
reading-flow: grid-rows;
reading-flow: grid-order;
reading-flow: source-order;
/* ã°ãã¼ãã«å¤ */
reading-flow: inherit;
reading-flow: initial;
reading-flow: revert;
reading-flow: revert-layer;
reading-flow: unset;
å¤
reading-flow ããããã£ã¯ãå¤ã¨ãã¦ä»¥ä¸ã®ãã¼ã¯ã¼ãã®ãããããåãã¾ãã
normal-
ããã©ã«ãå¤ã§ããèªã¿é 㯠DOM ä¸ã®è¦ç´ ã®é ã«å¾ãã¾ãã
flex-visual-
ãã¬ãã¯ã¹ã³ã³ããã¼ã«ã®ã¿å½±é¿ãã¾ããèªã¿é ã¯ã
writing-modeãèæ ®ããä¸ã§ãflexã¢ã¤ãã ã®è¦è¦çãªé åºã«å¾ãã¾ãããããã£ã¦ãflex-direction: row-reverseã¨reading-flow: flex-visualãè¨å®ãããè±èªã®ææ¸ã§ã¯ãèªã¿é ã¯å·¦ããå³ã«ãªãã¾ãã flex-flow-
ãã¬ãã¯ã¹ã³ã³ããã¼ã«ã®ã¿å½±é¿ãã¾ããèªã¿é ã¯
flex-flowã®æ¹åã«å¾ãã¾ãã grid-columns-
ã°ãªããã³ã³ããã¼ã«ã®ã¿å½±é¿ãã¾ããèªã¿é ã¯ãã°ãªããã¢ã¤ãã ã®è¦è¦çãªé åºã«å¾ããåãã¨ã«ãæ¸åæ¹åãèæ ®ãã¦é²ã¿ã¾ãã
grid-rows-
ã°ãªããã³ã³ããã¼ã«ã®ã¿å½±é¿ãã¾ããèªã¿é ã¯ãã°ãªããã¢ã¤ãã ã®è¦è¦çãªé åºã«å¾ããè¡ãã¨ã«ãæ¸åæ¹åãèæ ®ãã¦é²ã¿ã¾ãã
grid-order-
ã°ãªããã³ã³ããã¼ã«ã®ã¿å½±é¿ãã¾ãã
orderããããã£ãã³ã³ããã¼ã®åè¦ç´ ã®ããããã«é©ç¨ããã¦ããå ´åãèªã¿åãé åºã¯å¤æ´ãããé ç®ã®é åºã«å¾ãã¾ããorderããããã£ãã°ãªããã¢ã¤ãã ã«é©ç¨ããã¦ããªãå ´åãgrid-orderã¯normalã¨ãã¦åä½ãã¾ãã source-order-
ã°ãªããããã¬ãã¯ã¹ããããã¯ã®ã³ã³ããã¼ã«å½±é¿ãã¾ããèªåèªèº«ã§ã¯å¹æãæããï¼ã³ã³ããã®èªã¿åãé åºã¯ DOM å ã®è¦ç´ é åºã«å¾ãï¼ãã³ã³ããã¼ã®åè¦ç´ ã«
reading-orderããããã£ãè¨å®ãããã¨ã§èªã¿åãé åºã夿´å¯è½ã«ãã¾ãã
解説
reading-flow ããããã£ã¯ãnormal 以å¤ã®å¤ã«è¨å®ããå ´åããããã¯ããã¬ãã¯ã¹ãã°ãªããã®ã³ã³ããã¼ã®ä¸ã«ããè¦ç´ ã®èªã¿é ã夿´ãã¾ãããã®ãããªã³ã³ããã¼ã¯èªã¿ããã¼ã³ã³ããã¼ã¨å¼ã°ãã¾ãã
ããã©ã«ãã§ã¯ãã¦ã§ãã³ã³ãã³ã㯠DOM ã½ã¼ã¹é ã«èªã¿ä¸ãããã¾ããä¸è¬çã«ãã½ã¼ã¹é ã¯ã³ã³ãã³ãã®åççãªèªã¿é ã表ããã®ã§ããããã®ã³ã³ãã³ãã¬ã¤ã¢ã¦ãã®è¦è¦çé åºãåæã«åæ ãããã¹ãã§ããããããè¦è¦çé åºãã¿ãé åºãã½ã¼ã¹é ã¨ç°ãªãå ´åãããã¾ããä¾ãã°ãã¡ãã£ã¢ã¯ã¨ãªã¼ãç¨ãã¦ç°ãªã端æ«ãã¦ã¼ã¶ã¼ã®è¦ä»¶ã«åããã¦ææ¸ã«è¤æ°ã®ãã¬ãã¯ã¹ããã¯ã¹ãã°ãªããã¬ã¤ã¢ã¦ããé©ç¨ããå ´åããã¥ã¼ãã¼ãã®å¹
ã«åºã¥ãã¦ã³ã³ãã³ãã®é åºãç°ãªããã¨ãããã¾ãããã®ãããªå ´åãreading-flow ã使ç¨ãã¦ãèªã¿é ã¨ã¿ãé åºãè¦è¦çãªé åºãåæ ããããã«å®ç¾ãããã¨ãã§ãã¾ãã
å ´åã«ãã£ã¦ã¯ãèªã¿ããã¼ã³ã³ããã¼å
ã®èªã¿é ãããã«å¾®èª¿æ´ããããã¨ãããã¾ããã³ã³ããã¼ã®åè¦ç´ ã« reading-order ããããã£å¤ãé©ç¨ãããã¨ã§ãããããåºæ°ã°ã«ã¼ãã«åé¡ããæ°å¤é ã«èªã¿åºããããã¨ãã§ãã¾ãã
tabindex ã¨ã®é¢ä¿
é常ã¯ãã©ã¼ã«ã¹ä¸å¯ã§ããä¸é£ã®èªã¿ããã¼ã³ã³ããã¼ã®åè¦ç´ ããtabindex="0" 屿§ã«ãã£ã¦ãã©ã¼ã«ã¹å¯è½ã«ãããå ´åããããã®èªã¿é ã¯ãreading-flow ããã³ reading-order ããããã£ã«ãã£ã¦æå¾
ãããéãã«å¤æ´ããã¾ããããã¯ã<a> ã¾ã㯠<button> ãªã©ã®å¯¾è©±è¦ç´ ã¨åæ§ã®æåã§ãã
ãã ããæ£ã® tabindex å¤ã使ç¨ãã¦èªã¿ããã¼ã³ã³ããã®å
容ã®ã¿ãé åºã夿´ãããã¨ãã試ã¿ã¯ãã¹ã¦ç¡è¦ããã¾ãããã㯠reading-flow ããã³ reading-order ã®å¹æã«ãã£ã¦ä¸æ¸ããããããã§ãããããããããã®å¤ã使ç¨ãã¹ãã§ã¯ããã¾ããã詳細㯠Don't Use Tabindex Greater than 0 ãåç
§ãã¦ãã ãããreading-flow ããã³ reading-order ããããã£ã¯ãå¿
è¦ã«å¿ãã¦ã¿ãé åºã夿´ããã¯ããã«è¯ãæ¹æ³ãæä¾ãã¾ãã
å ¬å¼å®ç¾©
| åæå¤ | normal |
|---|---|
| é©ç¨å¯¾è±¡ | ãããã¯ã³ã³ããã¼, ãã¬ãã¯ã¹ã³ã³ããã¼, ã°ãªããã³ã³ããã¼ |
| ç¶æ¿ | ãªã |
| è¨ç®å¤ | æå®éã |
| ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ | ã¢ãã¡ã¼ã·ã§ã³ä¸å¯ |
ä¾
>ãã¬ãã¯ã¹å¤ã®æ¯è¼
ãã®ä¾ã§ã¯ããã¬ãã¯ã¹ã¢ã¤ãã ãéé ã«é
ç½®ããããã¬ãã¯ã¹ã³ã³ããã¼å
ã§ãæ§ã
㪠reading-flow å¤ãåã¼ã广ã示ãã¾ãã
HTML
ãã®ãã¼ã¯ã¢ããã§ã¯ã<select> è¦ç´ ã§æ§ã
㪠reading-flow ã®å¤ãé¸ã¹ãããã«ãã¦ãããããã¦ã©ããã¼ã® <div> ã®ä¸ã« 3 ã¤ã® <a> è¦ç´ ãå
¥ã£ã¦ãã¾ãã
<form>
<label for="reading-flow">èªã¿é ã鏿:</label>
<select id="reading-flow">
<option>normal</option>
<option>flex-visual</option>
<option>flex-flow</option>
</select>
</form>
<div class="wrapper">
<a href="#">ã¢ã¤ãã 1</a>
<a href="#">ã¢ã¤ãã 2</a>
<a href="#">ã¢ã¤ãã 3</a>
</div>
CSS
display ã« flex ã®å¤ãè¨å®ãããã¨ã§ã<div> ããã¬ãã¯ã¹ã³ã³ããã¼ã¨ããflex-direction ã®å¤ã row-reverse ã«ãããã¨ã§ããã¬ãã¯ã¹ã¢ã¤ãã ãè¡å
ã§ DOM é ã¨ã¯éã«è¡¨ç¤ºãã¦ãã¾ããæåãreading-flow ã normal ã«è¨å®ãã¦ãã¾ãã®ã§ãã¢ã¤ãã ã®èªã¿é ãã¿ãé 㯠DOM ã½ã¼ã¹é ã«ãªã£ã¦ãã¾ãã
order ã®å¤ã 1 ã«è¨å®ãããã¨ã§ãæåã® <a> è¦ç´ ã¯ãã¬ãã¯ã¹ã®ããã¼ã® 2 çªç®ã¨ 3 çªç®ã®ã¢ã¤ãã ã®å¾ã«è¡¨ç¤ºããã¾ãããã¬ãã¯ã¹ã¢ã¤ãã ã®è¡¨ç¤ºé ã¯ãå·¦ããé ã«ãã¢ã¤ãã 1ãããã¢ã¤ãã 3ãããã¢ã¤ãã 2ãã®é ã«ãªãã¾ããã DOM ä¸ã®é åºã¯å¤åãã¾ããã
.wrapper {
display: flex;
flex-direction: row-reverse;
reading-flow: normal;
gap: 1em;
}
a:first-child {
order: 1;
}
JavaScript
ãã®ã¹ã¯ãªããã§ã¯ã<select> è¦ç´ ã¨ã©ããã¼ã® <div> ãææããchange ã¤ãã³ããªã¹ãã¼ã <select> è¦ç´ ã«è¿½å ãã¾ããæ°ããå¤ã鏿ãããã¨ãããããã©ããã¼ã® reading-flow ããããã£ã®å¤ã¨ãã¦è¨å®ãã¾ãã
const selectElem = document.getElementById("reading-flow");
const wrapperElem = document.querySelector(".wrapper");
selectElem.addEventListener("change", () => {
wrapperElem.style.readingFlow = selectElem.value;
});
çµæ
ãã®ãã¢ã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¾ãã reading-flow: normal ã®è¨å®ã§ã¿ãç§»åããã¦ã¿ã¦ãã ãããã¿ãé ã¯ãã¢ã¤ãã 1ãããã¢ã¤ãã 2ãããã¢ã¤ãã 3ãã¨ãªãããã㯠DOM å
ã§ã®è¦ç´ ã®é åºéãã§ãã
ããã§ã¯ãreading-flow ã®å¤ã夿´ãã¦ãã¾ããªã³ã¯ãã¿ãç§»åãã¦ã¿ã¦ãã ããã
flex-visualã®å¤ã«ããã¨ãã¢ã¤ãã ã®ã¿ãç§»åããã¢ã¤ãã 1ãããã¢ã¤ãã 3ãããã¢ã¤ãã 2ãã®é åºã¨ãªããããã¯é©ç¨ããããã¬ãã¯ã¹ããã¯ã¹ããããã£ã®è¦è¦çãªè¡¨ç¤ºé åºã§ããflex-flowã®å¤ã«ããã¨ãã¢ã¤ãã ã®ã¿ãç§»åããã¢ã¤ãã 2ãããã¢ã¤ãã 3ãããã¢ã¤ãã 1ãã®é åºã¨ãªããflex-flowã®æ¹åããã®å ´åã¯row-reverseã¨ä¸è´ãã¾ããããã§ãã¿ãé ã¯è¡¨ç¤ºé ã¨ã¯éã«ãªãã¾ãã
ã°ãªããå¤ã®æ¯è¼
ãã®ä¾ã§ã¯ãã°ãªããã³ã³ããã¼ã«ãããæ§ã
㪠reading-flow å¤ã®å¹æã示ãã¾ãã
HTML
ãã®ãã¼ã¯ã¢ããã§ã¯ã<select> è¦ç´ ã§æ§ã
㪠reading-flow ã®å¤ãé¸ã¹ãããã«ãã¦ãããããã¦ã©ããã¼ã® <div> ã®ä¸ã« 4 ã¤ã® <a> è¦ç´ ãå
¥ã£ã¦ãã¾ãã
<form>
<label for="reading-flow">èªã¿é ã鏿:</label>
<select id="reading-flow">
<option>normal</option>
<option>grid-rows</option>
<option>grid-columns</option>
<option>grid-order</option>
</select>
</form>
<div class="wrapper">
<a class="a" href="#">ã¢ã¤ãã A</a>
<a class="b" href="#">ã¢ã¤ãã B</a>
<a class="c" href="#">ã¢ã¤ãã C</a>
<a class="d" href="#">ã¢ã¤ãã D</a>
</div>
CSS
display ã« grid ã®å¤ãè¨å®ãããã¨ã§ã<div> ãã°ãªããã³ã³ããã¼ã¨ããgrid-template-columns ã使ç¨ãããã¨ã§ãã°ãªããã¢ã¤ãã ã 3 åã«è¡¨ç¤ºãã¦ãã¾ããgrid-template-areas ãè¨å®ãããã¨ã§ãåå
ã«ç°ãªãé
ç½®é åãè¨å®ãã <a> è¦ç´ ããããã®é åã« grid-area ã§è¨å®ãã¾ããæåãreading-flow ã normal ã«è¨å®ãã¦ãã¾ãã®ã§ãã¢ã¤ãã ã®èªã¿é ãã¿ãé ã¯ããã©ã«ãã® DOM ã½ã¼ã¹é ã«ãªã£ã¦ãã¾ãã
æå¾ã«ãorder ã®å¤ã 1 ã«æåã® <a> è¦ç´ ã«è¨å®ãã¾ããããã¯ã°ãªããé åã®é
ç½®ã䏿¸ãããªãã®ã§ã¬ã¤ã¢ã¦ãã«ã¯å½±é¿ãã¾ããããå¾è¿°ããããã«ç¹å®ã® reading-flow å¤ãè¨å®ãããå ´åã«ã¯å¹æãçºæ®ãã¾ãã
å·¦ããå³ã¸èªã¿é²ããã¨ãã°ãªããã¢ã¤ãã ã®è¡¨ç¤ºé åºã¯ãã¢ã¤ãã Dãããã¢ã¤ãã Bãããã¢ã¤ãã Cãããã¢ã¤ãã Aãã§ãã
.wrapper {
display: grid;
grid-template-columns: repeat(3, 150px);
grid-template-areas:
"d b b"
"c c a";
reading-flow: normal;
}
.a {
grid-area: a;
}
.b {
grid-area: b;
}
.c {
grid-area: c;
}
.d {
grid-area: d;
}
a:first-child {
order: 1;
}
JavaScript
ã¹ã¯ãªããã§ã¯ã<select> è¦ç´ ã¨ã©ããã¼ã¨ãªã <div> è¦ç´ ã¸ã®åç
§ãåå¾ãã<select> è¦ç´ ã« change ã¤ãã³ããªã¹ãã¼ã追å ãã¾ããæ°ããå¤ã鏿ãããã¨ããã®å¤ãã©ããã¼ã® reading-flow ããããã£ã¨ãã¦è¨å®ãããããã«ãã¾ãã
const selectElem = document.getElementById("reading-flow");
const wrapperElem = document.querySelector(".wrapper");
selectElem.addEventListener("change", () => {
wrapperElem.style.readingFlow = selectElem.value;
});
çµæ
ãã®ãã¢ã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¾ãã reading-flow: normal ã®è¨å®ã§ãªã³ã¯éãã¿ãç§»åããã¦ã¿ã¦ãã ãããã¿ãé ã¯ãã¢ã¤ãã Aãããã¢ã¤ãã Bãããã¢ã¤ãã Cãããã¢ã¤ãã Dãã¨ãªãããã㯠DOM å
ã§ã®è¦ç´ ã®é åºéãã§ãã
ããã§ã¯ãreading-flow ã®å¤ã夿´ãã¦ãã¾ããªã³ã¯ãã¿ãç§»åãã¦ã¿ã¦ãã ããã
grid-rowsã®å¤ã«ããã¨ãã¢ã¤ãã ã®ã¿ãç§»åãè¡åä½ã®è¡¨ç¤ºé ã¨ãªãã¾ããããã¯ãã¢ã¤ãã Dãããã¢ã¤ãã Bãããã¢ã¤ãã Cãããã¢ã¤ãã Aãã®é åºã§ããgrid-columnsã®å¤ã«ããã¨ãã¢ã¤ãã ã®ã¿ãç§»åãååä½ã®è¡¨ç¤ºé ã¨ãªãã¾ããããã¯ãã¢ã¤ãã Dãããã¢ã¤ãã Cãããã¢ã¤ãã Bãããã¢ã¤ãã Aãã®é åºã§ããgrid-orderã®å¤ã«ããã¨ãã¢ã¤ãã ã®ã¿ãç§»åãååä½ã®è¡¨ç¤ºé ã¨ãªãã¾ããããã¯ãã¢ã¤ãã Dãããã¢ã¤ãã Cãããã¢ã¤ãã Bãããã¢ã¤ãã Aãã®é åºã§ããgrid-orderã®å¤ã¯ãã¢ã¤ãã ã®ã¿ãé åºã DOM ã®é åºã«ãã¾ãããorderå¤ã®å¤æ´ã¯èæ ®ãã¾ããorder: 1;ãæåã®<a>è¦ç´ ã«è¨å®ããã®ã§ãã¿ãé ã¯ãã¢ã¤ãã Bãããã¢ã¤ãã Cãããã¢ã¤ãã Dãããã¢ã¤ãã Aãã®é åºã¨ãªãã¾ãã
ãããã¯ã³ã³ããã¼ã«ãããèªã¿é ã®èª¿æ´
ãã®ä¾ã§ã¯ããããã¯ã³ã³ããã¼ã«å¯¾ãã reading-flow: source-order ã®å¤ã®å¹æã示ãã¾ãã
HTML
ãã®ãã¼ã¯ã¢ããã«ã¯ãã©ããã¼ã® <div> ã®ä¸ã« 4 ã¤ã® <a> è¦ç´ ãããã¾ãã
<div class="wrapper">
<a class="a" href="#">ã¢ã¤ãã A</a>
<a class="b" href="#">ã¢ã¤ãã B</a>
<a class="c" href="#">ã¢ã¤ãã C</a>
<a class="d" href="#">ã¢ã¤ãã D</a>
</div>
CSS
reading-flow ã source-order ã«è¨å®ãã¦ãã¢ã¤ãã ã®èªã¿é ã¾ãã¯ã¿ãé ã DOM ã½ã¼ã¹é ã«ãã¦ãã¾ãããreading-order ãä»ãã¦èªã¿é ã®å¤æ´ã¯ãããã¨ãã§ããããã«è¨å®ãã¾ããæåã® <a> è¦ç´ ã«ã¯ reading-order å¤ã¨ã㦠1 ãè¨å®ãã¾ãã
.wrapper {
reading-flow: source-order;
}
a:first-child {
reading-order: 1;
}
çµæ
ãã®ãã¢ã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¿ãã§ãªã³ã¯ãç§»åãã¦ã¿ã¦ãã ãããã¿ãé ã¯ãã¢ã¤ãã Bãããã¢ã¤ãã Cãããã¢ã¤ãã Dãããã¢ã¤ãã Aãã§ããDOM å
ã®è¦ç´ é åºã¯å®ããã¾ãããã¢ã¤ãã A ã¯ä»ã®è¦ç´ ãããé«ãèªã¿é ã®ã°ã«ã¼ãï¼ããã©ã«ãã® reading-order å¤ã¯ 0ï¼ã«é
ç½®ããã¦ãããããæå¾ã«ã¿ãç§»åããã¾ãã
仿§æ¸
| Specification |
|---|
| CSS Display Module Level 4> # reading-flow> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
reading-order- CSS
reading-flowexamples via chrome.dev