$30 off During Our Annual Pro Sale. View Details »

Writing Modes at CSS Day

Jen Simmons
June 16, 2017

Writing Modes at CSS Day

The web was invented to display text in a left-to-right horizontal writing mode — the way English and other western European languages flow. But as Bruce Lawson says, WWW stands for the World Wide Web, not the Western Wealthy Web. It's more important now than ever to be inclusive and global in our thinking, and resist imperialistic and nationalistic impulses.

Of course, over time the web has evolved. Unicode and the bidirectional algorithm provide support for right-to-left languages. More recently, the CSS Writing Mode specification added support for scripts that are typeset vertically. This talk will go through the Writing Mode Specification, unpacking our landscape of CSS tools for typesetting a complex range of written language. You'll also learn tricks for using writing mode properties to typeset graphic design effects for horizontal languages.

Jen Simmons

June 16, 2017
Tweet

More Decks by Jen Simmons

Other Decks in Design

Transcript

  1. Writing Modes

    View Slide

  2. View Slide


  3. — Bruce Lawson
    It’
    s the World Wide Web, not
    the Wealthy Western Web.

    View Slide

  4. View Slide

  5. View Slide

  6. drafts.csswg.org/css-writing-modes

    View Slide

  7. direction / dir
    writing-mode
    text-orientation

    View Slide

  8. Display Level 3

    View Slide

  9. drafts.csswg.org/css-display

    View Slide

  10. div {
    display: block;
    }




    View Slide

  11. div {
    display: inline;
    }


    View Slide

  12. div {
    display: inline-block;
    }


    View Slide

  13. display: block;
    display: inline;
    display: inline-block;
    display: none;
    display: table;
    display: flex;
    display: grid;

    View Slide

  14. display: ;

    View Slide

  15. display: ;

    View Slide

  16. The outer display type dictates 

    how the box participates in its 

    parent’s formatting context.
    = block
    inline
    run-in

    View Slide

  17. View Slide

  18. View Slide

  19. The outer display type dictates 

    how the box participates in its 

    parent’s formatting context.
    = block
    inline
    run-in

    View Slide

  20. The inner display type defines
    the kind of formatting context

    it generates, dictating how its
    descendant boxes are laid out.
    = flow flex
    flow-root grid
    table ruby

    View Slide

  21. Short `display` Full `display ` Generated box
    block block flow block-level block container
    flow-root block flow-root block-level block container w/ new Block Formatting Context
    inline inline flow inline box
    inline-block inline flow-root inline-level block container
    flex block flex block-level flex container
    inline-flex inline flex inline-level flex container
    grid block grid block-level grid container
    inline-grid inline grid inline-level grid container
    table block table block-level table wrapper box
    inline-table inline table inline-level table wrapper box

    View Slide

  22. Short `display` Full `display ` Generated box
    none subtree omitted from box tree
    contents element replaced by contents in box tree
    run-in run-in flow run-in box (inline box with special box-tree munging rules)
    list-item list-item block flow block box with additional marker box
    inline-list-item list-item inline flow inline box with additional marker box
    ruby inline ruby inline-level ruby container
    block ruby block ruby block box containing ruby container
    layout-specific internal box (a bunch more table & ruby stuff)
    (like table-row-group, table-column, ruby-base-container…)

    View Slide

  23. Writing Modes

    View Slide

  24. inline direction
    When I’m writing or reading this is the way the characters flow

    View Slide





  25. block
    flow
    direction

    View Slide

  26. Acharacter orientation

    View Slide

  27. block
    direction
    inline direction
    Acharacter orientation

    View Slide

  28. SYSTEMS LIKE LATIN
    block
    direction
    inline direction
    Acharacter
    orientation

    View Slide

  29. View Slide

  30. SYSTEMS LIKE ARABIC
    inline direction
    block
    direction
    Acharacter
    orientation

    View Slide

  31. direction

    View Slide

  32. .foo { direction: ltr; }
    .foo { direction: rtl; }

    View Slide

  33. View Slide


  34. — The Writing Modes Spec
    Authors should not
    use `direction`.

    View Slide






  35. View Slide






  36. View Slide

  37. View Slide

  38. SYSTEMS LIKE LATIN SYSTEMS LIKE ARABIC
    block
    direction
    inline direction
    block
    direction
    inline direction

    View Slide

  39. English words

    .ﺔﯿﺑﺮﻌﻟا تﺎﻤﻠﻜﻟا

    View Slide

  40. English words in this paragraph.
    .تﺎﻤﻠﻜﻟ Some
    more LTR words, same paragraph.

    View Slide

  41. SYSTEMS LIKE LATIN SYSTEMS LIKE ARABIC
    block
    direction
    inline direction
    block
    direction
    inline direction






    View Slide


  42. ...

    Example: Writing Mode 1A

    View Slide

  43. View Slide

  44. unicode-bidi

    View Slide

  45. View Slide


  46. — The Writing Modes Spec
    Authors should not
    use `unicode-bidi`.

    View Slide

  47. youtube.com/watch?v=XgqP0qogg6U
    fantasai.inkedblade.net/style/talks/bidi/

    View Slide

  48. SYSTEMS LIKE LATIN SYSTEMS LIKE ARABIC
    block
    direction
    inline direction
    block
    direction
    inline direction






    View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. SYSTEMS LIKE MONGOLIAN
    block
    direction
    inline direction

    View Slide

  53. SYSTEMS LIKE MONGOLIAN
    block
    direction
    inline direction

    View Slide

  54. HAN-BASED SYSTEMS
    block
    direction
    inline direction
    *Chinese, Japanese, Korean & more

    View Slide

  55. HAN-BASED SYSTEMS
    block
    direction
    inline direction
    block
    direction
    inline direction
    *Chinese, Japanese, Korean & more

    View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. HAN-BASED SYSTEMS
    block
    direction
    inline direction
    block
    direction
    inline direction
    *Chinese, Japanese, Korean & more

    View Slide

  60. writing-mode

    View Slide

  61. THREE OPTIONS FOR WRITING-MODE
    writing-mode:
    vertical-lr;
    writing-mode:
    vertical-rl;
    toggle w/
    dir
    writing-mode:
    horizontal-tb;

    View Slide

  62. View Slide

  63. HAN-BASED SYSTEMS
    *Chinese, Japanese, Korean & more
    writing-mode:
    horizontal-tb;
    writing-mode:
    vertical-rl;

    View Slide

  64. chenhuijing.com/zh-type

    View Slide

  65. chenhuijing.com/blog/chinese-web-typography

    View Slide

  66. View Slide

  67. View Slide

  68. HAN-BASED SYSTEMS
    *Chinese, Japanese, Korean & more
    writing-mode:
    horizontal-tb;
    writing-mode:
    vertical-rl;

    View Slide

  69. View Slide

  70. h1:nth-child(2) {
    writing-mode: vertical-rl;
    }

    View Slide

  71. View Slide

  72. h1:nth-child(2) {
    writing-mode: ???;
    }

    View Slide

  73. 1) text flowing
    2) like this
    writing-mode: vertical-rl;

    View Slide

  74. NOPE!
    1) text flowing
    2) like this
    writing-mode: vertical-lr;
    1) text flowing
    2) like this
    writing-mode: vertical-rl;

    View Slide

  75. 2) like this
    1) text flowing
    1) text flowing
    2) like this
    SYSTEMS LIKE MONGOLIAN HAN-BASED SYSTEMS

    View Slide

  76. SYSTEMS LIKE MONGOLIAN

    View Slide

  77. SYSTEMS

    View Slide

  78. Block
    Start
    Top of
    Horizontal
    scripts
    hello
    A

    View Slide

  79. 2) like this
    1) text flowing
    1) text flowing
    2) like this
    SYSTEMS LIKE MONGOLIAN HAN-BASED SYSTEMS

    View Slide

  80. section {
    writing-mode: vertical-rl;
    }
    (This triggers
    text-orientation: mixed
    as the default.)
    Example: Writing Mode 1A

    View Slide

  81. View Slide

  82. section {
    writing-mode: vertical-lr;
    }
    Example: Writing Mode 1A

    View Slide

  83. View Slide

  84. THREE OPTIONS FOR WRITING-MODE
    direction
    block
    inline direction
    writing-mode:
    vertical-lr;
    block
    direction
    inline direction
    writing-mode:
    vertical-rl;
    block
    direction
    inline direction
    toggle w/
    dir
    writing-mode:
    horizontal-tb;
    creates a vertical typographic mode

    View Slide

  85. TWO MORE (FUTURE) OPTIONS FOR WRITING-MODE
    block
    direction
    inline direction
    writing-mode:
    sideways-lr;
    block
    direction
    inline direction
    writing-mode:
    sideways-rl;
    creates a horizontal typographic mode
    only
    A
    A

    View Slide

  86. section {
    writing-mode: sideways-rl;
    }
    Example: Writing Mode 1A

    View Slide

  87. section {
    writing-mode: sideways-lr;
    }
    Example: Writing Mode 1A

    View Slide

  88. block
    direction
    inline direction
    writing-mode:
    sideways-rl;
    block
    direction
    inline direction
    writing-mode:
    vertical-rl;
    A

    View Slide

  89. direction
    block
    inline direction
    writing-mode:
    vertical-lr;
    block
    direction
    inline direction
    writing-mode:
    sideways-lr;
    A

    View Slide

  90. creates a vertical typographic mode
    THREE OPTIONS FOR WRITING-MODE
    direction
    block
    inline direction
    writing-mode:
    vertical-lr;
    block
    direction
    inline direction
    writing-mode:
    vertical-rl;
    block
    direction
    inline direction
    toggle w/
    dir
    writing-mode:
    horizontal-tb;

    View Slide

  91. My Cool Website

    View Slide

  92. My Cool Website
    how?

    View Slide

  93. My Cool Website
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    text-orientation: sideways;
    (needed to fix punctuation / underlining)
    text-align: right;

    View Slide

  94. text-orientation

    View Slide

  95. HAN-LIKE SYSTEMS

    View Slide

  96. View Slide

  97. options for vertical writing modes
    text-orientation:
    mixed;
    text-orientation:
    upright;
    text-orientation:
    sideways;
    THREE OPTIONS FOR TEXT-ORIENTATION

    View Slide

  98. View Slide

  99. View Slide

  100. section {
    writing-mode: vertical-rl;
    text-orientation: upright;
    }
    Example: Writing Mode 1A

    View Slide

  101. section {
    writing-mode: vertical-lr;
    text-orientation: upright;
    }
    Example: Writing Mode 1A

    View Slide

  102. block
    direction
    inline direction
    writing-mode:
    sideways-rl;
    block
    direction
    inline direction
    writing-mode:
    vertical-rl;
    text-orientation: mixed;
    creates a horizontal typographic mode
    creates a vertical typographic mode

    View Slide

  103. My Cool Website
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    text-orientation: sideways;
    (needed to fix punctuation / underlining)
    text-align: right;

    View Slide

  104. h1 {
    writing-mode: vertical-rl;
    }
    Example: Writing Mode 4A

    View Slide

  105. h1 {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    text-align: right;
    text-orientation: sideways;
    }
    Example: Writing Mode 4B

    View Slide

  106. h1 {
    writing-mode: vertical-rl;
    text-orientation: upright;
    text-transform: uppercase;
    }
    Example: Writing Mode 4C

    View Slide

  107. h1 {
    writing-mode: vertical-rl;
    text-orientation: upright;
    text-transform: uppercase;
    transform: rotate(180deg);
    }
    Example: Writing Mode 4D

    View Slide

  108. View Slide

  109. View Slide



  110. Made
    by
    Few


    Example: Writing Mode 3A

    View Slide

  111. h1 span:nth-child(2) {
    writing-mode: vertical-rl;
    text-orientation: upright;
    font-size: 45%;
    }
    Example: Writing Mode 3A

    View Slide

  112. h1 {
    display: grid;
    }
    h1 span:nth-child(1) {
    grid-column: 1 / 3;
    grid-row: 1 / 2;
    }
    h1 span:nth-child(2) {
    grid-column: 1 / 2;
    grid-row: 2 / 3;
    }
    h1 span:nth-child(3) {
    grid-column: 2 / 3;
    grid-row: 2 / 3;
    } Example: Writing Mode 3A

    View Slide

  113. SUMMARY

    View Slide

  114. block
    direction
    inline direction
    Acharacter orientation

    View Slide

  115. SYSTEMS LIKE LATIN
    A

    View Slide

  116. SYSTEMS LIKE ARABIC
    A

    View Slide

  117. HAN-LIKE SYSTEMS
    *Chinese, Japanese, Korean & more


    View Slide

  118. MONGOLIAN-LIKE SYSTEMS

    View Slide

  119. dir
    writing-mode
    text-orientation

    View Slide

  120. SYSTEMS LIKE LATIN SYSTEMS LIKE ARABIC
    block
    direction
    inline direction
    block
    direction
    inline direction
    A
    A






    View Slide

  121. THREE OPTIONS FOR WRITING-MODE
    direction
    block
    inline direction
    writing-mode:
    vertical-lr;
    block
    direction
    inline direction
    writing-mode:
    vertical-rl;
    block
    direction
    inline direction
    toggle w/
    direction
    writing-mode:
    horizontal-tb;
    creates a vertical typographic mode


    A

    View Slide

  122. TWO MORE (FUTURE) OPTIONS FOR WRITING-MODE
    block
    direction
    inline direction
    writing-mode:
    sideways-lr;
    block
    direction
    inline direction
    writing-mode:
    sideways-rl;
    creates a horizontal typographic mode
    only
    A
    A

    View Slide

  123. options for vertical writing modes
    text-orientation:
    mixed;
    text-orientation:
    upright;
    text-orientation:
    sideways;
    THREE OPTIONS FOR TEXT-ORIENTATION

    View Slide

  124. Start & End

    View Slide

  125. block inline

    View Slide

  126. block end
    inline
    start
    inline
    end
    block start

    View Slide

  127. block end
    inline start
    inline end
    block start

    View Slide

  128. block start
    inline end
    inline start
    block end

    View Slide

  129. end
    start
    end
    start

    View Slide

  130. Logical Properties

    View Slide

  131. margin-block-start: 1rem;
    padding-inline-end: 1rem;
    border-block-end: 1px solid black;
    text-align: start;
    float: inline-start;

    View Slide

  132. View Slide

  133. drafts.csswg.org/css-logical

    View Slide

  134. Alignment

    View Slide

  135. w3.org/TR/css-align-3

    View Slide

  136. from CSS Tricks’ Complete Guide to Flexbox

    View Slide

  137. View Slide

  138. Justify vs. Align

    View Slide

  139. block inline

    View Slide

  140. start
    center
    end
    s
    t
    r
    e
    t
    c
    h
    Align

    View Slide

  141. Align

    View Slide

  142. start center end
    s t r e t c h
    Justify

    View Slide

  143. Justify

    View Slide

  144. cross axis
    main axis
    flex-direction: row;

    View Slide

  145. cross axis
    main axis
    Justify
    Align
    flex-direction: row;

    View Slide

  146. main axis
    Justify
    cross axis
    Align
    flex-direction: column;

    View Slide

  147. Grid
    Justify
    1
    4 5
    2
    3
    6
    8
    7
    9
    Align
    writing-mode: horizontal-tb;
    grid-auto-flow: row;

    View Slide

  148. Grid
    Justify
    1 4
    5
    2
    3
    6
    8
    7
    9
    writing-mode: horizontal-tb;
    grid-auto-flow: column;
    Align

    View Slide

  149. Align
    Justify

    View Slide

  150. THANKS!
    jensimmons.com
    @jensimmons
    layout.land
    labs.jensimmons.com

    View Slide