css-overflow/Overview.bs

Sat, 14 Jan 2017 00:10:44 -0800

author
Florian Rivoal <[email protected]>
date
Sat, 14 Jan 2017 00:10:44 -0800
changeset 18674
dc1f0ffba654
parent 18647
d577d0a1ba38
child 18680
078265332f8e
permissions
-rw-r--r--

Update personal info

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
florian@15277 481
florian@15277 482 <p class="issue">
florian@15277 483 [[CSS3-MARQUEE]] describes an 'overflow-style' property,
florian@15277 484 but it has not picked up implementation experience
florian@15277 485 that the working group is aware of.
florian@15277 486 Should this document treat 'overflow-style' as a defunct proposal,
florian@15277 487 or should this document describe the 'overflow-style' property
florian@15277 488 and attempt to revive it,
florian@15277 489 despite that implementations have implemented
florian@15277 490 'overflow-x' and 'overflow-y' instead?
florian@15277 491 </p>
florian@15277 492
florian@15278 493 <h2 id="fragmentation">Fragmentation of overflow</h2>
florian@15277 494
florian@15279 495 The 'continue' property gives authors the ability
florian@15279 496 to request that content that does not fit inside an element
florian@15279 497 be fragmented (in the sense of [[!CSS3-BREAK]]),
florian@15279 498 and provides alternatives
florian@15279 499 for where the remaining content should continue.
florian@15279 500
florian@15279 501 Notably, this property explains traditional pagination,
florian@15279 502 and extends it further.
florian@15279 503
florian@15278 504 <pre class=propdef>
florian@15278 505 Name: continue
jackalmage@15301 506 Value: ''auto'' | ''overflow'' | ''paginate'' | ''fragments'' | ''discard''
florian@15293 507 Initial: auto
florian@15278 508 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
florian@15278 509 Inherited: no
florian@15278 510 Percentages: N/A
florian@15278 511 Media: visual
florian@15278 512 Computed value: see below
florian@15278 513 Animatable: no
florian@15278 514 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
florian@15278 515 </pre>
florian@15277 516
florian@15282 517 Issue: The naming of this property and its values is preliminary.
florian@15282 518 This was initially proposed as
florian@15282 519 "fragmentation: auto | none | break | clone | page"
florian@15282 520 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 521 and there is not yet wide agreement as to which naming is better.
florian@15277 522
florian@15284 523 Issue: This property is meant to generalize and replace 'region-fragment'.
florian@15284 524 Once it is sufficiently stable in this specification,
florian@15284 525 'region-fragment' should be removed from the regions specification in favor of this.
florian@15284 526
florian@15278 527 Note: ''continue: fragments'' replaces "overflow:fragments"
florian@15278 528 from earlier versions of this specification,
florian@15278 529 while ''continue: paginate'' replaces "overflow: paged-x | paged-y | paged-x-controls | paged-y-controls"
florian@15277 530
florian@15278 531 <dl dfn-for="continue" dfn-type="value">
florian@15293 532 <dt><dfn>auto</dfn>
florian@15293 533 <dd>''continue/auto'' may only occur as a computed value
florian@15279 534 if the element is a <a spec="css-regions">CSS Region</a>
florian@15293 535 other than the last one in a <a spec="css-regions">region chain</a>.
florian@15293 536 Content that doesn't fit is pushed to the next region of the chain.
florian@15293 537
florian@15293 538 In all other cases, ''continue/auto'' computes to one of the other values.
florian@15278 539
florian@15278 540 <dt><dfn>overflow</dfn>
florian@15278 541 <dd>Content that doesn't fit overflows, according to the 'overflow' property
florian@15278 542
florian@15278 543 <dt><dfn>discard</dfn>
florian@15278 544 <dd>Content that doesn't fit is discarded at a fragmentation break
florian@15278 545
florian@15278 546 Note: generalized from region-fragment: break; on the last region of a region chain
florian@15278 547
florian@15279 548 Issue: When the element isn't a <a spec="css-break">fragmentation container</a> already,
florian@15279 549 should this work by turning it directly into one,
florian@15279 550 or by creating a <a>fragment box</a> inside it like ''continue/fragments'' does?
florian@15278 551
florian@15278 552 <dt><dfn>paginate</dfn>
florian@15278 553 <dd>Content that doesn't fit paginates.
florian@15278 554 This creates a paginated view inside the element
florian@15278 555 similar to the way that 'overflow: scroll' creates a scrollable view.
florian@15278 556
florian@15279 557 See <a href="#paginated-overflow">paginated overflow</a>
florian@15278 558
florian@15278 559 Note: Print is effectively "continue: paginate" on the root.
dbaron@7811 560 <dt><dfn>fragments</dfn>
florian@15278 561 <dd>content that doesn't fit causes the element to copy itself and continue laying out.
florian@15279 562
florian@15278 563 See <a href="#fragment-overflow">fragment overflow</a>.
dbaron@7811 564 </dl>
dbaron@7811 565
florian@15279 566 The computed value of the 'continue' for a given element or pseudo element is determined as follow:
florian@15279 567 <ol>
florian@15293 568 <li>If the specified value is ''continue/auto''
florian@15279 569 <ol>
florian@15279 570 <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 571 the computed value is ''continue/auto''
florian@15279 572 <li>On a page
florian@15279 573 the computed value is ''continue/paginate''
florian@15279 574 <li>On a <a>fragment box</a>
florian@15279 575 the computed value is ''continue/fragments''
florian@15283 576 <li>Otherwise, the computed value is ''continue/overflow''
florian@15279 577 </ol>
florian@15279 578 <li>If the specified value is ''continue/framgents''
florian@15279 579 <ol>
florian@15279 580 <li>On a page
florian@15279 581 the computed value is ''continue/paginate''
florian@15279 582 <li>Otherwise, the computed value is the specified value
florian@15279 583 </ol>
florian@15279 584 <li>In all other cases, the computed value is the specified value
florian@15279 585 </ol>
florian@15279 586
florian@15280 587 Issue: If we introduce a pseudo element that can select columns in a multicol,
florian@15293 588 we would need to specify that auto computes to auto on it,
florian@15293 589 or introduce a new value and have auto compute to that
florian@15280 590 (but what would that value compute to on things that aren't columns?).
florian@15280 591
florian@15278 592 Note: For background discussions leading to this property, see these threads:
florian@15278 593 <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 594 <a href="https://lists.w3.org/Archives/Public/www-style/2015Jan/0357.html">proposal for a fragmentation property</a>
dbaron@14821 595
dbaron@6470 596 <h2 id="paginated-overflow">Paginated overflow</h2>
dbaron@6470 597
florian@15278 598 This section introduces and defines the meaning of the ''continue/paginate'' value of the 'continue' property.
dbaron@6470 599
florian@15278 600 Issue: Write this section
florian@15278 601
florian@15281 602 Issue: Pages should be possible to style with @page rules. How does that work for nested pages?
florian@15281 603
florian@15281 604 <div class="issue">
florian@15281 605 Should traditional pagination (e.g. when printing)
florian@15293 606 be expressed through some magic in the computed value of ''continue/auto'',
florian@15281 607 or by inserting this in the UA stylesheet:
florian@15281 608 <pre><code class="lang-css">
florian@15281 609 @media (overflow-block: paged), (overflow-block: optional-paged) {
florian@15281 610 :root {
florian@15281 611 continue: paginate;
florian@15281 612 }
florian@15281 613 }
florian@15281 614 </code></pre>
florian@15281 615 </div>
florian@15281 616
florian@15281 617 Issue: Traditional pagination (e.g. when printing) assumes that
florian@15281 618 :root is contained in the page box,
florian@15281 619 rather than having the page box be a pseudo element child of :root.
florian@15281 620 Can we work around that using something similar to fragment boxes?
florian@15281 621 Or maybe by having a fragment box (reproducing :root) inside a page box inside :root?
florian@15281 622
florian@15281 623 Issue: How does the page box model work when it is a child of a regular css box?
florian@15281 624
florian@15278 625 Issue: The initial proposal in [[CSS3GCPM]] and implemantation from Opera
florian@15278 626 used 4 values instead of ''continue/paginate'':
florian@15278 627 "paged-x | paged-y | paged-x-controls | paged-y-controls".
florian@15278 628 Should this property also include these values,
florian@15278 629 or are they better handled as separate properties?
florian@15278 630 (e.g.: "pagination-layout: auto | horizontal | vertical", "pagination-controls: auto | none")
florian@15278 631
florian@15278 632 Issue: Ability to display N pages at once
florian@15278 633 rather than just one page at once?
florian@15278 634 Could this be a value of "pagination-layout", such as:
florian@15278 635 "pagination-layout: horizontal 2;"
dbaron@6470 636
florian@15303 637 Issue: Brad Kemper has proposed a model for combining pagination and
florian@15303 638 fragment overflow, which also deals with displaying multiple pages.
florian@15303 639 <a href="http://www.w3.org/mid/[email protected]">http://www.w3.org/mid/[email protected]</a>
florian@15303 640
dbaron@6497 641 <p class="issue">
dbaron@6497 642 The current implementation of paginated overflow uses
dbaron@6497 643 the 'overflow'/'overflow-x'/'overflow-y' properties
dbaron@6497 644 rather than the 'overflow-style' property as proposed
dbaron@6497 645 in the [[CSS3GCPM]] draft
dbaron@6497 646 (which also matches the [[CSS3-MARQUEE]] proposal).
florian@15278 647 or the 'continue' property as described here.
dbaron@6497 648 </p>
dbaron@6497 649
dbaron@6484 650 <h2 id="fragment-overflow">Fragment overflow</h2>
dbaron@6470 651
florian@15278 652 This section introduces and defines the meaning of
florian@15278 653 the ''continue/fragments'' value of the 'continue' property.
dbaron@6470 654
dbaron@6470 655 <p>
florian@15278 656 When the computed value of 'continue' for an element is ''continue/fragments'',
dbaron@6470 657 and implementations would otherwise have created a box for the element,
dbaron@6491 658 then implementations must create a sequence of <dfn>fragment box</dfn>es
dbaron@6470 659 for that element.
florian@15278 660 (It is possible for an element with ''continue: fragments''
dbaron@15115 661 to generate only one <a>fragment box</a>.
florian@15278 662 However, if an element's computed 'continue' is not ''continue/fragments'',
dbaron@15115 663 then its box is not a <a>fragment box</a>.)
dbaron@15115 664 Every <a>fragment box</a> is a fragmentation container,
dbaron@6491 665 and any overflow
dbaron@6491 666 that would cause that fragmentation container to fragment
dbaron@15115 667 causes another <a>fragment box</a> created as a next sibling
dbaron@6470 668 of the previous one.
dbaron@6470 669 <span class="issue">Or is it as though it's a next sibling of
dbaron@6470 670 the element? Need to figure out exactly how this interacts with
dbaron@6470 671 other box-level fixup.</span>
dbaron@15115 672 Additionally, if the <a>fragment box</a> is also
dbaron@6492 673 a multi-column box (as defined in [[!CSS3COL]]
dbaron@6492 674 <span class="issue">though it defines <i>multi-column element</i></span>)
dbaron@15115 675 any content that would lead to the creation of <a>overflow columns</a> [[!CSS3COL]]
dbaron@6492 676 instead is flown into an additional fragment box.
dbaron@6491 677 However, fragment boxes may themselves be broken
dbaron@6491 678 (due to fragmentation in a fragmentation context outside of them,
dbaron@6491 679 such as pages, columns, or other fragment boxes);
dbaron@6491 680 such breaking leads to fragments of the same fragment box
dbaron@6491 681 rather than multiple fragment boxes.
dbaron@6491 682 (This matters because fragment boxes may be styled by their index;
dbaron@6491 683 such breaking leads to multiple fragments of a fragment box
dbaron@6491 684 with a single index.
dbaron@6491 685 This design choice is so that
dbaron@6491 686 breaking a fragment box across pages does not break
dbaron@6491 687 the association of indices to particular pieces of content.)
dbaron@6491 688 <span class="issue">Should a forced break that breaks to
dbaron@6491 689 an outer fragmentation context cause a new fragment of a single
dbaron@6491 690 fragment box or a new fragment box?</span>
dbaron@6491 691 <span class="issue">Should we find a term other than
dbaron@15115 692 <a>fragment box</a> here to make this a little less confusing?</span>
dbaron@6470 693 </p>
dbaron@6470 694
dbaron@6470 695 <p class="issue">
dbaron@6491 696 What if we want to be able to style the pieces of an element
dbaron@6491 697 split within another type of fragmentation context?
dbaron@6491 698 These rules prevent ever using ''::nth-fragment()'' for that,
dbaron@6491 699 despite that the name seems the most logical name for such a feature.
dbaron@6470 700 </p>
dbaron@6470 701
dbaron@6475 702 <div class="example">
dbaron@6477 703 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6475 704 &lt;title&gt;Breaking content into
dbaron@6475 705 equal-sized cards&lt;/title&gt;
dbaron@6475 706 &lt;style&gt;
dbaron@6475 707 .in-cards {
florian@15278 708 continue: fragments;
dbaron@6475 709
dbaron@6475 710 width: 13em;
dbaron@6475 711 height: 8em;
dbaron@6475 712
dbaron@6475 713 padding: 4px;
dbaron@6475 714 border: medium solid blue;
dbaron@6475 715 margin: 6px;
dbaron@6475 716
dbaron@6475 717 font: medium/1.3 Times New
dbaron@6475 718 Roman, Times, serif;
dbaron@6475 719 }
dbaron@6475 720 &lt;/style&gt;
dbaron@6475 721 &lt;div class="in-cards"&gt;
dbaron@6475 722 In this example, the text in the div
dbaron@6475 723 is broken into a series of cards.
dbaron@6475 724 These cards all have the same style.
dbaron@6475 725 The presence of enough content to
dbaron@6475 726 overflow one of the cards causes
dbaron@6475 727 another one to be created. The second
dbaron@6475 728 card is created just like it's the
dbaron@6475 729 next sibling of the first.
dbaron@6477 730 &lt;/div&gt;</pre></td><td>
dbaron@6475 731 <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 732 <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 733 </td></tr></table>
dbaron@6475 734 </div>
dbaron@6475 735
dbaron@6487 736 <p class="issue">
florian@15278 737 We should specify that ''continue: fragments'' does not apply
dbaron@6487 738 to at least some table parts,
dbaron@6487 739 and perhaps other elements as well.
dbaron@6487 740 We need to determine exactly which ones.
dbaron@6487 741 </p>
dbaron@6487 742
dbaron@6488 743 <p class="issue">
dbaron@6488 744 This specification needs to say which type of
dbaron@6488 745 fragmentation context is created
dbaron@15113 746 so that it's clear which values of the 'break-*' properties
dbaron@6488 747 cause breaks within this context.
dbaron@15113 748 We probably want ''break-*: region'' to apply.
dbaron@6488 749 </p>
dbaron@6488 750
dbaron@6494 751 <p class="issue">
dbaron@6494 752 This specification needs a processing model
dbaron@6494 753 that will apply in cases where the layout containing the
dbaron@6494 754 fragments has characteristics that use the intrinsic size of the fragments
dbaron@6494 755 to change the amount of space available for them,
dbaron@6494 756 such as [[CSS3-GRID-LAYOUT]].
dbaron@6494 757 There has already been some work on such a processing model
dbaron@6494 758 in [[CSS3-REGIONS]],
dbaron@6494 759 and the work done on a model there,
dbaron@6494 760 and the editors of that specification,
dbaron@6494 761 should inform what happens in this specification.
dbaron@6494 762 </p>
dbaron@6494 763
dbaron@6484 764 <h3 id="fragment-styling">Fragment styling</h3>
dbaron@6470 765
dbaron@6484 766 <h4 id="fragment-pseudo-element">The ::nth-fragment() pseudo-element</h4>
dbaron@6470 767
dbaron@6470 768 <p>
dbaron@15120 769 The <dfn selector>::nth-fragment()</dfn> pseudo-element
dbaron@15120 770 is a pseudo-element
dbaron@15115 771 that describes some of the <a>fragment box</a>es generated by an element.
dbaron@6470 772 The argument to the pseudo-element takes the same syntax
dbaron@6470 773 as the argument to the :nth-child() pseudo-class
dbaron@6470 774 defined in [[!SELECT]], and has the same meaning
dbaron@6470 775 except that the number is relative to
dbaron@15115 776 <a>fragment box</a>es generated by the element
dbaron@6470 777 instead of siblings of the element.
dbaron@6470 778 </p>
dbaron@6470 779
dbaron@6470 780 <p class="note">
dbaron@6484 781 Selectors that allow addressing fragments
dbaron@6470 782 by counting from the end rather than the start
dbaron@6470 783 are intentionally not provided.
dbaron@6470 784 Such selectors would interfere with determining
dbaron@6484 785 the number of fragments.
dbaron@6470 786 </p>
dbaron@6470 787
dbaron@6489 788 <p class="issue">
dbaron@6489 789 Depending on future discussions,
dbaron@6489 790 this ''::nth-fragment(<var>an+b</var>)'' syntax
dbaron@6489 791 may be replaced with
dbaron@6489 792 the new ''::fragment:nth(<var>an+b</var>)'' syntax.
dbaron@6489 793 </p>
dbaron@6489 794
dbaron@6484 795 <h4 id="style-of-fragments">Styling of fragments</h4>
dbaron@6470 796
dbaron@6470 797 <p class="issue">
florian@15278 798 Should this apply to continue:fragments only,
florian@15278 799 or also to continue:paginate?
dbaron@6470 800 (If it applies,
dbaron@6470 801 then stricter property restrictions would be needed
florian@15278 802 for continue:paginate.)
dbaron@6470 803 </p>
dbaron@6470 804
dbaron@6470 805 <p>
dbaron@6484 806 In the absence of rules with ''::nth-fragment()'' pseudo-elements,
dbaron@15115 807 the computed style for each <a>fragment box</a>
dbaron@6470 808 is the computed style for the element
dbaron@15115 809 for which the <a>fragment box</a> was created.
dbaron@15115 810 However, the style for a <a>fragment box</a> is also influenced
dbaron@15115 811 by rules whose selector's <a>subject</a> [[!SELECT]]
dbaron@6484 812 has an ''::nth-fragment()'' pseudo-element,
dbaron@15115 813 if the 1-based number of the <a>fragment box</a> matches
dbaron@6484 814 that ''::nth-fragment()'' pseudo-element
dbaron@6484 815 and the selector (excluding the ''::nth-fragment()'' pseudo-element)
dbaron@6484 816 matches the element generating the fragments.
dbaron@6470 817 </p>
dbaron@6470 818
dbaron@6486 819 <p>
dbaron@15115 820 When determining the style of the <a>fragment box</a>,
dbaron@6486 821 these rules that match the fragment pseudo-element
dbaron@6486 822 cascade together with the rules that match the element,
dbaron@6486 823 with the fragment pseudo-element adding the specificity
dbaron@6486 824 of a pseudo-class to the specificity calculation.
dbaron@6486 825 <span class="issue">Does this need to be specified in
dbaron@6486 826 the cascading module as well?</span>
dbaron@6486 827 </p>
dbaron@6486 828
dbaron@6477 829 <div class="example">
dbaron@6477 830 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6477 831 &lt;style&gt;
dbaron@6477 832 .bouncy-columns {
florian@15278 833 continue: fragments;
dbaron@6477 834 width: 6em;
dbaron@6477 835 height: 10em;
dbaron@6477 836 float: left;
dbaron@6477 837 margin: 1em;
dbaron@6477 838 font: medium/1.25 Times New
dbaron@6477 839 Roman, Times, serif;
dbaron@6477 840 }
dbaron@6484 841 .bouncy-columns::nth-fragment(1) {
dbaron@6477 842 background: aqua; color: black;
dbaron@6477 843 transform: rotate(-3deg);
dbaron@6477 844 }
dbaron@6484 845 .bouncy-columns::nth-fragment(2) {
dbaron@6477 846 background: yellow; color: black;
dbaron@6477 847 transform: rotate(3deg);
dbaron@6477 848 }
dbaron@6477 849 &lt;/style&gt;
dbaron@6477 850 &lt;div class="bouncy-columns"&gt;
dbaron@6477 851 <i>...</i>
dbaron@6477 852 &lt;/div&gt;</pre></td><td>
dbaron@6477 853 <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 854 <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 855 <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 856 </td></tr></table>
dbaron@6477 857 </div>
dbaron@6477 858
dbaron@6470 859 <p>
florian@15278 860 Styling an ''::nth-fragment()'' pseudo-element with the 'continue'
dbaron@6490 861 property does take effect;
dbaron@15115 862 if a <a>fragment box</a> has a
florian@15278 863 computed value of 'continue' other than ''fragments''
dbaron@6490 864 then that fragment box is the last fragment.
florian@15278 865 However, overriding 'continue' on the first fragment
dbaron@15115 866 does not cause the <a>fragment box</a> not to exist;
dbaron@6490 867 whether there are fragment boxes at all is determined by
dbaron@6490 868 the computed value of overflow for the element.
dbaron@6470 869 </p>
dbaron@6470 870
dbaron@6470 871 <p>
dbaron@6485 872 Styling an ''::nth-fragment()'' pseudo-element with the 'content'
dbaron@6485 873 property has no effect;
dbaron@6485 874 the computed value of 'content' for the fragment box
dbaron@6485 875 remains the same as the computed value of content for the element.
dbaron@6485 876 </p>
dbaron@6485 877
dbaron@6485 878 <p>
dbaron@15115 879 Specifying ''display: none'' for a <a>fragment box</a> causes
dbaron@6484 880 the fragment box with that index not to be generated.
dbaron@6470 881 However, in terms of the indices
dbaron@6484 882 used for matching ''::nth-fragment()'' pseudo-elements
dbaron@6484 883 of later fragment boxes,
dbaron@6470 884 it still counts as though it was generated.
dbaron@6470 885 However, since it is not generated, it does not contain any content.
dbaron@6470 886 </p>
dbaron@6470 887
dbaron@7813 888 <p>
dbaron@7813 889 Specifying other values of 'display', 'position',
dbaron@7813 890 or 'float' is permitted, but is not allowed to change
dbaron@7813 891 the computed value of 'display-inside'.
florian@15278 892 (Since 'continue' only
florian@15278 893 applies to block containers, flex containers, and grid containers
dbaron@7813 894 the computed value of 'display-inside' is always
dbaron@15115 895 ''display-inside/block'', ''display-inside/flex'', or
dbaron@15115 896 ''display-inside/grid''.
dbaron@7813 897 <span class="issue">Need to specify exactly how this works,
dbaron@7813 898 but it depends on
dbaron@7813 899 having 'display-inside' and 'display-outside' specified.</span>
dbaron@6470 900 </p>
dbaron@6470 901
dbaron@6470 902 <p>
dbaron@6470 903 To match the model for other pseudo-elements
dbaron@6470 904 where the pseudo-elements live inside their corresponding element,
dbaron@6484 905 declarations in ''::nth-fragment()'' pseudo-elements override
dbaron@6470 906 declarations in rules without the pseudo-element.
dbaron@6470 907 The relative priority within such declarations is determined
dbaron@6470 908 by normal cascading order (see [[!CSS21]]).
dbaron@6470 909 </p>
dbaron@6470 910
dbaron@6470 911 <p>
dbaron@6484 912 Styles specified on ''::nth-fragment()'' pseudo-elements
dbaron@15115 913 do affect inheritance to content within the <a>fragment box</a>.
dbaron@15115 914 In other words, the content within the <a>fragment box</a> must
dbaron@6484 915 inherit from the fragment box's style (i.e., the pseudo-element style)
dbaron@6470 916 rather than directly from the element.
dbaron@6484 917 This means that elements split between fragment boxes may
dbaron@6470 918 have different styles for different parts of the element.
dbaron@6470 919 </p>
dbaron@6470 920
dbaron@6472 921 <p class="issue">
dbaron@6472 922 This inheritance rule allows specifying styles indirectly
dbaron@6472 923 (by using explicit ''inherit'' or using default inheritance
dbaron@15117 924 on properties that don't apply to ''::first-letter'')
dbaron@6472 925 that can't be specified directly
dbaron@6472 926 (based on the rules in the next section).
dbaron@6472 927 This is a problem.
dbaron@6484 928 The restrictions that apply to styling inside fragments
dbaron@6484 929 should also apply to inheritance from fragments.
dbaron@6472 930 </p>
dbaron@6472 931
dbaron@6480 932 <div class="example">
dbaron@6480 933 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6480 934 &lt;style&gt;
dbaron@6480 935 .article {
florian@15278 936 continue: fragments;
dbaron@6480 937 }
dbaron@6484 938 .article::nth-fragment(1) {
dbaron@6480 939 font-size: 1.5em;
dbaron@6480 940 margin-bottom: 1em;
dbaron@6480 941 height: 4em;
dbaron@6480 942 }
dbaron@6491 943 .article::nth-fragment(2) {
dbaron@6480 944 margin-left: 5em;
dbaron@6480 945 margin-right: 2em;
dbaron@6480 946 }
dbaron@6480 947 &lt;/style&gt;
dbaron@6480 948 &lt;div class="article"&gt;
dbaron@6480 949 The &lt;code&gt;font-size&lt;/code&gt; property<i>...</i>
dbaron@6480 950 &lt;/div&gt;</pre></td><td>
dbaron@6484 951 <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 952 <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 953 </td></tr></table>
dbaron@6480 954 </div>
dbaron@6478 955
dbaron@6484 956 <h4 id="style-in-fragments">Styling inside fragments</h4>
dbaron@6470 957
dbaron@6470 958 <p class="issue">
florian@15278 959 Should this apply to continue:fragments only,
florian@15278 960 or also to continue:paginate?
dbaron@6470 961 </p>
dbaron@6470 962
dbaron@6470 963 <p>
dbaron@6484 964 The ''::nth-fragment()'' pseudo-element
dbaron@6470 965 can also be used to style
dbaron@15115 966 content inside of a <a>fragment box</a>.
dbaron@6470 967 Unlike the ''::first-line'' and ''::first-letter'' pseudo-elements,
dbaron@6484 968 the ''::nth-fragment()'' pseudo-element can be applied
dbaron@6470 969 to parts of the selector other than the subject:
dbaron@6470 970 in particular, it can match ancestors of the subject.
dbaron@6470 971 However, the only CSS properties applied
dbaron@6470 972 by rules with such selectors
dbaron@6470 973 are those that apply
dbaron@6470 974 to the ''::first-letter'' pseudo-element.
dbaron@6470 975 </p>
dbaron@6470 976
dbaron@6470 977 <p>
dbaron@6470 978 To be more precise,
dbaron@6484 979 when a rule's selector has ''::nth-fragment()'' pseudo-elements
dbaron@6470 980 attached to parts of the selector other than the subject,
dbaron@6470 981 the declarations in that rule apply to
dbaron@6470 982 a fragment (or pseudo-element thereof) when:
dbaron@6470 983 </p>
dbaron@6470 984 <ol>
dbaron@6470 985 <li>
dbaron@6470 986 the declarations are for properties that apply to the
dbaron@6470 987 ''::first-letter'' pseudo-element,
dbaron@6470 988 </li>
dbaron@6470 989 <li>
dbaron@6470 990 the declarations would apply to
dbaron@6470 991 that fragment (or pseudo-element thereof)
dbaron@6484 992 had those ''::nth-fragment()'' pseudo-elements been removed,
dbaron@6470 993 with a particular association between
dbaron@6470 994 each sequence of simple selectors and the element it matched,
dbaron@6470 995 and
dbaron@6470 996 </li>
dbaron@6470 997 <li>
dbaron@6484 998 for each removed ''::nth-fragment()'' pseudo-element,
dbaron@15115 999 the fragment lives within a <a>fragment box</a>
dbaron@6470 1000 of the element associated in that association
dbaron@6470 1001 with the selector that the pseudo-element was attached to,
dbaron@6470 1002 and whose index matches the pseudo-element.
dbaron@6470 1003 </li>
dbaron@6470 1004 </ol>
dbaron@6470 1005
dbaron@6481 1006 <div class="example">
dbaron@6481 1007 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6481 1008 &lt;style&gt;
dbaron@6481 1009 .dark-columns {
florian@15278 1010 continue: fragments;
dbaron@6481 1011 width: 6em;
dbaron@6481 1012 height: 10em;
dbaron@6481 1013 float: left;
dbaron@6481 1014 margin-right: 1em;
dbaron@6481 1015 font: medium/1.25 Times New
dbaron@6481 1016 Roman, Times, serif;
dbaron@6481 1017 }
dbaron@6484 1018 .dark-columns::nth-fragment(1) {
dbaron@6481 1019 background: aqua; color: black;
dbaron@6481 1020 }
dbaron@6484 1021 .dark-columns::nth-fragment(1) :link {
dbaron@6481 1022 color: blue;
dbaron@6481 1023 }
dbaron@6484 1024 .dark-columns::nth-fragment(1) :visited {
dbaron@6481 1025 color: purple;
dbaron@6481 1026 }
dbaron@6484 1027 .dark-columns::nth-fragment(2) {
dbaron@6481 1028 background: navy; color: white;
dbaron@6481 1029 }
dbaron@6484 1030 .dark-columns::nth-fragment(2) :link {
dbaron@6481 1031 color: aqua;
dbaron@6481 1032 }
dbaron@6484 1033 .dark-columns::nth-fragment(2) :visited {
dbaron@6481 1034 color: fuchsia;
dbaron@6481 1035 }
dbaron@6481 1036 &lt;/style&gt;
dbaron@6481 1037 &lt;div class="dark-columns"&gt;
dbaron@6481 1038 <i>...</i>
dbaron@6481 1039 &lt;/div&gt;</pre></td><td>
dbaron@6484 1040 <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 1041 <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 1042 </td></tr></table>
dbaron@6481 1043 </div>
dbaron@6481 1044
dbaron@6478 1045
dbaron@6470 1046 <h3 id="max-lines">The 'max-lines' property</h3>
dbaron@6470 1047
dbaron@6470 1048 <p>
dbaron@6470 1049 Authors may wish to style the opening lines of an element
dbaron@6470 1050 with different styles
dbaron@6484 1051 by putting those opening lines in a separate fragment.
dbaron@6470 1052 However, since it may be difficult to predict the exact height
dbaron@6470 1053 occupied by those lines
dbaron@6484 1054 in order to restrict the first fragment to that height,
dbaron@6470 1055 this specification introduces a 'max-lines' property
dbaron@6484 1056 that forces a fragment to break
dbaron@6470 1057 after a specified number of lines.
dbaron@6470 1058 This forces a break after the given number of lines
dbaron@6470 1059 contained within the element or its descendants,
dbaron@6470 1060 as long as those lines are in the same block formatting context.
dbaron@6470 1061 </p>
dbaron@6470 1062
dbaron@15119 1063 <pre class=propdef>
dbaron@15119 1064 Name: max-lines
jackalmage@15301 1065 Value: ''none'' | ''&lt;integer>''
dbaron@15180 1066 Initial: ''none''
dbaron@15119 1067 Applies to: fragment boxes
dbaron@15119 1068 Inherited: no
peter@16989 1069 Animatable: as <a href="https://www.w3.org/TR/css3-transitions/#animatable-types">integer</a>
dbaron@15119 1070 Percentages: N/A
dbaron@15119 1071 Media: visual
dbaron@15119 1072 Computed value: specified value
dbaron@15119 1073 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 1074 </pre>
dbaron@6470 1075
dbaron@15115 1076 <dl dfn-for="max-lines" dfn-type="value">
dbaron@15115 1077 <dt><dfn>none</dfn>
dbaron@6470 1078 <dd>
dbaron@6470 1079 <p>
dbaron@6470 1080 Breaks occur only as specified elsewhere.
dbaron@6470 1081 </p>
dbaron@6470 1082 </dd>
dbaron@6470 1083
dbaron@15181 1084 <dt><dfn><<integer>></dfn>
dbaron@6470 1085 <dd>
dbaron@6470 1086 <p>
dbaron@6470 1087 In addition to any breaks specified elsewhere,
dbaron@6470 1088 a break is forced before any line that would exceed
dbaron@6470 1089 the given number of lines
dbaron@6470 1090 being placed inside the element
dbaron@6470 1091 (excluding lines that are in
dbaron@6470 1092 a different block formatting context from
dbaron@6470 1093 the block formatting context to which
dbaron@6470 1094 an unstyled child of the element would belong).
dbaron@6470 1095 </p>
dbaron@6470 1096
dbaron@6470 1097 <p class="issue">
dbaron@6470 1098 If there are multiple boundaries between this line
dbaron@6470 1099 and the previous, where exactly (in terms of element
dbaron@6470 1100 boundaries) is the break forced?
dbaron@6470 1101 </p>
dbaron@6470 1102
dbaron@6470 1103 <p>
dbaron@6470 1104 Only positive integers are accepted.
dbaron@6470 1105 Zero or negative integers are a parse error.
dbaron@6470 1106 </p>
dbaron@6470 1107 </dd>
dbaron@6470 1108 </dl>
dbaron@6470 1109
dbaron@6484 1110 <p class="issue">Should this apply to fragment overflow only, or also
florian@15296 1111 to pagination?
florian@15296 1112 Given what we're doing with the continue property,
florian@15296 1113 it should actually apply to any fragmentainer.</p>
florian@15296 1114
florian@15296 1115 Issue: having max-lines do nothing on regular elements is not ideal.
florian@15296 1116 When applied to non fragmentainers,
florian@15296 1117 it should probably cause 'continue' to compute to ''continue/discard''
florian@15296 1118 so that you only need to reach for one property rather than 2 to get
florian@15296 1119 that effect.
dbaron@6470 1120
dbaron@6479 1121 <div class="example">
dbaron@6479 1122 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6479 1123 &lt;style&gt;
dbaron@6479 1124 .article {
florian@15278 1125 continue: fragments;
dbaron@6479 1126 }
dbaron@6479 1127 .article::first-letter {
dbaron@6479 1128 font-size: 2em;
dbaron@6479 1129 line-height: 0.9;
dbaron@6479 1130 }
dbaron@6484 1131 .article::nth-fragment(1) {
dbaron@6479 1132 font-size: 1.5em;
dbaron@6479 1133 max-lines: 3;
dbaron@6479 1134 }
dbaron@6491 1135 .article::nth-fragment(2) {
dbaron@6479 1136 column-count: 2;
dbaron@6479 1137 }
dbaron@6479 1138 &lt;/style&gt;
dbaron@6479 1139 &lt;div class="article"&gt;
dbaron@6479 1140 <i>...</i>
dbaron@6479 1141 &lt;/div&gt;</pre></td><td>
dbaron@6479 1142 <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 1143 <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 1144 <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 1145 </td></tr></table>
dbaron@6479 1146 </div>
dbaron@6478 1147
dbaron@6493 1148 <h2 id="static-media">Overflow in static media</h2>
dbaron@6493 1149
dbaron@6493 1150 <p class="issue">
dbaron@6493 1151 This specification should define useful behavior
florian@15278 1152 for all values of 'overflow' and 'continue'
dbaron@6493 1153 in static media (such as print).
dbaron@6493 1154 Current implementation behavior is quite poor and
dbaron@6493 1155 produces unexpected results when authors have not considered
dbaron@6493 1156 what will happen when
dbaron@6493 1157 the content they produce for interactive media
dbaron@6493 1158 is printed.
dbaron@6493 1159 </p>
dbaron@6493 1160
dbaron@6470 1161 <h2 class=no-num id="acknowledgments">
dbaron@6470 1162 Acknowledgments</h2>
dbaron@6470 1163
dbaron@6470 1164 <p>
dbaron@6470 1165 Thanks especially to the feedback from
dbaron@6496 1166 Rossen Atanassov,
dbaron@6496 1167 Bert Bos,
dbaron@6496 1168 Tantek Çelik,
dbaron@6496 1169 John Daggett,
dbaron@6496 1170 fantasai,
dbaron@6496 1171 Daniel Glazman,
dbaron@6496 1172 Vincent Hardy,
dbaron@6470 1173 H&aring;kon Wium Lie,
dbaron@6496 1174 Peter Linss,
dbaron@7815 1175 Robert O'Callahan,
dbaron@6470 1176 Florian Rivoal,
dbaron@6473 1177 Alan Stearns,
dbaron@6496 1178 Steve Zilles,
dbaron@6470 1179 and all the rest of the
dbaron@6470 1180 <a href="http://lists.w3.org/Archives/Public/www-style/">www-style</a> community.
dbaron@6470 1181 </p>

mercurial