css-overflow/Overview.bs

Sun, 15 Jan 2017 22:18:42 +0900

author
Florian Rivoal <[email protected]>
date
Sun, 15 Jan 2017 22:18:42 +0900
changeset 18680
078265332f8e
parent 18674
dc1f0ffba654
child 19333
f237c1a2c6aa
permissions
-rw-r--r--

[css-overflow] Define scrollbar-gutter

Closes #92

peter@16999 1 <h1>CSS Overflow Module Level 4</h1>
dbaron@15115 2 <pre class="metadata">
dbaron@15115 3 Status: ED
jackalmage@15674 4 Work Status: Exploring
peter@16999 5 ED: https://drafts.csswg.org/css-overflow-4/
dbaron@15115 6 Shortname: css-overflow
dbaron@15115 7 Group: csswg
florian@17019 8 Level: 4
peter@16999 9 TR: https://www.w3.org/TR/css-overflow-4/
peter@16999 10 Previous version: https://www.w3.org/TR/css-overflow-3/
dbaron@18303 11 Editor: L. David Baron, Mozilla https://www.mozilla.org/, https://dbaron.org/
git@18674 12 Editor: Florian Rivoal, On behalf of Bloomberg, http://florian.rivoal.net/
dbaron@15115 13 Abstract: This module contains the features of CSS relating to new mechanisms of overflow handling in visual media (e.g., screen or paper). In interactive media, it describes features that allow the overflow from a fixed size container to be handled by pagination (displaying one page at a time). It also describes features, applying to all visual media, that allow the contents of an element to be spread across multiple fragments, allowing the contents to flow across multiple regions or to have different styles for different fragments.
dbaron@15125 14 !Change Log: <a href="https://hg.csswg.org/drafts/log/tip/css-overflow/Overview.bs">from 27 January 2015 to the present</a>
dbaron@15125 15 !Change Log: <a href="https://hg.csswg.org/drafts/log/tip/css-overflow/Overview.src.html">from 28 March 2013 to 27 January 2015</a>
dbaron@15125 16 !Change Log: <a href="https://hg.csswg.org/drafts/log/tip/css3-overflow/Overview.src.html">from 31 July 2012 to 27 March 2013</a>
florian@17019 17 Ignored Terms: display-inside, display-outside
dbaron@15115 18 </pre>
dbaron@15118 19 <!-- FIXME: Regressions from bikeshed conversion: -->
dbaron@15118 20 <!-- - Value lines in propdef tables no longer link to #values. -->
dbaron@15118 21 <!-- - no longer says "Test suite: none yet" -->
dbaron@15118 22 <!-- - Abstract has the most introductory sentence last -->
dbaron@15181 23 <!-- FIXME: other bikeshed issues -->
dbaron@15115 24 <pre class="link-defaults">
dbaron@15115 25 spec:css-transforms-1; type:property; text:transform-style
jackalmage@15315 26 type: dfn; spec:css-multicol-1; text:overflow column
dbaron@15115 27 </pre>
dbaron@15115 28 <!-- FIXME: the break-* link doesn't actually work! -->
dbaron@15115 29 <pre class="anchors">
peter@16989 30 url: https://www.w3.org/TR/2008/CR-css3-marquee-20081205/#the-overflow-style; type: property; text: overflow-style;
peter@16986 31 url: https://drafts.csswg.org/selectors-3/#subject; type: dfn; text: subject;
dbaron@15115 32 </pre>
dbaron@6475 33 <style>
dbaron@6477 34 table.source-demo-pair {
dbaron@6477 35 width: 100%;
dbaron@6477 36 }
dbaron@6481 37
dbaron@6475 38 .in-cards-demo {
dbaron@6475 39 width: 13em;
dbaron@6475 40 height: 8em;
dbaron@6475 41
dbaron@6475 42 padding: 4px;
dbaron@6475 43 border: medium solid blue;
dbaron@6475 44 margin: 6px;
dbaron@6475 45
dbaron@6475 46 font: medium/1.3 Times New Roman, Times, serif;
dbaron@6475 47 white-space: nowrap;
dbaron@6475 48 }
dbaron@6481 49
dbaron@6477 50 .bouncy-columns-demo {
dbaron@6477 51 width: 6em;
dbaron@6477 52 height: 10em;
dbaron@6477 53 float: left;
dbaron@6477 54 margin: 1em;
dbaron@6477 55 font: medium/1.25 Times New Roman, Times, serif;
dbaron@6477 56 white-space: nowrap;
dbaron@6477 57 }
dbaron@6477 58 .bouncy-columns-demo.one {
dbaron@6477 59 background: aqua; color: black;
dbaron@6477 60 transform: rotate(-3deg);
dbaron@6477 61 }
dbaron@6477 62 .bouncy-columns-demo.two {
dbaron@6477 63 background: yellow; color: black;
dbaron@6477 64 transform: rotate(3deg);
dbaron@6477 65 }
dbaron@6479 66
dbaron@6480 67 .article-font-inherit-demo {
dbaron@6480 68 font: 1em/1.25 Times New Roman, Times, serif;
dbaron@6480 69 white-space: nowrap;
dbaron@6480 70 }
dbaron@6480 71 .article-font-inherit-demo.one {
dbaron@6480 72 width: 12em;
dbaron@6480 73 font-size: 1.5em;
dbaron@6480 74 margin-bottom: 1em;
dbaron@6480 75 height: 4em;
dbaron@6480 76 }
dbaron@6480 77 .article-font-inherit-demo.two {
dbaron@6480 78 width: 11em;
dbaron@6480 79 margin-left: 5em;
dbaron@6480 80 margin-right: 2em;
dbaron@6480 81 }
dbaron@6480 82
dbaron@6481 83 .dark-columns-demo {
dbaron@6481 84 width: 6em;
dbaron@6481 85 height: 10em;
dbaron@6481 86 float: left;
dbaron@6481 87 margin-right: 1em;
dbaron@6481 88 font: medium/1.25 Times New Roman, Times, serif;
dbaron@6481 89 white-space: nowrap;
dbaron@6481 90 }
dbaron@6481 91 .dark-columns-demo.one {
dbaron@6481 92 background: aqua; color: black;
dbaron@6481 93 }
dbaron@6481 94 .dark-columns-demo.one :link {
dbaron@6481 95 color: blue;
dbaron@6481 96 }
dbaron@6481 97 .dark-columns-demo.one :visited {
dbaron@6481 98 color: purple;
dbaron@6481 99 }
dbaron@6481 100 .dark-columns-demo.two {
dbaron@6481 101 background: navy; color: white;
dbaron@6481 102 }
dbaron@6481 103 .dark-columns-demo.two :link {
dbaron@6481 104 color: aqua;
dbaron@6481 105 }
dbaron@6481 106 .dark-columns-demo.two :visited {
dbaron@6481 107 color: fuchsia;
dbaron@6481 108 }
dbaron@6481 109
dbaron@6479 110 .article-max-lines-demo {
dbaron@6479 111 font: 1em/1.25 Times New Roman, Times, serif;
dbaron@6479 112 white-space: nowrap;
dbaron@6479 113 }
dbaron@6479 114 .article-max-lines-demo.one::first-letter {
dbaron@6479 115 font-size: 2em;
dbaron@6479 116 line-height: 0.9;
dbaron@6479 117 }
dbaron@6479 118 .article-max-lines-demo.one {
dbaron@6479 119 font-size: 1.5em;
dbaron@6479 120 width: 16em;
dbaron@6479 121 }
dbaron@6479 122 .article-max-lines-demo.two {
dbaron@6479 123 width: 11.5em;
dbaron@6479 124 float: left; margin-right: 1em;
dbaron@6479 125 }
dbaron@6479 126 .article-max-lines-demo.three {
dbaron@6479 127 width: 11.5em;
dbaron@6479 128 float: left;
dbaron@6479 129 }
dbaron@6475 130 </style>
dbaron@6470 131
dbaron@6470 132 <p>
dbaron@6470 133 </p>
dbaron@6470 134
dbaron@6470 135 <h2 id="intro">
dbaron@6470 136 Introduction</h2>
dbaron@6470 137
dbaron@6470 138 <p>
dbaron@6470 139 In CSS Level 1 [[CSS1]], placing more content than would fit
dbaron@6470 140 inside an element with a specified size
dbaron@6470 141 was generally an authoring error.
dbaron@6470 142 Doing so caused the content to extend
dbaron@6470 143 outside the bounds of the element,
dbaron@6470 144 which would likely cause
dbaron@6470 145 that content to overlap with other elements.
dbaron@6470 146 </p>
dbaron@6470 147
dbaron@6470 148 <p>
dbaron@6470 149 CSS Level 2 [[CSS21]] introduced the 'overflow' property,
dbaron@6470 150 which allows authors to have overflow be handled by scrolling,
dbaron@6470 151 which means it is no longer an authoring error.
dbaron@6470 152 It also allows authors to specify
dbaron@6470 153 that overflow is handled by clipping,
dbaron@6470 154 which makes sense when the author's intent
dbaron@6470 155 is that the content not be shown.
dbaron@6470 156 </p>
dbaron@6470 157
dbaron@6470 158 <p>
dbaron@6470 159 However, scrolling is not the only way
dbaron@6470 160 to present large amounts of content,
dbaron@6470 161 and may even not be the optimal way.
dbaron@6470 162 After all, the codex replaced the scroll
dbaron@6470 163 as the common format for large written works
dbaron@6470 164 because of its advantages.
dbaron@6470 165 </p>
dbaron@6470 166
dbaron@6470 167 <p>
dbaron@6470 168 This specification introduces
dbaron@6470 169 a mechanism for Web pages to specify
dbaron@6484 170 that an element of a page should handle overflow
dbaron@6470 171 through pagination rather than through scrolling.
dbaron@6470 172 </p>
dbaron@6470 173
dbaron@6470 174 <p>
dbaron@6470 175 This specification also extends the concept of overflow
dbaron@6470 176 in another direction.
dbaron@6484 177 Instead of requiring that authors specify a single area
dbaron@6470 178 into which the content of an element must flow,
dbaron@6484 179 this specification allows authors to specify multiple fragments,
dbaron@6470 180 each with their own dimensions and styles,
dbaron@6470 181 so that the content of the element can flow from one to the next,
dbaron@6470 182 using as many as needed to place the content without overflowing.
dbaron@6470 183 </p>
dbaron@6470 184
dbaron@6470 185 <p>
dbaron@6470 186 In both of these cases, implementations must
dbaron@6470 187 break the content in the block-progression dimension.
dbaron@6470 188 Implementations must do this is described
dbaron@6470 189 in the CSS Fragmentation Module [[!CSS3-BREAK]].
dbaron@6470 190 </p>
dbaron@6470 191
dbaron@9850 192 <h2 id="overflow-concepts">Types of overflow</h2>
dbaron@9850 193
dbaron@9850 194 <p>
dbaron@9850 195 CSS uses the term <dfn>overflow</dfn> to describe
dbaron@9850 196 the contents of a box
dbaron@9850 197 that extend outside that one of that box's edges
dbaron@9850 198 (i.e., its <i>content edge</i>, <i>padding edge</i>,
dbaron@9850 199 <i>border edge</i>, or <i>margin edge</i>).
dbaron@9850 200 The overflow might be described as the elements or features
dbaron@9850 201 that cause this overflow,
dbaron@9850 202 the non-rectangular region occupied by these features,
dbaron@9850 203 or, more commonly,
dbaron@9850 204 as the minimal rectangle that bounds that region.
dbaron@9850 205 A box's overflow is computed based on the boxes and styles
dbaron@9850 206 of the box and of all its descendants whose containing block chain
dbaron@9850 207 <span class="issue">undefined term?</span>
dbaron@9850 208 includes the box.
dbaron@9850 209 </p>
dbaron@9850 210
dbaron@9850 211 <p>
dbaron@9850 212 In most cases, any of these types of overflow
dbaron@9850 213 can be computed for any box
dbaron@9850 214 from the bounds and properties of that box,
dbaron@9850 215 and from the overflow (of that type)
dbaron@9850 216 of each of its children.
dbaron@9850 217 However, this is not always the case; for example,
dbaron@9850 218 when ''transform-style: preserve-3d'' [[CSS3-TRANSFORMS]] is used on
dbaron@9850 219 some of the children, their descendants with
dbaron@9850 220 ''transform-style: preserve-3d'' must also be examined.
dbaron@9850 221 </p>
dbaron@9850 222
dbaron@9850 223 <h3 id="ink-overflow">Ink overflow</h3>
dbaron@9850 224
dbaron@9850 225 <p>
dbaron@15115 226 The <dfn id="ink-overflow0">ink overflow</dfn> of a box
dbaron@9850 227 is the part of that box and its contents that
dbaron@9850 228 creates a visual effect outside of
dbaron@9850 229 the box's border box.
dbaron@9850 230 </p>
dbaron@9850 231
dbaron@9850 232 <p>
dbaron@9850 233 Since some effects in CSS (for example, the blurs in
dbaron@9850 234 'text-shadow' [[CSS3TEXT]] and 'box-shadow' [[CSS3BG]])
dbaron@9850 235 do not define what visual extent they cover, the extent
dbaron@15115 236 of the <a>ink overflow</a> is undefined.
dbaron@9850 237 </p>
dbaron@9850 238
dbaron@9850 239 <p class="issue">
dbaron@9850 240 Should we try to define it at all and just leave pieces undefined?
dbaron@9850 241 </p>
dbaron@9850 242
dbaron@9850 243 <p>
dbaron@9850 244 The <dfn>ink overflow region</dfn> is the non-rectangular region
dbaron@15115 245 occupied by the <a>ink overflow</a>, and the
dbaron@9850 246 <dfn>ink overflow rectangle</dfn> is
dbaron@9850 247 the minimal rectangle whose axis is aligned to the box's axes
dbaron@15115 248 and contains the <a>ink overflow region</a>.
dbaron@15115 249 Note that the <a>ink overflow rectangle</a> is a rectangle
dbaron@9850 250 in the box's coordinate system, but might be non-rectangular
dbaron@9850 251 in other coordinate systems due to transforms [[CSS3-TRANSFORMS]].
dbaron@9850 252 </p>
dbaron@9850 253
dbaron@9850 254 <h3 id="scrollable-overflow">Scrollable overflow</h3>
dbaron@9850 255
dbaron@9850 256 <p>
dbaron@15115 257 The <dfn id="scrollable-overflow0">scrollable overflow</dfn> of a box is the
dbaron@9850 258 set of things extending outside of that box's padding edge
dbaron@9850 259 for which a scrolling mechanism needs to be provided.
dbaron@9850 260 </p>
dbaron@9850 261
dbaron@9865 262 <p class="issue">
dbaron@9865 263 The following definition should be rewritten to use
peter@16986 264 the concept of <a href="https://drafts.csswg.org/css-transforms/#3d-rendering-context">3D rendering context</a> [[!CSS3-TRANSFORMS]]
dbaron@9865 265 and related terms,
dbaron@9865 266 particularly once those concepts stabilize following changes
dbaron@9865 267 proposed in the CSS WG meeting on the morning of 2014-01-28.
dbaron@9865 268 </p>
dbaron@9865 269
dbaron@9850 270 <p>
dbaron@9850 271 Given the following definitions
dbaron@9850 272 <span class="issue">which belong in [[CSS3-TRANSFORMS]]</span>:
dbaron@9850 273 </p>
dbaron@9850 274
dbaron@9850 275 <dl>
dbaron@9850 276 <dt><dfn>3d-preserving child</dfn></dt>
dbaron@9850 277 <dd>
dbaron@9865 278 A child box B of a containing block C is a 3d-preserving
dbaron@9850 279 child if it has ''transform-style: preserve-3d''
dbaron@9850 280 and the user-agent is not required to flatten it
peter@16989 281 based on the <a href="https://www.w3.org/TR/css3-transforms/#transform-style-property">requirements</a> in [[!CSS3-TRANSFORMS]].
dbaron@9850 282 </dt>
dbaron@9850 283 <dt><dfn>non-3d-preserving child</dfn></dt>
dbaron@9850 284 <dd>
dbaron@9850 285 A child C of a box P is a non-3d-preserving-child if
dbaron@15115 286 it is not a <a>3d-preserving child</a>.
dbaron@9850 287 </dd>
dbaron@9850 288 <dt><dfn>3d-preserving descendant</dfn></dt>
dbaron@9850 289 <dd>
dbaron@9850 290 Box D is a 3d-preserving descendant of box A if A is
dbaron@9850 291 an ancestor of D, and D and all of the boxes (if any)
dbaron@9865 292 in the containing block chain from D to A
dbaron@15115 293 are <a>3d-preserving child</a> boxes.
dbaron@9850 294 </dd>
dbaron@9850 295 </dl>
dbaron@9850 296
dbaron@9850 297 <p>The scrollable overflow of a box is the union of the following things,
dbaron@9850 298 all adjusted for transforms <span class="issue">undefined concept!</span> into the box's coordinate space:</p>
dbaron@9850 299
dbaron@9850 300 <ul>
dbaron@9850 301 <li>
dbaron@15115 302 for the box and all of its <a>3d-preserving descendant</a> boxes:
dbaron@9850 303 <ul>
dbaron@15115 304 <li>the box's own padding edge (for the box itself) or border edge (for <a>3d-preserving descendant</a> boxes)</li>
dbaron@9850 305 <li>the bounds <span class="issue">undefined term!</span> of any text directly in the box</li>
dbaron@9850 306 <li><span class="issue">MORE HERE!</span>
dbaron@9850 307 </ul>
dbaron@9850 308 <li>
dbaron@15115 309 for all the <a>non-3d-preserving child</a> boxes of the
dbaron@15115 310 box and its <a>3d-preserving descendant</a> boxes,
dbaron@9850 311 the scrollable overflow of the box
dbaron@9850 312 </li>
dbaron@9850 313 </ul>
dbaron@9850 314
dbaron@9850 315 <p class="issue">
dbaron@9850 316 I wrote this definition off the top of my head,
dbaron@9850 317 so it can't possibly be right.
dbaron@9850 318 It's missing tons of pieces!
dbaron@9850 319 </p>
dbaron@9850 320
dbaron@9966 321 <p class="issue">
dbaron@9966 322 The handling of preserve-3d subtrees here is probably wrong;
dbaron@9966 323 the elements should probably count
dbaron@9966 324 only towards the overflow of the element that flattens them.
dbaron@9966 325 </p>
dbaron@9966 326
dbaron@9850 327 <p>
dbaron@9850 328 The <dfn>scrollable overflow region</dfn> is the non-rectangular region
dbaron@15115 329 occupied by the <a>scrollable overflow</a>, and the
dbaron@9850 330 <dfn>scrollable overflow rectangle</dfn> is
dbaron@9850 331 the minimal rectangle whose axis is aligned to the box's axes
dbaron@15115 332 and contains the <a>scrollable overflow region</a>.
dbaron@15115 333 Note that the <a>scrollable overflow rectangle</a> is a rectangle
dbaron@9850 334 in the box's coordinate system, but might be non-rectangular
dbaron@9850 335 in other coordinate systems due to transforms [[CSS3-TRANSFORMS]].
dbaron@9850 336 </p>
dbaron@9850 337
dbaron@7811 338 <h2 id="overflow-properties">Overflow properties</h2>
dbaron@7811 339
dbaron@7814 340 <p>
dbaron@15114 341 The 'overflow-x' property specifies
dbaron@7814 342 the handling of overflow in the horizontal direction
dbaron@7814 343 (i.e., overflow from the left and right sides of the box),
dbaron@15114 344 and the 'overflow-y' property specifies the handling
dbaron@7814 345 of overflow in the vertical direction
jackalmage@15301 346 (i.e., overflow from the top and bottom sides of the box)
dbaron@7814 347 </p>
dbaron@7814 348
dbaron@15119 349 <pre class=propdef>
dbaron@15119 350 Name: overflow-x, overflow-y
florian@15497 351 Value: ''visible'' | ''hidden'' | ''clip'' | ''scroll'' | ''auto''
dbaron@15180 352 Initial: ''visible''
dbaron@15119 353 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
dbaron@15119 354 Inherited: no
dbaron@15119 355 Percentages: N/A
dbaron@15119 356 Media: visual
dbaron@15119 357 Computed value: see below
dbaron@15119 358 Animatable: no
dbaron@15119 359 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 360 </pre>
dbaron@7811 361
dbaron@7814 362 <p>
dbaron@7814 363 The 'overflow' property is a shorthand property
dbaron@7814 364 that sets the specified values of both 'overflow-x' and 'overflow-y'
dbaron@7814 365 to the value specified for 'overflow'.
dbaron@7814 366 </p>
dbaron@7814 367
dbaron@15119 368 <pre class=propdef>
dbaron@15119 369 Name: overflow
florian@15497 370 Value: ''visible'' | ''hidden'' | ''clip'' | ''scroll'' | ''auto''
dbaron@15119 371 Initial: see individual properties
dbaron@15119 372 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
dbaron@15119 373 Inherited: no
dbaron@15119 374 Percentages: N/A
dbaron@15119 375 Media: visual
dbaron@15119 376 Computed value: see individual properties
dbaron@15119 377 Animatable: no
dbaron@15119 378 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 379 </pre>
dbaron@7811 380
florian@15277 381 <div id="overflow-computed-values">
florian@15277 382 <p>The computed values of 'overflow-x' and 'overflow-y'
florian@15277 383 are determined from the cascaded values [[!CSS3CASCADE]]
florian@15277 384 based on the following rules:</p>
florian@15277 385
florian@15277 386 <ol>
florian@15277 387 <li>
florian@15277 388 If one cascaded values is ''overflow/visible''
florian@15277 389 and the other is not,
florian@15277 390 then computed values are the cascaded values
florian@15277 391 with ''overflow/visible'' changed to ''overflow/auto''.
florian@15277 392 </li>
florian@15277 393 <li>
florian@15277 394 Otherwise, the computed values are as specified.
florian@15277 395 </li>
florian@15277 396 </ol>
florian@15277 397 </div>
florian@15277 398
dbaron@7811 399 <p>The values of these properties are:</p>
dbaron@7811 400
jackalmage@15301 401 <dl dfn-for="overflow, overflow-x, overflow-y" dfn-type="value">
dbaron@7811 402 <dt><dfn>visible</dfn>
dbaron@7811 403 <dd>
dbaron@7811 404 There is no special handling of overflow, that is, it
dbaron@7811 405 may be rendered outside the block container.
dbaron@7811 406 </dd>
dbaron@7811 407 <dt><dfn>hidden</dfn>
git@18362 408 <dd>
git@18362 409 This value indicates that
git@18362 410 the box’s content is clipped to its padding box
git@18362 411 and that the UA must not provide any scrolling user interface
git@18362 412 to view the content outside the clipping region,
git@18362 413 nor allow scrolling by direct intervention of the user,
git@18362 414 such as dragging on a touch screen
git@18362 415 or using the scrolling wheel on a mouse.
git@18362 416 However, the content must still be scrollable programatically,
git@18362 417 for example using the mechanisms defined in [[CSSOM-VIEW]],
git@18362 418 and the box is therefore still a <a>scroll container</a>.
git@18362 419
florian@15497 420 <dt><dfn>clip</dfn>
florian@15496 421 <dd>Like ''hidden'',
florian@15496 422 this value indicates that
florian@15496 423 the content is clipped
florian@15496 424 and that no scrolling user interface should be provided by the UA
florian@15496 425 to view the content outside the clipping region.
florian@15496 426 In addition, unlike ''overflow: hidden''
florian@15496 427 which still allows programmatic scrolling,
florian@15497 428 ''overflow: clip'' forbids scrolling entirely,
florian@15496 429 through any mechanism.
jackalmage@15674 430
florian@15496 431 Issue: Mozilla implements -moz-hidden-unscrollable,
florian@15497 432 which is similar to ''clip'',
florian@15496 433 except that it does not cause the element to establish a BFC.
florian@15496 434 Should we match that?
dbaron@7811 435 <dt><dfn>scroll</dfn>
florian@15496 436 <dd>This value indicates that the content is clipped
florian@15496 437 and that if the user agent uses a scrolling mechanism
florian@15496 438 that is visible on the screen (such as a scroll bar or a panner),
florian@15496 439 that mechanism should be displayed for a box
florian@15496 440 whether or not any of its content is clipped.
florian@15496 441 This avoids any problem with scrollbars appearing
florian@15496 442 and disappearing in a dynamic environment.
florian@15496 443 When this value is specified and the target medium is ''print'',
jackalmage@15674 444 overflowing content may be printed.
dbaron@7811 445 <dt><dfn>auto</dfn>
florian@15496 446 <dd>The behavior of the ''overflow/auto'' value is user agent-dependent,
jackalmage@15674 447 but should cause a scrolling mechanism to be provided for overflowing boxes.
florian@15277 448 </dl>
florian@15277 449
florian@15496 450 Even if 'overflow' is set to ''overflow/visible'',
jackalmage@15674 451 content may be clipped to a UA's document window by the native operating environment.
florian@15496 452
florian@15496 453 If the computed value of 'overflow' is not ''overflow/visible'',
florian@15496 454 the element creates a block formatting context.
florian@15496 455
florian@15496 456 UAs must apply the 'overflow' property
florian@15496 457 set on the root element to the viewport.
florian@15496 458 HTML UAs must instead apply the ‘overflow’ property
florian@15496 459 from the <{body}> element to the viewport
florian@15496 460 if the value on the root element is ''visible''.
florian@15496 461 The ''visible'' value when used for the viewport
florian@15496 462 must be interpreted as ''overflow/auto''.
florian@15496 463 The element from which the value is propagated
florian@15496 464 must have a used value for 'overflow' of ''visible''.
florian@15496 465
florian@15496 466 In the case of a scrollbar being placed on an edge of the element's box,
florian@15496 467 it should be inserted between the inner border edge
florian@15496 468 and the outer padding edge.
florian@15496 469 Any space taken up by the scrollbars should be
florian@15496 470 taken out of (subtracted from the dimensions of)
jackalmage@15674 471 the containing block formed by the element with the scrollbars.
florian@15496 472
florian@15496 473 Issue: import examples from [[CSS3-BOX]].
florian@15496 474
florian@15277 475 <p class="issue">
florian@15277 476 Explain which directions allow scrolling and which don't,
florian@15277 477 as a function of 'direction'
florian@15277 478 (including propagation of 'direction' to the ICB).
florian@15277 479 </p>
florian@15277 480
git@18680 481 <h2 id="scollbar-gutter-property">
git@18680 482 Reserving space for the scrollbar: the 'scrollbar-gutter' property</h2>
florian@15277 483
git@18680 484 The space between the inner border edge and the outer padding edge
git@18680 485 which user agents may reserve to display the scrollbar
git@18680 486 is called the <dfn>scrollbar gutter</dfn>.
git@18680 487
git@18680 488 The 'scrollbar-gutter' property gives control to the author
git@18680 489 over the presence of <a>scrollbar gutters</a>
git@18680 490 separately from the ability to control the presence of scrollbars
git@18680 491 provided by the 'overflow' property.
git@18680 492
git@18680 493 <pre class="propdef">
git@18680 494 Name: scrollbar-gutter
git@18680 495 Value: ''auto'' | [ ''stable'' | ''always'' ] && ''both''? && ''force''?
git@18680 496 Initial: auto
git@18680 497 Inherited: yes
git@18680 498 Computed value: specified value
git@18680 499 </pre>
git@18680 500
git@18680 501 This property affects the presence of <a>scrollbar gutters</a>
git@18680 502 placed at the <a>inline start</a> edge or <a>inline end</a> edge of the box.
git@18680 503
git@18680 504 The presence of a <a>scrollbar gutter</a>
git@18680 505 at the <a>block start</a> edge and <a>block end</a> edge of the box
git@18680 506 cannot be controlled in this level,
git@18680 507 and is determined the same way as the presence of <a>scrollbar gutters</a>
git@18680 508 placed at the <a>inline start</a> edge or <a>inline end</a> edge of the box
git@18680 509 when 'scrollbar-gutter' is ''scrollbar-gutter/auto''.
git@18680 510
git@18680 511 Scrollbars which by default are placed over the content box
git@18680 512 and do not cause <a>scrollbar gutters</a> to be created
git@18680 513 are called <dfn>overlay scrollbars</dfn>.
git@18680 514 Such scrollbars are usually partially transparent, revealing the content behind them if any.
git@18680 515 Their appearance and size may vary
git@18680 516 based on whether and how the user is interacting with them.
git@18680 517
git@18680 518 Scrollbars which are always placed in a <a>scrollbar gutter</a>,
git@18680 519 consuming space when present,
git@18680 520 are called <dfn>classic scrollbars</dfn>.
git@18680 521 Such scrollbars are usually opaque.
git@18680 522
git@18680 523 Whether <a>classic scrollbars</a> or <a>overlay scrollbars</a> are used is UA defined.
git@18680 524
git@18680 525 The appearance and size of the scrollbar is UA defined.
git@18680 526
git@18680 527 Whether scrollbars appear on the start or end edge of the box is UA defined.
git@18680 528
git@18680 529 For <a>classic scrollbars</a>,
git@18680 530 the width of the <a>scrollbar gutter</a> is the same as the width of the scrollbar.
git@18680 531 For <a>overlay scrollbars</a>,
git@18680 532 the width of the <a>scrollbar gutter</a> is UA defined.
git@18680 533 However, it must not be 0,
git@18680 534 and it must not change based on user interactions with the page or the scrollbar
git@18680 535 even if the scrollbar itself changes.
git@18680 536 Also, it must be the same for all elements in the page.
git@18680 537
git@18680 538 The values of this property have the following meaning:
git@18680 539
git@18680 540 <dl dfn-for="scrollbar-gutter">
git@18680 541 <dt><dfn>''scrollbar-gutter/auto''</dfn>
git@18680 542 <dd><a>Classic scrollbars</a> consume space by creating a <a>scrollbar gutter</a>
git@18680 543 when 'overflow' is ''overflow/scroll',
git@18680 544 or when 'overflow' is ''overflow/auto'' and the box is overflowing.
git@18680 545 <a>Overlay scrollbars</a> do not consume space.
git@18680 546
git@18680 547 <dt><dfn>''stable''</dfn>
git@18680 548 <dd>The <a>scrollbar gutter</a> is present when
git@18680 549 'overflow' is ''overflow/scroll'' or ''overflow/auto''
git@18680 550 and the scrollbar is a <a>classic scrollbar</a>
git@18680 551 even if the box is not overflowing,
git@18680 552 but not when the scrollbar is an <a>overlay scrollbar</a>.
git@18680 553
git@18680 554 <dt><dfn>''always''</dfn>
git@18680 555 <dd>The <a>scrollbar gutter</a> is always present when
git@18680 556 'overflow' is ''overflow/scroll'' or ''overflow/auto'',
git@18680 557 regardless of the type of scrollbar or
git@18680 558 of whether the box is overflowing.
git@18680 559
git@18680 560 <dt><dfn>''both''</dfn>
git@18680 561 <dd>If a <a>scrollbar gutter</a> would be present
git@18680 562 on one of the inline start edge or the inline end edge of the box,
git@18680 563 another <a>scrollbar gutter</a> must be present on the opposite edge as well.
git@18680 564
git@18680 565 <dt><dfn>''force''</dfn>
git@18680 566 <dd>When the ''scrollbar-gutter/force'' keyword is present
git@18680 567 ''scrollbar-gutter/stable'' and ''scrollbar-gutter/always'' take effect
git@18680 568 when 'overflow' is ''overflow/visible'', ''overflow/hidden'' or ''overflow/clip''
git@18680 569 in addition ''overflow/auto'' or ''overflow/scroll''.
git@18680 570 This does not cause a scrollbar to be displayed, only a <a>scrollbar gutter</a>.
git@18680 571 </dl>
git@18680 572
git@18680 573 When the <a>scrollbar gutter</a> is present but the scrollbar is not,
git@18680 574 or the scrollbar is transparent or otherwise does not fully obscure the <a>scrollbar gutter</a>,
git@18680 575 the background of the <a>scrollbar gutter</a> must be painted as an extension of the padding.
git@18680 576
git@18680 577 <div class=note>
git@18680 578 Note: The following table summarises the interaction of 'overflow' and 'scrollbar-gutter',
git@18680 579 showing in which case space is reserved for the <a>scrollbar gutter</a>.
git@18680 580 In this table, “G” represents cases where space is reserved for the <a>scrollbar gutter</a>,
git@18680 581 “f?” cases where space is reserved for the <a>scrollbar gutter</a>
git@18680 582 if ''scrollbar-gutter/force'' was specified,
git@18680 583 and empty cells cases where the no space is reserved.
git@18680 584
git@18680 585 <table class=data>
git@18680 586 <thead>
git@18680 587 <tr>
git@18680 588 <td>
git@18680 589 <td>
git@18680 590 <th colspan=2>Classic scrollbars
git@18680 591 <th colspan=2>Overlay scrollbars
git@18680 592 <tr>
git@18680 593 <th>'overflow'
git@18680 594 <th>'scrollbar-gutter'
git@18680 595 <th>Overflowing
git@18680 596 <th>Not overflowing
git@18680 597 <th>Overflowing
git@18680 598 <th>Not overflowing
git@18680 599 </thead>
git@18680 600 <tr>
git@18680 601 <th rowspan=3>'overflow/scroll'
git@18680 602 <th>''scrollbar-gutter/auto''
git@18680 603 <td>G
git@18680 604 <td>G
git@18680 605 <td>
git@18680 606 <td>
git@18680 607 <tr>
git@18680 608 <th>''scrollbar-gutter/stable''
git@18680 609 <td>G
git@18680 610 <td>G
git@18680 611 <td>
git@18680 612 <td>
git@18680 613 <tr>
git@18680 614 <th>''scrollbar-gutter/always''
git@18680 615 <td>G
git@18680 616 <td>G
git@18680 617 <td>G
git@18680 618 <td>G
git@18680 619 <tr>
git@18680 620 <th rowspan=3>''overflow/auto''
git@18680 621 <th>''scrollbar-gutter/auto''
git@18680 622 <td>G
git@18680 623 <td>
git@18680 624 <td>
git@18680 625 <td>
git@18680 626 <tr>
git@18680 627 <th>''scrollbar-gutter/stable''
git@18680 628 <td>G
git@18680 629 <td>G
git@18680 630 <td>
git@18680 631 <td>
git@18680 632 <tr>
git@18680 633 <th>''scrollbar-gutter/always''
git@18680 634 <td>G
git@18680 635 <td>G
git@18680 636 <td>G
git@18680 637 <td>G
git@18680 638 <tr>
git@18680 639 <th rowspan=3>''overflow/visible'', ''overflow/hidden'', ''overflow/clip''
git@18680 640 <th>''scrollbar-gutter/auto''
git@18680 641 <td>
git@18680 642 <td>
git@18680 643 <td>
git@18680 644 <td>
git@18680 645 <tr>
git@18680 646 <th>''scrollbar-gutter/stable''
git@18680 647 <td>f?
git@18680 648 <td>f?
git@18680 649 <td>
git@18680 650 <td>
git@18680 651 <tr>
git@18680 652 <th>''scrollbar-gutter/always''
git@18680 653 <td>f?
git@18680 654 <td>f?
git@18680 655 <td>f?
git@18680 656 <td>f?
git@18680 657 </table>
git@18680 658 </div>
florian@15277 659
florian@15278 660 <h2 id="fragmentation">Fragmentation of overflow</h2>
florian@15277 661
florian@15279 662 The 'continue' property gives authors the ability
florian@15279 663 to request that content that does not fit inside an element
florian@15279 664 be fragmented (in the sense of [[!CSS3-BREAK]]),
florian@15279 665 and provides alternatives
florian@15279 666 for where the remaining content should continue.
florian@15279 667
florian@15279 668 Notably, this property explains traditional pagination,
florian@15279 669 and extends it further.
florian@15279 670
florian@15278 671 <pre class=propdef>
florian@15278 672 Name: continue
jackalmage@15301 673 Value: ''auto'' | ''overflow'' | ''paginate'' | ''fragments'' | ''discard''
florian@15293 674 Initial: auto
florian@15278 675 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
florian@15278 676 Inherited: no
florian@15278 677 Percentages: N/A
florian@15278 678 Media: visual
florian@15278 679 Computed value: see below
florian@15278 680 Animatable: no
florian@15278 681 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
florian@15278 682 </pre>
florian@15277 683
florian@15282 684 Issue: The naming of this property and its values is preliminary.
florian@15282 685 This was initially proposed as
florian@15282 686 "fragmentation: auto | none | break | clone | page"
florian@15282 687 in <a href="https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html">https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html</a>,
florian@15282 688 and there is not yet wide agreement as to which naming is better.
florian@15277 689
florian@15284 690 Issue: This property is meant to generalize and replace 'region-fragment'.
florian@15284 691 Once it is sufficiently stable in this specification,
florian@15284 692 'region-fragment' should be removed from the regions specification in favor of this.
florian@15284 693
florian@15278 694 Note: ''continue: fragments'' replaces "overflow:fragments"
florian@15278 695 from earlier versions of this specification,
florian@15278 696 while ''continue: paginate'' replaces "overflow: paged-x | paged-y | paged-x-controls | paged-y-controls"
florian@15277 697
florian@15278 698 <dl dfn-for="continue" dfn-type="value">
florian@15293 699 <dt><dfn>auto</dfn>
florian@15293 700 <dd>''continue/auto'' may only occur as a computed value
florian@15279 701 if the element is a <a spec="css-regions">CSS Region</a>
florian@15293 702 other than the last one in a <a spec="css-regions">region chain</a>.
florian@15293 703 Content that doesn't fit is pushed to the next region of the chain.
florian@15293 704
florian@15293 705 In all other cases, ''continue/auto'' computes to one of the other values.
florian@15278 706
florian@15278 707 <dt><dfn>overflow</dfn>
florian@15278 708 <dd>Content that doesn't fit overflows, according to the 'overflow' property
florian@15278 709
florian@15278 710 <dt><dfn>discard</dfn>
florian@15278 711 <dd>Content that doesn't fit is discarded at a fragmentation break
florian@15278 712
florian@15278 713 Note: generalized from region-fragment: break; on the last region of a region chain
florian@15278 714
florian@15279 715 Issue: When the element isn't a <a spec="css-break">fragmentation container</a> already,
florian@15279 716 should this work by turning it directly into one,
florian@15279 717 or by creating a <a>fragment box</a> inside it like ''continue/fragments'' does?
florian@15278 718
florian@15278 719 <dt><dfn>paginate</dfn>
florian@15278 720 <dd>Content that doesn't fit paginates.
florian@15278 721 This creates a paginated view inside the element
florian@15278 722 similar to the way that 'overflow: scroll' creates a scrollable view.
florian@15278 723
florian@15279 724 See <a href="#paginated-overflow">paginated overflow</a>
florian@15278 725
florian@15278 726 Note: Print is effectively "continue: paginate" on the root.
dbaron@7811 727 <dt><dfn>fragments</dfn>
florian@15278 728 <dd>content that doesn't fit causes the element to copy itself and continue laying out.
florian@15279 729
florian@15278 730 See <a href="#fragment-overflow">fragment overflow</a>.
dbaron@7811 731 </dl>
dbaron@7811 732
florian@15279 733 The computed value of the 'continue' for a given element or pseudo element is determined as follow:
florian@15279 734 <ol>
florian@15293 735 <li>If the specified value is ''continue/auto''
florian@15279 736 <ol>
florian@15279 737 <li>On a <a spec="css-regions">CSS Region</a> other than the last one in a <a spec="css-regions">region chain</a>,
florian@15293 738 the computed value is ''continue/auto''
florian@15279 739 <li>On a page
florian@15279 740 the computed value is ''continue/paginate''
florian@15279 741 <li>On a <a>fragment box</a>
florian@15279 742 the computed value is ''continue/fragments''
florian@15283 743 <li>Otherwise, the computed value is ''continue/overflow''
florian@15279 744 </ol>
florian@15279 745 <li>If the specified value is ''continue/framgents''
florian@15279 746 <ol>
florian@15279 747 <li>On a page
florian@15279 748 the computed value is ''continue/paginate''
florian@15279 749 <li>Otherwise, the computed value is the specified value
florian@15279 750 </ol>
florian@15279 751 <li>In all other cases, the computed value is the specified value
florian@15279 752 </ol>
florian@15279 753
florian@15280 754 Issue: If we introduce a pseudo element that can select columns in a multicol,
florian@15293 755 we would need to specify that auto computes to auto on it,
florian@15293 756 or introduce a new value and have auto compute to that
florian@15280 757 (but what would that value compute to on things that aren't columns?).
florian@15280 758
florian@15278 759 Note: For background discussions leading to this property, see these threads:
florian@15278 760 <a href="http://lists.w3.org/Archives/Public/www-style/2012May/1197.html">discussion of overflow, overflow-x, overflow-y and overflow-style</a> and
florian@15278 761 <a href="https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html">proposal for a fragmentation property</a>
dbaron@14821 762
dbaron@6470 763 <h2 id="paginated-overflow">Paginated overflow</h2>
dbaron@6470 764
florian@15278 765 This section introduces and defines the meaning of the ''continue/paginate'' value of the 'continue' property.
dbaron@6470 766
florian@15278 767 Issue: Write this section
florian@15278 768
florian@15281 769 Issue: Pages should be possible to style with @page rules. How does that work for nested pages?
florian@15281 770
florian@15281 771 <div class="issue">
florian@15281 772 Should traditional pagination (e.g. when printing)
florian@15293 773 be expressed through some magic in the computed value of ''continue/auto'',
florian@15281 774 or by inserting this in the UA stylesheet:
florian@15281 775 <pre><code class="lang-css">
florian@15281 776 @media (overflow-block: paged), (overflow-block: optional-paged) {
florian@15281 777 :root {
florian@15281 778 continue: paginate;
florian@15281 779 }
florian@15281 780 }
florian@15281 781 </code></pre>
florian@15281 782 </div>
florian@15281 783
florian@15281 784 Issue: Traditional pagination (e.g. when printing) assumes that
florian@15281 785 :root is contained in the page box,
florian@15281 786 rather than having the page box be a pseudo element child of :root.
florian@15281 787 Can we work around that using something similar to fragment boxes?
florian@15281 788 Or maybe by having a fragment box (reproducing :root) inside a page box inside :root?
florian@15281 789
florian@15281 790 Issue: How does the page box model work when it is a child of a regular css box?
florian@15281 791
florian@15278 792 Issue: The initial proposal in [[CSS3GCPM]] and implemantation from Opera
florian@15278 793 used 4 values instead of ''continue/paginate'':
florian@15278 794 "paged-x | paged-y | paged-x-controls | paged-y-controls".
florian@15278 795 Should this property also include these values,
florian@15278 796 or are they better handled as separate properties?
florian@15278 797 (e.g.: "pagination-layout: auto | horizontal | vertical", "pagination-controls: auto | none")
florian@15278 798
florian@15278 799 Issue: Ability to display N pages at once
florian@15278 800 rather than just one page at once?
florian@15278 801 Could this be a value of "pagination-layout", such as:
florian@15278 802 "pagination-layout: horizontal 2;"
dbaron@6470 803
florian@15303 804 Issue: Brad Kemper has proposed a model for combining pagination and
florian@15303 805 fragment overflow, which also deals with displaying multiple pages.
florian@15303 806 <a href="http://www.w3.org/mid/[email protected]">http://www.w3.org/mid/[email protected]</a>
florian@15303 807
dbaron@6497 808 <p class="issue">
dbaron@6497 809 The current implementation of paginated overflow uses
dbaron@6497 810 the 'overflow'/'overflow-x'/'overflow-y' properties
dbaron@6497 811 rather than the 'overflow-style' property as proposed
dbaron@6497 812 in the [[CSS3GCPM]] draft
dbaron@6497 813 (which also matches the [[CSS3-MARQUEE]] proposal).
florian@15278 814 or the 'continue' property as described here.
dbaron@6497 815 </p>
dbaron@6497 816
dbaron@6484 817 <h2 id="fragment-overflow">Fragment overflow</h2>
dbaron@6470 818
florian@15278 819 This section introduces and defines the meaning of
florian@15278 820 the ''continue/fragments'' value of the 'continue' property.
dbaron@6470 821
dbaron@6470 822 <p>
florian@15278 823 When the computed value of 'continue' for an element is ''continue/fragments'',
dbaron@6470 824 and implementations would otherwise have created a box for the element,
dbaron@6491 825 then implementations must create a sequence of <dfn>fragment box</dfn>es
dbaron@6470 826 for that element.
florian@15278 827 (It is possible for an element with ''continue: fragments''
dbaron@15115 828 to generate only one <a>fragment box</a>.
florian@15278 829 However, if an element's computed 'continue' is not ''continue/fragments'',
dbaron@15115 830 then its box is not a <a>fragment box</a>.)
dbaron@15115 831 Every <a>fragment box</a> is a fragmentation container,
dbaron@6491 832 and any overflow
dbaron@6491 833 that would cause that fragmentation container to fragment
dbaron@15115 834 causes another <a>fragment box</a> created as a next sibling
dbaron@6470 835 of the previous one.
dbaron@6470 836 <span class="issue">Or is it as though it's a next sibling of
dbaron@6470 837 the element? Need to figure out exactly how this interacts with
dbaron@6470 838 other box-level fixup.</span>
dbaron@15115 839 Additionally, if the <a>fragment box</a> is also
dbaron@6492 840 a multi-column box (as defined in [[!CSS3COL]]
dbaron@6492 841 <span class="issue">though it defines <i>multi-column element</i></span>)
dbaron@15115 842 any content that would lead to the creation of <a>overflow columns</a> [[!CSS3COL]]
dbaron@6492 843 instead is flown into an additional fragment box.
dbaron@6491 844 However, fragment boxes may themselves be broken
dbaron@6491 845 (due to fragmentation in a fragmentation context outside of them,
dbaron@6491 846 such as pages, columns, or other fragment boxes);
dbaron@6491 847 such breaking leads to fragments of the same fragment box
dbaron@6491 848 rather than multiple fragment boxes.
dbaron@6491 849 (This matters because fragment boxes may be styled by their index;
dbaron@6491 850 such breaking leads to multiple fragments of a fragment box
dbaron@6491 851 with a single index.
dbaron@6491 852 This design choice is so that
dbaron@6491 853 breaking a fragment box across pages does not break
dbaron@6491 854 the association of indices to particular pieces of content.)
dbaron@6491 855 <span class="issue">Should a forced break that breaks to
dbaron@6491 856 an outer fragmentation context cause a new fragment of a single
dbaron@6491 857 fragment box or a new fragment box?</span>
dbaron@6491 858 <span class="issue">Should we find a term other than
dbaron@15115 859 <a>fragment box</a> here to make this a little less confusing?</span>
dbaron@6470 860 </p>
dbaron@6470 861
dbaron@6470 862 <p class="issue">
dbaron@6491 863 What if we want to be able to style the pieces of an element
dbaron@6491 864 split within another type of fragmentation context?
dbaron@6491 865 These rules prevent ever using ''::nth-fragment()'' for that,
dbaron@6491 866 despite that the name seems the most logical name for such a feature.
dbaron@6470 867 </p>
dbaron@6470 868
dbaron@6475 869 <div class="example">
dbaron@6477 870 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6475 871 &lt;title&gt;Breaking content into
dbaron@6475 872 equal-sized cards&lt;/title&gt;
dbaron@6475 873 &lt;style&gt;
dbaron@6475 874 .in-cards {
florian@15278 875 continue: fragments;
dbaron@6475 876
dbaron@6475 877 width: 13em;
dbaron@6475 878 height: 8em;
dbaron@6475 879
dbaron@6475 880 padding: 4px;
dbaron@6475 881 border: medium solid blue;
dbaron@6475 882 margin: 6px;
dbaron@6475 883
dbaron@6475 884 font: medium/1.3 Times New
dbaron@6475 885 Roman, Times, serif;
dbaron@6475 886 }
dbaron@6475 887 &lt;/style&gt;
dbaron@6475 888 &lt;div class="in-cards"&gt;
dbaron@6475 889 In this example, the text in the div
dbaron@6475 890 is broken into a series of cards.
dbaron@6475 891 These cards all have the same style.
dbaron@6475 892 The presence of enough content to
dbaron@6475 893 overflow one of the cards causes
dbaron@6475 894 another one to be created. The second
dbaron@6475 895 card is created just like it's the
dbaron@6475 896 next sibling of the first.
dbaron@6477 897 &lt;/div&gt;</pre></td><td>
dbaron@6475 898 <div class="in-cards-demo">In this example, the text in the<br>div is broken into a series of<br>cards. These cards all have the<br>same style. The presence of<br>enough content to overflow<br>one of the cards causes another</div>
dbaron@6475 899 <div class="in-cards-demo">one to be created. The second<br>card is created just like it's the<br>next sibling of the first.</div>
dbaron@6475 900 </td></tr></table>
dbaron@6475 901 </div>
dbaron@6475 902
dbaron@6487 903 <p class="issue">
florian@15278 904 We should specify that ''continue: fragments'' does not apply
dbaron@6487 905 to at least some table parts,
dbaron@6487 906 and perhaps other elements as well.
dbaron@6487 907 We need to determine exactly which ones.
dbaron@6487 908 </p>
dbaron@6487 909
dbaron@6488 910 <p class="issue">
dbaron@6488 911 This specification needs to say which type of
dbaron@6488 912 fragmentation context is created
dbaron@15113 913 so that it's clear which values of the 'break-*' properties
dbaron@6488 914 cause breaks within this context.
dbaron@15113 915 We probably want ''break-*: region'' to apply.
dbaron@6488 916 </p>
dbaron@6488 917
dbaron@6494 918 <p class="issue">
dbaron@6494 919 This specification needs a processing model
dbaron@6494 920 that will apply in cases where the layout containing the
dbaron@6494 921 fragments has characteristics that use the intrinsic size of the fragments
dbaron@6494 922 to change the amount of space available for them,
dbaron@6494 923 such as [[CSS3-GRID-LAYOUT]].
dbaron@6494 924 There has already been some work on such a processing model
dbaron@6494 925 in [[CSS3-REGIONS]],
dbaron@6494 926 and the work done on a model there,
dbaron@6494 927 and the editors of that specification,
dbaron@6494 928 should inform what happens in this specification.
dbaron@6494 929 </p>
dbaron@6494 930
dbaron@6484 931 <h3 id="fragment-styling">Fragment styling</h3>
dbaron@6470 932
dbaron@6484 933 <h4 id="fragment-pseudo-element">The ::nth-fragment() pseudo-element</h4>
dbaron@6470 934
dbaron@6470 935 <p>
dbaron@15120 936 The <dfn selector>::nth-fragment()</dfn> pseudo-element
dbaron@15120 937 is a pseudo-element
dbaron@15115 938 that describes some of the <a>fragment box</a>es generated by an element.
dbaron@6470 939 The argument to the pseudo-element takes the same syntax
dbaron@6470 940 as the argument to the :nth-child() pseudo-class
dbaron@6470 941 defined in [[!SELECT]], and has the same meaning
dbaron@6470 942 except that the number is relative to
dbaron@15115 943 <a>fragment box</a>es generated by the element
dbaron@6470 944 instead of siblings of the element.
dbaron@6470 945 </p>
dbaron@6470 946
dbaron@6470 947 <p class="note">
dbaron@6484 948 Selectors that allow addressing fragments
dbaron@6470 949 by counting from the end rather than the start
dbaron@6470 950 are intentionally not provided.
dbaron@6470 951 Such selectors would interfere with determining
dbaron@6484 952 the number of fragments.
dbaron@6470 953 </p>
dbaron@6470 954
dbaron@6489 955 <p class="issue">
dbaron@6489 956 Depending on future discussions,
dbaron@6489 957 this ''::nth-fragment(<var>an+b</var>)'' syntax
dbaron@6489 958 may be replaced with
dbaron@6489 959 the new ''::fragment:nth(<var>an+b</var>)'' syntax.
dbaron@6489 960 </p>
dbaron@6489 961
dbaron@6484 962 <h4 id="style-of-fragments">Styling of fragments</h4>
dbaron@6470 963
dbaron@6470 964 <p class="issue">
florian@15278 965 Should this apply to continue:fragments only,
florian@15278 966 or also to continue:paginate?
dbaron@6470 967 (If it applies,
dbaron@6470 968 then stricter property restrictions would be needed
florian@15278 969 for continue:paginate.)
dbaron@6470 970 </p>
dbaron@6470 971
dbaron@6470 972 <p>
dbaron@6484 973 In the absence of rules with ''::nth-fragment()'' pseudo-elements,
dbaron@15115 974 the computed style for each <a>fragment box</a>
dbaron@6470 975 is the computed style for the element
dbaron@15115 976 for which the <a>fragment box</a> was created.
dbaron@15115 977 However, the style for a <a>fragment box</a> is also influenced
dbaron@15115 978 by rules whose selector's <a>subject</a> [[!SELECT]]
dbaron@6484 979 has an ''::nth-fragment()'' pseudo-element,
dbaron@15115 980 if the 1-based number of the <a>fragment box</a> matches
dbaron@6484 981 that ''::nth-fragment()'' pseudo-element
dbaron@6484 982 and the selector (excluding the ''::nth-fragment()'' pseudo-element)
dbaron@6484 983 matches the element generating the fragments.
dbaron@6470 984 </p>
dbaron@6470 985
dbaron@6486 986 <p>
dbaron@15115 987 When determining the style of the <a>fragment box</a>,
dbaron@6486 988 these rules that match the fragment pseudo-element
dbaron@6486 989 cascade together with the rules that match the element,
dbaron@6486 990 with the fragment pseudo-element adding the specificity
dbaron@6486 991 of a pseudo-class to the specificity calculation.
dbaron@6486 992 <span class="issue">Does this need to be specified in
dbaron@6486 993 the cascading module as well?</span>
dbaron@6486 994 </p>
dbaron@6486 995
dbaron@6477 996 <div class="example">
dbaron@6477 997 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6477 998 &lt;style&gt;
dbaron@6477 999 .bouncy-columns {
florian@15278 1000 continue: fragments;
dbaron@6477 1001 width: 6em;
dbaron@6477 1002 height: 10em;
dbaron@6477 1003 float: left;
dbaron@6477 1004 margin: 1em;
dbaron@6477 1005 font: medium/1.25 Times New
dbaron@6477 1006 Roman, Times, serif;
dbaron@6477 1007 }
dbaron@6484 1008 .bouncy-columns::nth-fragment(1) {
dbaron@6477 1009 background: aqua; color: black;
dbaron@6477 1010 transform: rotate(-3deg);
dbaron@6477 1011 }
dbaron@6484 1012 .bouncy-columns::nth-fragment(2) {
dbaron@6477 1013 background: yellow; color: black;
dbaron@6477 1014 transform: rotate(3deg);
dbaron@6477 1015 }
dbaron@6477 1016 &lt;/style&gt;
dbaron@6477 1017 &lt;div class="bouncy-columns"&gt;
dbaron@6477 1018 <i>...</i>
dbaron@6477 1019 &lt;/div&gt;</pre></td><td>
dbaron@6477 1020 <div class="bouncy-columns-demo one">In this<br>example, the<br>text in the div<br>is broken into<br>a series of<br>columns. The<br>author<br>probably</div>
dbaron@6477 1021 <div class="bouncy-columns-demo two">intended the<br>text to fill two<br>columns. But<br>if it happens to<br>fill three<br>columns, the<br>third column is<br>still created. It</div>
dbaron@6484 1022 <div class="bouncy-columns-demo">just doesn't<br>have any<br>fragment-specific<br>styling because<br>the author<br>didn't give it<br>any.</div>
dbaron@6477 1023 </td></tr></table>
dbaron@6477 1024 </div>
dbaron@6477 1025
dbaron@6470 1026 <p>
florian@15278 1027 Styling an ''::nth-fragment()'' pseudo-element with the 'continue'
dbaron@6490 1028 property does take effect;
dbaron@15115 1029 if a <a>fragment box</a> has a
florian@15278 1030 computed value of 'continue' other than ''fragments''
dbaron@6490 1031 then that fragment box is the last fragment.
florian@15278 1032 However, overriding 'continue' on the first fragment
dbaron@15115 1033 does not cause the <a>fragment box</a> not to exist;
dbaron@6490 1034 whether there are fragment boxes at all is determined by
dbaron@6490 1035 the computed value of overflow for the element.
dbaron@6470 1036 </p>
dbaron@6470 1037
dbaron@6470 1038 <p>
dbaron@6485 1039 Styling an ''::nth-fragment()'' pseudo-element with the 'content'
dbaron@6485 1040 property has no effect;
dbaron@6485 1041 the computed value of 'content' for the fragment box
dbaron@6485 1042 remains the same as the computed value of content for the element.
dbaron@6485 1043 </p>
dbaron@6485 1044
dbaron@6485 1045 <p>
dbaron@15115 1046 Specifying ''display: none'' for a <a>fragment box</a> causes
dbaron@6484 1047 the fragment box with that index not to be generated.
dbaron@6470 1048 However, in terms of the indices
dbaron@6484 1049 used for matching ''::nth-fragment()'' pseudo-elements
dbaron@6484 1050 of later fragment boxes,
dbaron@6470 1051 it still counts as though it was generated.
dbaron@6470 1052 However, since it is not generated, it does not contain any content.
dbaron@6470 1053 </p>
dbaron@6470 1054
dbaron@7813 1055 <p>
dbaron@7813 1056 Specifying other values of 'display', 'position',
dbaron@7813 1057 or 'float' is permitted, but is not allowed to change
dbaron@7813 1058 the computed value of 'display-inside'.
florian@15278 1059 (Since 'continue' only
florian@15278 1060 applies to block containers, flex containers, and grid containers
dbaron@7813 1061 the computed value of 'display-inside' is always
dbaron@15115 1062 ''display-inside/block'', ''display-inside/flex'', or
dbaron@15115 1063 ''display-inside/grid''.
dbaron@7813 1064 <span class="issue">Need to specify exactly how this works,
dbaron@7813 1065 but it depends on
dbaron@7813 1066 having 'display-inside' and 'display-outside' specified.</span>
dbaron@6470 1067 </p>
dbaron@6470 1068
dbaron@6470 1069 <p>
dbaron@6470 1070 To match the model for other pseudo-elements
dbaron@6470 1071 where the pseudo-elements live inside their corresponding element,
dbaron@6484 1072 declarations in ''::nth-fragment()'' pseudo-elements override
dbaron@6470 1073 declarations in rules without the pseudo-element.
dbaron@6470 1074 The relative priority within such declarations is determined
dbaron@6470 1075 by normal cascading order (see [[!CSS21]]).
dbaron@6470 1076 </p>
dbaron@6470 1077
dbaron@6470 1078 <p>
dbaron@6484 1079 Styles specified on ''::nth-fragment()'' pseudo-elements
dbaron@15115 1080 do affect inheritance to content within the <a>fragment box</a>.
dbaron@15115 1081 In other words, the content within the <a>fragment box</a> must
dbaron@6484 1082 inherit from the fragment box's style (i.e., the pseudo-element style)
dbaron@6470 1083 rather than directly from the element.
dbaron@6484 1084 This means that elements split between fragment boxes may
dbaron@6470 1085 have different styles for different parts of the element.
dbaron@6470 1086 </p>
dbaron@6470 1087
dbaron@6472 1088 <p class="issue">
dbaron@6472 1089 This inheritance rule allows specifying styles indirectly
dbaron@6472 1090 (by using explicit ''inherit'' or using default inheritance
dbaron@15117 1091 on properties that don't apply to ''::first-letter'')
dbaron@6472 1092 that can't be specified directly
dbaron@6472 1093 (based on the rules in the next section).
dbaron@6472 1094 This is a problem.
dbaron@6484 1095 The restrictions that apply to styling inside fragments
dbaron@6484 1096 should also apply to inheritance from fragments.
dbaron@6472 1097 </p>
dbaron@6472 1098
dbaron@6480 1099 <div class="example">
dbaron@6480 1100 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6480 1101 &lt;style&gt;
dbaron@6480 1102 .article {
florian@15278 1103 continue: fragments;
dbaron@6480 1104 }
dbaron@6484 1105 .article::nth-fragment(1) {
dbaron@6480 1106 font-size: 1.5em;
dbaron@6480 1107 margin-bottom: 1em;
dbaron@6480 1108 height: 4em;
dbaron@6480 1109 }
dbaron@6491 1110 .article::nth-fragment(2) {
dbaron@6480 1111 margin-left: 5em;
dbaron@6480 1112 margin-right: 2em;
dbaron@6480 1113 }
dbaron@6480 1114 &lt;/style&gt;
dbaron@6480 1115 &lt;div class="article"&gt;
dbaron@6480 1116 The &lt;code&gt;font-size&lt;/code&gt; property<i>...</i>
dbaron@6480 1117 &lt;/div&gt;</pre></td><td>
dbaron@6484 1118 <div class="article-font-inherit-demo one">The <code>font-size</code> property<br>specified on the fragment<br>is inherited into the</div>
dbaron@6484 1119 <div class="article-font-inherit-demo two">descendants of the fragment.<br>This means that inherited<br>properties can be used<br>reliably on a fragment, as in<br>this example.</div>
dbaron@6480 1120 </td></tr></table>
dbaron@6480 1121 </div>
dbaron@6478 1122
dbaron@6484 1123 <h4 id="style-in-fragments">Styling inside fragments</h4>
dbaron@6470 1124
dbaron@6470 1125 <p class="issue">
florian@15278 1126 Should this apply to continue:fragments only,
florian@15278 1127 or also to continue:paginate?
dbaron@6470 1128 </p>
dbaron@6470 1129
dbaron@6470 1130 <p>
dbaron@6484 1131 The ''::nth-fragment()'' pseudo-element
dbaron@6470 1132 can also be used to style
dbaron@15115 1133 content inside of a <a>fragment box</a>.
dbaron@6470 1134 Unlike the ''::first-line'' and ''::first-letter'' pseudo-elements,
dbaron@6484 1135 the ''::nth-fragment()'' pseudo-element can be applied
dbaron@6470 1136 to parts of the selector other than the subject:
dbaron@6470 1137 in particular, it can match ancestors of the subject.
dbaron@6470 1138 However, the only CSS properties applied
dbaron@6470 1139 by rules with such selectors
dbaron@6470 1140 are those that apply
dbaron@6470 1141 to the ''::first-letter'' pseudo-element.
dbaron@6470 1142 </p>
dbaron@6470 1143
dbaron@6470 1144 <p>
dbaron@6470 1145 To be more precise,
dbaron@6484 1146 when a rule's selector has ''::nth-fragment()'' pseudo-elements
dbaron@6470 1147 attached to parts of the selector other than the subject,
dbaron@6470 1148 the declarations in that rule apply to
dbaron@6470 1149 a fragment (or pseudo-element thereof) when:
dbaron@6470 1150 </p>
dbaron@6470 1151 <ol>
dbaron@6470 1152 <li>
dbaron@6470 1153 the declarations are for properties that apply to the
dbaron@6470 1154 ''::first-letter'' pseudo-element,
dbaron@6470 1155 </li>
dbaron@6470 1156 <li>
dbaron@6470 1157 the declarations would apply to
dbaron@6470 1158 that fragment (or pseudo-element thereof)
dbaron@6484 1159 had those ''::nth-fragment()'' pseudo-elements been removed,
dbaron@6470 1160 with a particular association between
dbaron@6470 1161 each sequence of simple selectors and the element it matched,
dbaron@6470 1162 and
dbaron@6470 1163 </li>
dbaron@6470 1164 <li>
dbaron@6484 1165 for each removed ''::nth-fragment()'' pseudo-element,
dbaron@15115 1166 the fragment lives within a <a>fragment box</a>
dbaron@6470 1167 of the element associated in that association
dbaron@6470 1168 with the selector that the pseudo-element was attached to,
dbaron@6470 1169 and whose index matches the pseudo-element.
dbaron@6470 1170 </li>
dbaron@6470 1171 </ol>
dbaron@6470 1172
dbaron@6481 1173 <div class="example">
dbaron@6481 1174 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6481 1175 &lt;style&gt;
dbaron@6481 1176 .dark-columns {
florian@15278 1177 continue: fragments;
dbaron@6481 1178 width: 6em;
dbaron@6481 1179 height: 10em;
dbaron@6481 1180 float: left;
dbaron@6481 1181 margin-right: 1em;
dbaron@6481 1182 font: medium/1.25 Times New
dbaron@6481 1183 Roman, Times, serif;
dbaron@6481 1184 }
dbaron@6484 1185 .dark-columns::nth-fragment(1) {
dbaron@6481 1186 background: aqua; color: black;
dbaron@6481 1187 }
dbaron@6484 1188 .dark-columns::nth-fragment(1) :link {
dbaron@6481 1189 color: blue;
dbaron@6481 1190 }
dbaron@6484 1191 .dark-columns::nth-fragment(1) :visited {
dbaron@6481 1192 color: purple;
dbaron@6481 1193 }
dbaron@6484 1194 .dark-columns::nth-fragment(2) {
dbaron@6481 1195 background: navy; color: white;
dbaron@6481 1196 }
dbaron@6484 1197 .dark-columns::nth-fragment(2) :link {
dbaron@6481 1198 color: aqua;
dbaron@6481 1199 }
dbaron@6484 1200 .dark-columns::nth-fragment(2) :visited {
dbaron@6481 1201 color: fuchsia;
dbaron@6481 1202 }
dbaron@6481 1203 &lt;/style&gt;
dbaron@6481 1204 &lt;div class="dark-columns"&gt;
dbaron@6481 1205 <i>...</i>
dbaron@6481 1206 &lt;/div&gt;</pre></td><td>
dbaron@6484 1207 <div class="dark-columns-demo one">In this<br><a href="http://en.wiktionary.org/wiki/example">example</a>, the<br>text flows<br>from one<br>light-colored<br>fragment into<br>another<br>dark-colored</div>
dbaron@6484 1208 <div class="dark-columns-demo two">fragment. We<br>therefore want<br>different styles<br>for <a href="http://www.w3.org/Provider/Style/IntoContext.html">hyperlinks</a><br>in the different<br>fragments.</div>
dbaron@6481 1209 </td></tr></table>
dbaron@6481 1210 </div>
dbaron@6481 1211
dbaron@6478 1212
dbaron@6470 1213 <h3 id="max-lines">The 'max-lines' property</h3>
dbaron@6470 1214
dbaron@6470 1215 <p>
dbaron@6470 1216 Authors may wish to style the opening lines of an element
dbaron@6470 1217 with different styles
dbaron@6484 1218 by putting those opening lines in a separate fragment.
dbaron@6470 1219 However, since it may be difficult to predict the exact height
dbaron@6470 1220 occupied by those lines
dbaron@6484 1221 in order to restrict the first fragment to that height,
dbaron@6470 1222 this specification introduces a 'max-lines' property
dbaron@6484 1223 that forces a fragment to break
dbaron@6470 1224 after a specified number of lines.
dbaron@6470 1225 This forces a break after the given number of lines
dbaron@6470 1226 contained within the element or its descendants,
dbaron@6470 1227 as long as those lines are in the same block formatting context.
dbaron@6470 1228 </p>
dbaron@6470 1229
dbaron@15119 1230 <pre class=propdef>
dbaron@15119 1231 Name: max-lines
jackalmage@15301 1232 Value: ''none'' | ''&lt;integer>''
dbaron@15180 1233 Initial: ''none''
dbaron@15119 1234 Applies to: fragment boxes
dbaron@15119 1235 Inherited: no
peter@16989 1236 Animatable: as <a href="https://www.w3.org/TR/css3-transitions/#animatable-types">integer</a>
dbaron@15119 1237 Percentages: N/A
dbaron@15119 1238 Media: visual
dbaron@15119 1239 Computed value: specified value
dbaron@15119 1240 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 1241 </pre>
dbaron@6470 1242
dbaron@15115 1243 <dl dfn-for="max-lines" dfn-type="value">
dbaron@15115 1244 <dt><dfn>none</dfn>
dbaron@6470 1245 <dd>
dbaron@6470 1246 <p>
dbaron@6470 1247 Breaks occur only as specified elsewhere.
dbaron@6470 1248 </p>
dbaron@6470 1249 </dd>
dbaron@6470 1250
dbaron@15181 1251 <dt><dfn><<integer>></dfn>
dbaron@6470 1252 <dd>
dbaron@6470 1253 <p>
dbaron@6470 1254 In addition to any breaks specified elsewhere,
dbaron@6470 1255 a break is forced before any line that would exceed
dbaron@6470 1256 the given number of lines
dbaron@6470 1257 being placed inside the element
dbaron@6470 1258 (excluding lines that are in
dbaron@6470 1259 a different block formatting context from
dbaron@6470 1260 the block formatting context to which
dbaron@6470 1261 an unstyled child of the element would belong).
dbaron@6470 1262 </p>
dbaron@6470 1263
dbaron@6470 1264 <p class="issue">
dbaron@6470 1265 If there are multiple boundaries between this line
dbaron@6470 1266 and the previous, where exactly (in terms of element
dbaron@6470 1267 boundaries) is the break forced?
dbaron@6470 1268 </p>
dbaron@6470 1269
dbaron@6470 1270 <p>
dbaron@6470 1271 Only positive integers are accepted.
dbaron@6470 1272 Zero or negative integers are a parse error.
dbaron@6470 1273 </p>
dbaron@6470 1274 </dd>
dbaron@6470 1275 </dl>
dbaron@6470 1276
dbaron@6484 1277 <p class="issue">Should this apply to fragment overflow only, or also
florian@15296 1278 to pagination?
florian@15296 1279 Given what we're doing with the continue property,
florian@15296 1280 it should actually apply to any fragmentainer.</p>
florian@15296 1281
florian@15296 1282 Issue: having max-lines do nothing on regular elements is not ideal.
florian@15296 1283 When applied to non fragmentainers,
florian@15296 1284 it should probably cause 'continue' to compute to ''continue/discard''
florian@15296 1285 so that you only need to reach for one property rather than 2 to get
florian@15296 1286 that effect.
dbaron@6470 1287
dbaron@6479 1288 <div class="example">
dbaron@6479 1289 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6479 1290 &lt;style&gt;
dbaron@6479 1291 .article {
florian@15278 1292 continue: fragments;
dbaron@6479 1293 }
dbaron@6479 1294 .article::first-letter {
dbaron@6479 1295 font-size: 2em;
dbaron@6479 1296 line-height: 0.9;
dbaron@6479 1297 }
dbaron@6484 1298 .article::nth-fragment(1) {
dbaron@6479 1299 font-size: 1.5em;
dbaron@6479 1300 max-lines: 3;
dbaron@6479 1301 }
dbaron@6491 1302 .article::nth-fragment(2) {
dbaron@6479 1303 column-count: 2;
dbaron@6479 1304 }
dbaron@6479 1305 &lt;/style&gt;
dbaron@6479 1306 &lt;div class="article"&gt;
dbaron@6479 1307 <i>...</i>
dbaron@6479 1308 &lt;/div&gt;</pre></td><td>
dbaron@6479 1309 <div class="article-max-lines-demo one">The max-lines property allows<br>authors to use a larger font for the first<br>few lines of an article. Without the</div>
dbaron@6479 1310 <div class="article-max-lines-demo two">max-lines property, authors<br>might have to use the<br>'height' property instead, but<br>that would leave a slight gap<br>if the author miscalculated<br>how much height a given<br>number of lines would<br>occupy (which might be</div>
dbaron@6479 1311 <div class="article-max-lines-demo three">particularly hard if the author<br>didn't know what text would<br>be filling the space, exactly<br>what font would be used, or<br>exactly which platform's font<br>rendering would be used to<br>display the font).</div>
dbaron@6479 1312 </td></tr></table>
dbaron@6479 1313 </div>
dbaron@6478 1314
dbaron@6493 1315 <h2 id="static-media">Overflow in static media</h2>
dbaron@6493 1316
dbaron@6493 1317 <p class="issue">
dbaron@6493 1318 This specification should define useful behavior
florian@15278 1319 for all values of 'overflow' and 'continue'
dbaron@6493 1320 in static media (such as print).
dbaron@6493 1321 Current implementation behavior is quite poor and
dbaron@6493 1322 produces unexpected results when authors have not considered
dbaron@6493 1323 what will happen when
dbaron@6493 1324 the content they produce for interactive media
dbaron@6493 1325 is printed.
dbaron@6493 1326 </p>
dbaron@6493 1327
dbaron@6470 1328 <h2 class=no-num id="acknowledgments">
dbaron@6470 1329 Acknowledgments</h2>
dbaron@6470 1330
dbaron@6470 1331 <p>
dbaron@6470 1332 Thanks especially to the feedback from
dbaron@6496 1333 Rossen Atanassov,
dbaron@6496 1334 Bert Bos,
dbaron@6496 1335 Tantek Çelik,
dbaron@6496 1336 John Daggett,
dbaron@6496 1337 fantasai,
dbaron@6496 1338 Daniel Glazman,
dbaron@6496 1339 Vincent Hardy,
dbaron@6470 1340 H&aring;kon Wium Lie,
dbaron@6496 1341 Peter Linss,
dbaron@7815 1342 Robert O'Callahan,
dbaron@6470 1343 Florian Rivoal,
dbaron@6473 1344 Alan Stearns,
dbaron@6496 1345 Steve Zilles,
dbaron@6470 1346 and all the rest of the
dbaron@6470 1347 <a href="http://lists.w3.org/Archives/Public/www-style/">www-style</a> community.
dbaron@6470 1348 </p>

mercurial