css-overflow/Overview.bs

Sun, 08 Feb 2015 17:10:32 +1100

author
L. David Baron <[email protected]>
date
Sun, 08 Feb 2015 17:10:32 +1100
changeset 15181
9174c05261f3
parent 15180
de66068e2396
child 15207
ea07ee919097
permissions
-rw-r--r--

[css-overflow] Link <integer> production correctly, although not quite ideally.

dbaron@15115 1 <h1>CSS Overflow Module Level 3</h1>
dbaron@15115 2 <pre class="metadata">
dbaron@15115 3 Status: ED
dbaron@15115 4 ED: http://dev.w3.org/csswg/css-overflow/
dbaron@15115 5 Shortname: css-overflow
dbaron@15115 6 Group: csswg
dbaron@15115 7 Level: 1
dbaron@15115 8 TR: http://www.w3.org/TR/css-overflow-3/
dbaron@15115 9 Previous version: http://www.w3.org/TR/2013/WD-css-overflow-3-20130418/
dbaron@15115 10 Editor: L. David Baron, Mozilla, http://dbaron.org/
dbaron@15115 11 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@15115 12 Status Text: The following features are at risk: &hellip;
dbaron@15125 13 !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 14 !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 15 !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>
dbaron@15115 16 </pre>
dbaron@15118 17 <!-- FIXME: Regressions from bikeshed conversion: -->
dbaron@15118 18 <!-- - Value lines in propdef tables no longer link to #values. -->
dbaron@15118 19 <!-- - no longer says "Test suite: none yet" -->
dbaron@15118 20 <!-- - Abstract has the most introductory sentence last -->
dbaron@15181 21 <!-- FIXME: other bikeshed issues -->
dbaron@15181 22 <!-- <integer> in max-lines value line should link to the dfn below, not to css-values -->
dbaron@15115 23 <pre class="link-defaults">
dbaron@15115 24 spec:css-transforms-1; type:property; text:transform-style
dbaron@15115 25 </pre>
dbaron@15115 26 <!-- FIXME: the break-* link doesn't actually work! -->
dbaron@15115 27 <pre class="anchors">
dbaron@15115 28 url: http://www.w3.org/TR/2008/CR-css3-marquee-20081205/#the-overflow-style; type: property; text: overflow-style;
dbaron@15115 29 url: http://dev.w3.org/csswg/css-break/#breaking-controls; type: property; text: break-*;
dbaron@15115 30 url: http://dev.w3.org/csswg/css-multicol/#overflow-columns; type: dfn; text: overflow columns;
dbaron@15115 31 url: http://dev.w3.org/csswg/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
dbaron@9865 264 the concept of <a href="http://dev.w3.org/csswg/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
dbaron@9850 281 based on the <a href="http://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@9850 338 <h3 id="border-box-overflow">Border box overflow</h3>
dbaron@9850 339
dbaron@9850 340 <p class="issue">
dbaron@9850 341 This concept has been proposed for some uses, such as for
dbaron@9850 342 determining what the 'outline' property goes around, and
dbaron@9850 343 as the basis of a coordinate system for specifying clips and masks,
dbaron@9850 344 but it's not clear if it's needed.
dbaron@9850 345 </p>
dbaron@9850 346
dbaron@9850 347 <p>
dbaron@9850 348 The <dfn>border-box overflow</dfn> of a box is the
dbaron@9850 349 union of the box's border edge and the border edges of
dbaron@9850 350 the box's descendants.</p>
dbaron@9850 351 </p>
dbaron@9850 352
dbaron@9850 353 <p class="issue">
dbaron@9850 354 If needed, define more formally, as for scrollable overflow above.
dbaron@9850 355 (Maybe even share the definitions in an appropriate way!)
dbaron@9850 356 </p>
dbaron@9850 357
dbaron@9850 358 <p>
dbaron@9850 359 The <dfn>border-box overflow region</dfn> is the non-rectangular region
dbaron@15115 360 occupied by the <a>border-box overflow</a>, and the
dbaron@9850 361 <dfn>border-box overflow rectangle</dfn> is
dbaron@9850 362 the minimal rectangle whose axis is aligned to the box's axes
dbaron@15115 363 and contains the <a>border-box overflow region</a>.
dbaron@15115 364 Note that the <a>border-box overflow rectangle</a> is a rectangle
dbaron@9850 365 in the box's coordinate system, but might be non-rectangular
dbaron@9850 366 in other coordinate systems due to transforms [[CSS3-TRANSFORMS]].
dbaron@9850 367 </p>
dbaron@9850 368
dbaron@7811 369 <h2 id="overflow-properties">Overflow properties</h2>
dbaron@7811 370
dbaron@7814 371 <p>
dbaron@15114 372 The 'overflow-x' property specifies
dbaron@7814 373 the handling of overflow in the horizontal direction
dbaron@7814 374 (i.e., overflow from the left and right sides of the box),
dbaron@15114 375 and the 'overflow-y' property specifies the handling
dbaron@7814 376 of overflow in the vertical direction
dbaron@7814 377 (i.e., overflow from the top and bottom sides of the box)
dbaron@7814 378 </p>
dbaron@7814 379
dbaron@15119 380 <pre class=propdef>
dbaron@15119 381 Name: overflow-x, overflow-y
dbaron@15180 382 Value: ''visible'' | ''hidden'' | ''scroll'' | ''auto'' | ''paged-x'' | ''paged-y'' | ''paged-x-controls'' | ''paged-y-controls'' | ''fragments''
dbaron@15180 383 Initial: ''visible''
dbaron@15119 384 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
dbaron@15119 385 Inherited: no
dbaron@15119 386 Percentages: N/A
dbaron@15119 387 Media: visual
dbaron@15119 388 Computed value: see below
dbaron@15119 389 Animatable: no
dbaron@15119 390 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 391 </pre>
dbaron@7811 392
dbaron@7814 393 <p>
dbaron@7814 394 The 'overflow' property is a shorthand property
dbaron@7814 395 that sets the specified values of both 'overflow-x' and 'overflow-y'
dbaron@7814 396 to the value specified for 'overflow'.
dbaron@7814 397 </p>
dbaron@7814 398
dbaron@15119 399 <pre class=propdef>
dbaron@15119 400 Name: overflow
dbaron@15180 401 Value: ''visible'' | ''hidden'' | ''scroll'' | ''auto'' | ''paged-x'' | ''paged-y'' | ''paged-x-controls'' | ''paged-y-controls'' | ''fragments''
dbaron@15119 402 Initial: see individual properties
dbaron@15119 403 Applies to: block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]]
dbaron@15119 404 Inherited: no
dbaron@15119 405 Percentages: N/A
dbaron@15119 406 Media: visual
dbaron@15119 407 Computed value: see individual properties
dbaron@15119 408 Animatable: no
dbaron@15119 409 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 410 </pre>
dbaron@7811 411
dbaron@7811 412 <p>The values of these properties are:</p>
dbaron@7811 413
dbaron@15115 414 <dl dfn-for="overflow" dfn-type="value">
dbaron@7811 415 <dt><dfn>visible</dfn>
dbaron@7811 416 <dd>
dbaron@7811 417 There is no special handling of overflow, that is, it
dbaron@7811 418 may be rendered outside the block container.
dbaron@7811 419 </dd>
dbaron@7811 420 <dt><dfn>hidden</dfn>
dbaron@7811 421 <dt><dfn>scroll</dfn>
dbaron@7811 422 <dt><dfn>auto</dfn>
dbaron@7811 423 <dd>
dbaron@15115 424 These values are collectively the <dfn dfn>scrolling values</dfn>;
dbaron@7811 425 they are defined in the section on
dbaron@7811 426 <a href="#scrolling-overflow">scrolling and hidden overflow</a>.
dbaron@7811 427 </dd>
dbaron@7811 428 <dt><dfn>paged-x</dfn>
dbaron@7811 429 <dt><dfn>paged-y</dfn>
dbaron@7811 430 <dt><dfn>paged-x-controls</dfn>
dbaron@7811 431 <dt><dfn>paged-y-controls</dfn>
dbaron@7811 432 <dt><dfn>fragments</dfn>
dbaron@7811 433 <dd>
dbaron@15115 434 These values are collectively the <dfn dfn>fragmenting values</dfn>;
dbaron@7811 435 they are defined in the sections on
dbaron@7811 436 <a href="#paginated-overflow">paginated overflow</a> and
dbaron@7811 437 <a href="#fragment-overflow">fragment overflow</a>.
dbaron@7811 438 </dd>
dbaron@7811 439 </dl>
dbaron@7811 440
dbaron@7811 441 <div id="overflow-computed-values">
dbaron@7811 442 <p>The computed values of 'overflow-x' and 'overflow-y'
dbaron@7811 443 are determined from the cascaded values [[!CSS3CASCADE]]
dbaron@7811 444 based on the following rules:</p>
dbaron@7811 445
dbaron@7811 446 <ol>
dbaron@7811 447 <li>
dbaron@7811 448 If one or both of the cascaded values are
dbaron@15115 449 <a>fragmenting values</a>, then:
dbaron@7811 450 <ol>
dbaron@7811 451 <li>
dbaron@7811 452 If one of the cascaded values is one of the
dbaron@15115 453 <a>fragmenting values</a>
dbaron@7811 454 and the other is not,
dbaron@7811 455 then the computed values are
dbaron@7811 456 the same as the cascaded values.
dbaron@7811 457 </li>
dbaron@7811 458 <li>
dbaron@15115 459 If both of the cascaded values are <a>fragmenting values</a>, then:
dbaron@7811 460 <ol>
dbaron@7811 461 <li>
dbaron@7811 462 for horizontal writing mode [[!CSS3-WRITING-MODES]],
dbaron@15114 463 the computed value for 'overflow-y' is the cascaded value
dbaron@15115 464 and the computed value for 'overflow-x' is ''overflow/hidden'', or
dbaron@7811 465 </li>
dbaron@7811 466 <li>
dbaron@7811 467 for vertical writing mode [[!CSS3-WRITING-MODES]],
dbaron@15114 468 the computed value for 'overflow-x' is the cascaded value
dbaron@15115 469 and the computed value for 'overflow-y' is ''overflow/hidden''.
dbaron@7811 470 </li>
dbaron@7811 471 </ol>
dbaron@7811 472 </li>
dbaron@7811 473 </ol>
dbaron@7811 474 </li>
dbaron@7811 475 <li>
dbaron@7811 476 Otherwise, if one cascaded values is
dbaron@15115 477 one of the <a>scrolling values</a>
dbaron@15115 478 and the other is ''overflow/visible'',
dbaron@7811 479 then computed values are the cascaded values
dbaron@15115 480 with ''overflow/visible'' changed to ''overflow/auto''.
dbaron@7811 481 </li>
dbaron@7811 482 <li>
dbaron@7811 483 Otherwise, the computed values are as specified.
dbaron@7811 484 </li>
dbaron@7811 485 </ol>
dbaron@7811 486 </div>
dbaron@7811 487
dbaron@7811 488 <p class="issue">
dbaron@7811 489 Are all 4 of the ''paged-*'' values really needed?
dbaron@7811 490 </p>
dbaron@7811 491
dbaron@7811 492 <p>
dbaron@15115 493 When the <a>fragmenting values</a> are used,
dbaron@7811 494 the overflow from the fragments themselves
dbaron@15115 495 treats the fragmenting value as ''overflow/hidden''.
dbaron@7811 496 <span class="issue">Is this the right behavior?</span>
dbaron@7811 497 <span class="issue">Give example.</span>
dbaron@7811 498 </p>
dbaron@7811 499
dbaron@7820 500 <p class="issue">
dbaron@7820 501 [[CSS3-MARQUEE]] describes an 'overflow-style' property,
dbaron@7820 502 but it has not picked up implementation experience
dbaron@7820 503 that the working group is aware of.
dbaron@7820 504 Should this document treat 'overflow-style' as a defunct proposal,
dbaron@7820 505 or should this document describe the 'overflow-style' property
dbaron@7820 506 and attempt to revive it,
dbaron@7820 507 despite that implementations have implemented
dbaron@7820 508 'overflow-x' and 'overflow-y' instead?
dbaron@7820 509 </p>
dbaron@7820 510
dbaron@7916 511 <p class="issue">
dbaron@7916 512 There are <a href="http://lists.w3.org/Archives/Public/www-style/2012May/1197.html">discussions</a>
dbaron@7916 513 about how overflow, overflow-style, overflow-x and overflow-y
dbaron@7916 514 should work and interact with each other.
dbaron@7916 515 Until consensus on this topic is reached,
dbaron@7916 516 it is not completely clear which of these
dbaron@7916 517 should be used for
dbaron@7916 518 paged-x | paged-y | paged-x-controls | paged-y-controls | fragments
dbaron@7916 519 </p>
dbaron@7916 520
dbaron@6483 521 <h2 id="scrolling-overflow">Scrolling and hidden overflow</h2>
dbaron@6483 522
dbaron@6483 523 <p class="issue">
dbaron@6483 524 Move material from [[CSS21]] and [[CSS3BOX]] here.
dbaron@6483 525 </p>
dbaron@6470 526
dbaron@14821 527 <p class="issue">
dbaron@14821 528 Explain which directions allow scrolling and which don't,
dbaron@14821 529 as a function of 'direction'
dbaron@14821 530 (including propagation of 'direction' to the ICB).
dbaron@14821 531 </p>
dbaron@14821 532
dbaron@6470 533 <h2 id="paginated-overflow">Paginated overflow</h2>
dbaron@6470 534
dbaron@6497 535 <p class="issue">overflow:paginate or overflow:pages (or paged-x, paged-y, paged-x-controls, paged-y-controls as [[CSS3GCPM]] has?)</p>
dbaron@6470 536
dbaron@6470 537 <p class="issue">Ability to display N pages at once
dbaron@6470 538 rather than just one page at once?</p>
dbaron@6470 539
dbaron@6497 540 <p class="issue">
dbaron@6497 541 The current implementation of paginated overflow uses
dbaron@6497 542 the 'overflow'/'overflow-x'/'overflow-y' properties
dbaron@6497 543 rather than the 'overflow-style' property as proposed
dbaron@6497 544 in the [[CSS3GCPM]] draft
dbaron@6497 545 (which also matches the [[CSS3-MARQUEE]] proposal).
dbaron@6497 546 We should probably switch away from 'overflow-style',
dbaron@6497 547 but that's not 100% clear.
dbaron@6497 548 </p>
dbaron@6497 549
dbaron@6484 550 <h2 id="fragment-overflow">Fragment overflow</h2>
dbaron@6470 551
dbaron@6470 552 <p>
dbaron@6470 553 This section introduces and defines the meaning of
dbaron@6484 554 the new ''fragments'' value of the 'overflow' property.
dbaron@6470 555 </p>
dbaron@6470 556
dbaron@6470 557 <p>
dbaron@6484 558 When the computed value of 'overflow' for an element is ''fragments'',
dbaron@6470 559 and implementations would otherwise have created a box for the element,
dbaron@6491 560 then implementations must create a sequence of <dfn>fragment box</dfn>es
dbaron@6470 561 for that element.
dbaron@6491 562 (It is possible for an element with ''overflow: fragments''
dbaron@15115 563 to generate only one <a>fragment box</a>.
dbaron@6484 564 However, if an element's computed 'overflow' is not ''fragments'',
dbaron@15115 565 then its box is not a <a>fragment box</a>.)
dbaron@15115 566 Every <a>fragment box</a> is a fragmentation container,
dbaron@6491 567 and any overflow
dbaron@6491 568 that would cause that fragmentation container to fragment
dbaron@15115 569 causes another <a>fragment box</a> created as a next sibling
dbaron@6470 570 of the previous one.
dbaron@6470 571 <span class="issue">Or is it as though it's a next sibling of
dbaron@6470 572 the element? Need to figure out exactly how this interacts with
dbaron@6470 573 other box-level fixup.</span>
dbaron@15115 574 Additionally, if the <a>fragment box</a> is also
dbaron@6492 575 a multi-column box (as defined in [[!CSS3COL]]
dbaron@6492 576 <span class="issue">though it defines <i>multi-column element</i></span>)
dbaron@15115 577 any content that would lead to the creation of <a>overflow columns</a> [[!CSS3COL]]
dbaron@6492 578 instead is flown into an additional fragment box.
dbaron@6491 579 However, fragment boxes may themselves be broken
dbaron@6491 580 (due to fragmentation in a fragmentation context outside of them,
dbaron@6491 581 such as pages, columns, or other fragment boxes);
dbaron@6491 582 such breaking leads to fragments of the same fragment box
dbaron@6491 583 rather than multiple fragment boxes.
dbaron@6491 584 (This matters because fragment boxes may be styled by their index;
dbaron@6491 585 such breaking leads to multiple fragments of a fragment box
dbaron@6491 586 with a single index.
dbaron@6491 587 This design choice is so that
dbaron@6491 588 breaking a fragment box across pages does not break
dbaron@6491 589 the association of indices to particular pieces of content.)
dbaron@6491 590 <span class="issue">Should a forced break that breaks to
dbaron@6491 591 an outer fragmentation context cause a new fragment of a single
dbaron@6491 592 fragment box or a new fragment box?</span>
dbaron@6491 593 <span class="issue">Should we find a term other than
dbaron@15115 594 <a>fragment box</a> here to make this a little less confusing?</span>
dbaron@6470 595 </p>
dbaron@6470 596
dbaron@6470 597 <p class="issue">
dbaron@6491 598 What if we want to be able to style the pieces of an element
dbaron@6491 599 split within another type of fragmentation context?
dbaron@6491 600 These rules prevent ever using ''::nth-fragment()'' for that,
dbaron@6491 601 despite that the name seems the most logical name for such a feature.
dbaron@6470 602 </p>
dbaron@6470 603
dbaron@6475 604 <div class="example">
dbaron@6477 605 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6475 606 &lt;title&gt;Breaking content into
dbaron@6475 607 equal-sized cards&lt;/title&gt;
dbaron@6475 608 &lt;style&gt;
dbaron@6475 609 .in-cards {
dbaron@6484 610 overflow: fragments;
dbaron@6475 611
dbaron@6475 612 width: 13em;
dbaron@6475 613 height: 8em;
dbaron@6475 614
dbaron@6475 615 padding: 4px;
dbaron@6475 616 border: medium solid blue;
dbaron@6475 617 margin: 6px;
dbaron@6475 618
dbaron@6475 619 font: medium/1.3 Times New
dbaron@6475 620 Roman, Times, serif;
dbaron@6475 621 }
dbaron@6475 622 &lt;/style&gt;
dbaron@6475 623 &lt;div class="in-cards"&gt;
dbaron@6475 624 In this example, the text in the div
dbaron@6475 625 is broken into a series of cards.
dbaron@6475 626 These cards all have the same style.
dbaron@6475 627 The presence of enough content to
dbaron@6475 628 overflow one of the cards causes
dbaron@6475 629 another one to be created. The second
dbaron@6475 630 card is created just like it's the
dbaron@6475 631 next sibling of the first.
dbaron@6477 632 &lt;/div&gt;</pre></td><td>
dbaron@6475 633 <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 634 <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 635 </td></tr></table>
dbaron@6475 636 </div>
dbaron@6475 637
dbaron@6487 638 <p class="issue">
dbaron@6487 639 We should specify that ''overflow: fragments'' does not apply
dbaron@6487 640 to at least some table parts,
dbaron@6487 641 and perhaps other elements as well.
dbaron@6487 642 We need to determine exactly which ones.
dbaron@6487 643 </p>
dbaron@6487 644
dbaron@6488 645 <p class="issue">
dbaron@6488 646 This specification needs to say which type of
dbaron@6488 647 fragmentation context is created
dbaron@15113 648 so that it's clear which values of the 'break-*' properties
dbaron@6488 649 cause breaks within this context.
dbaron@15113 650 We probably want ''break-*: region'' to apply.
dbaron@6488 651 </p>
dbaron@6488 652
dbaron@6494 653 <p class="issue">
dbaron@6494 654 This specification needs a processing model
dbaron@6494 655 that will apply in cases where the layout containing the
dbaron@6494 656 fragments has characteristics that use the intrinsic size of the fragments
dbaron@6494 657 to change the amount of space available for them,
dbaron@6494 658 such as [[CSS3-GRID-LAYOUT]].
dbaron@6494 659 There has already been some work on such a processing model
dbaron@6494 660 in [[CSS3-REGIONS]],
dbaron@6494 661 and the work done on a model there,
dbaron@6494 662 and the editors of that specification,
dbaron@6494 663 should inform what happens in this specification.
dbaron@6494 664 </p>
dbaron@6494 665
dbaron@6484 666 <h3 id="fragment-styling">Fragment styling</h3>
dbaron@6470 667
dbaron@6484 668 <h4 id="fragment-pseudo-element">The ::nth-fragment() pseudo-element</h4>
dbaron@6470 669
dbaron@6470 670 <p>
dbaron@15120 671 The <dfn selector>::nth-fragment()</dfn> pseudo-element
dbaron@15120 672 is a pseudo-element
dbaron@15115 673 that describes some of the <a>fragment box</a>es generated by an element.
dbaron@6470 674 The argument to the pseudo-element takes the same syntax
dbaron@6470 675 as the argument to the :nth-child() pseudo-class
dbaron@6470 676 defined in [[!SELECT]], and has the same meaning
dbaron@6470 677 except that the number is relative to
dbaron@15115 678 <a>fragment box</a>es generated by the element
dbaron@6470 679 instead of siblings of the element.
dbaron@6470 680 </p>
dbaron@6470 681
dbaron@6470 682 <p class="note">
dbaron@6484 683 Selectors that allow addressing fragments
dbaron@6470 684 by counting from the end rather than the start
dbaron@6470 685 are intentionally not provided.
dbaron@6470 686 Such selectors would interfere with determining
dbaron@6484 687 the number of fragments.
dbaron@6470 688 </p>
dbaron@6470 689
dbaron@6489 690 <p class="issue">
dbaron@6489 691 Depending on future discussions,
dbaron@6489 692 this ''::nth-fragment(<var>an+b</var>)'' syntax
dbaron@6489 693 may be replaced with
dbaron@6489 694 the new ''::fragment:nth(<var>an+b</var>)'' syntax.
dbaron@6489 695 </p>
dbaron@6489 696
dbaron@6484 697 <h4 id="style-of-fragments">Styling of fragments</h4>
dbaron@6470 698
dbaron@6470 699 <p class="issue">
dbaron@6484 700 Should this apply to fragment overflow only,
dbaron@6470 701 or also to paginated overflow?
dbaron@6470 702 (If it applies,
dbaron@6470 703 then stricter property restrictions would be needed
dbaron@6470 704 for paginated overflow.)
dbaron@6470 705 </p>
dbaron@6470 706
dbaron@6470 707 <p>
dbaron@6484 708 In the absence of rules with ''::nth-fragment()'' pseudo-elements,
dbaron@15115 709 the computed style for each <a>fragment box</a>
dbaron@6470 710 is the computed style for the element
dbaron@15115 711 for which the <a>fragment box</a> was created.
dbaron@15115 712 However, the style for a <a>fragment box</a> is also influenced
dbaron@15115 713 by rules whose selector's <a>subject</a> [[!SELECT]]
dbaron@6484 714 has an ''::nth-fragment()'' pseudo-element,
dbaron@15115 715 if the 1-based number of the <a>fragment box</a> matches
dbaron@6484 716 that ''::nth-fragment()'' pseudo-element
dbaron@6484 717 and the selector (excluding the ''::nth-fragment()'' pseudo-element)
dbaron@6484 718 matches the element generating the fragments.
dbaron@6470 719 </p>
dbaron@6470 720
dbaron@6486 721 <p>
dbaron@15115 722 When determining the style of the <a>fragment box</a>,
dbaron@6486 723 these rules that match the fragment pseudo-element
dbaron@6486 724 cascade together with the rules that match the element,
dbaron@6486 725 with the fragment pseudo-element adding the specificity
dbaron@6486 726 of a pseudo-class to the specificity calculation.
dbaron@6486 727 <span class="issue">Does this need to be specified in
dbaron@6486 728 the cascading module as well?</span>
dbaron@6486 729 </p>
dbaron@6486 730
dbaron@6477 731 <div class="example">
dbaron@6477 732 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6477 733 &lt;style&gt;
dbaron@6477 734 .bouncy-columns {
dbaron@6484 735 overflow: fragments;
dbaron@6477 736 width: 6em;
dbaron@6477 737 height: 10em;
dbaron@6477 738 float: left;
dbaron@6477 739 margin: 1em;
dbaron@6477 740 font: medium/1.25 Times New
dbaron@6477 741 Roman, Times, serif;
dbaron@6477 742 }
dbaron@6484 743 .bouncy-columns::nth-fragment(1) {
dbaron@6477 744 background: aqua; color: black;
dbaron@6477 745 transform: rotate(-3deg);
dbaron@6477 746 }
dbaron@6484 747 .bouncy-columns::nth-fragment(2) {
dbaron@6477 748 background: yellow; color: black;
dbaron@6477 749 transform: rotate(3deg);
dbaron@6477 750 }
dbaron@6477 751 &lt;/style&gt;
dbaron@6477 752 &lt;div class="bouncy-columns"&gt;
dbaron@6477 753 <i>...</i>
dbaron@6477 754 &lt;/div&gt;</pre></td><td>
dbaron@6477 755 <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 756 <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 757 <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 758 </td></tr></table>
dbaron@6477 759 </div>
dbaron@6477 760
dbaron@6470 761 <p>
dbaron@6484 762 Styling an ''::nth-fragment()'' pseudo-element with the 'overflow'
dbaron@6490 763 property does take effect;
dbaron@15115 764 if a <a>fragment box</a> has a
dbaron@6490 765 computed value of 'overflow' other than ''fragments''
dbaron@6490 766 then that fragment box is the last fragment.
dbaron@15114 767 However, overriding 'overflow' on the first fragment
dbaron@15115 768 does not cause the <a>fragment box</a> not to exist;
dbaron@6490 769 whether there are fragment boxes at all is determined by
dbaron@6490 770 the computed value of overflow for the element.
dbaron@7813 771 <span class="issue">Need to reword this to refer to the
dbaron@15114 772 appropriate choice of 'overflow-x' or 'overflow-y',
dbaron@7813 773 and then point to rule about the handling of the other one
dbaron@15114 774 of 'overflow-x' or 'overflow-y'.</span>
dbaron@6470 775 </p>
dbaron@6470 776
dbaron@6470 777 <p>
dbaron@6485 778 Styling an ''::nth-fragment()'' pseudo-element with the 'content'
dbaron@6485 779 property has no effect;
dbaron@6485 780 the computed value of 'content' for the fragment box
dbaron@6485 781 remains the same as the computed value of content for the element.
dbaron@6485 782 </p>
dbaron@6485 783
dbaron@6485 784 <p>
dbaron@15115 785 Specifying ''display: none'' for a <a>fragment box</a> causes
dbaron@6484 786 the fragment box with that index not to be generated.
dbaron@6470 787 However, in terms of the indices
dbaron@6484 788 used for matching ''::nth-fragment()'' pseudo-elements
dbaron@6484 789 of later fragment boxes,
dbaron@6470 790 it still counts as though it was generated.
dbaron@6470 791 However, since it is not generated, it does not contain any content.
dbaron@6470 792 </p>
dbaron@6470 793
dbaron@7813 794 <p>
dbaron@7813 795 Specifying other values of 'display', 'position',
dbaron@7813 796 or 'float' is permitted, but is not allowed to change
dbaron@7813 797 the computed value of 'display-inside'.
dbaron@7813 798 (Since 'overflow', 'overflow-x', and 'overflow-y' only
dbaron@7819 799 apply to block containers, flex containers, and grid containers
dbaron@7813 800 the computed value of 'display-inside' is always
dbaron@15115 801 ''display-inside/block'', ''display-inside/flex'', or
dbaron@15115 802 ''display-inside/grid''.
dbaron@7813 803 <span class="issue">Need to specify exactly how this works,
dbaron@7813 804 but it depends on
dbaron@7813 805 having 'display-inside' and 'display-outside' specified.</span>
dbaron@6470 806 </p>
dbaron@6470 807
dbaron@6470 808 <p>
dbaron@6470 809 To match the model for other pseudo-elements
dbaron@6470 810 where the pseudo-elements live inside their corresponding element,
dbaron@6484 811 declarations in ''::nth-fragment()'' pseudo-elements override
dbaron@6470 812 declarations in rules without the pseudo-element.
dbaron@6470 813 The relative priority within such declarations is determined
dbaron@6470 814 by normal cascading order (see [[!CSS21]]).
dbaron@6470 815 </p>
dbaron@6470 816
dbaron@6470 817 <p>
dbaron@6484 818 Styles specified on ''::nth-fragment()'' pseudo-elements
dbaron@15115 819 do affect inheritance to content within the <a>fragment box</a>.
dbaron@15115 820 In other words, the content within the <a>fragment box</a> must
dbaron@6484 821 inherit from the fragment box's style (i.e., the pseudo-element style)
dbaron@6470 822 rather than directly from the element.
dbaron@6484 823 This means that elements split between fragment boxes may
dbaron@6470 824 have different styles for different parts of the element.
dbaron@6470 825 </p>
dbaron@6470 826
dbaron@6472 827 <p class="issue">
dbaron@6472 828 This inheritance rule allows specifying styles indirectly
dbaron@6472 829 (by using explicit ''inherit'' or using default inheritance
dbaron@15117 830 on properties that don't apply to ''::first-letter'')
dbaron@6472 831 that can't be specified directly
dbaron@6472 832 (based on the rules in the next section).
dbaron@6472 833 This is a problem.
dbaron@6484 834 The restrictions that apply to styling inside fragments
dbaron@6484 835 should also apply to inheritance from fragments.
dbaron@6472 836 </p>
dbaron@6472 837
dbaron@6480 838 <div class="example">
dbaron@6480 839 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6480 840 &lt;style&gt;
dbaron@6480 841 .article {
dbaron@6484 842 overflow: fragments;
dbaron@6480 843 }
dbaron@6484 844 .article::nth-fragment(1) {
dbaron@6480 845 font-size: 1.5em;
dbaron@6480 846 margin-bottom: 1em;
dbaron@6480 847 height: 4em;
dbaron@6480 848 }
dbaron@6491 849 .article::nth-fragment(2) {
dbaron@6480 850 margin-left: 5em;
dbaron@6480 851 margin-right: 2em;
dbaron@6480 852 }
dbaron@6480 853 &lt;/style&gt;
dbaron@6480 854 &lt;div class="article"&gt;
dbaron@6480 855 The &lt;code&gt;font-size&lt;/code&gt; property<i>...</i>
dbaron@6480 856 &lt;/div&gt;</pre></td><td>
dbaron@6484 857 <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 858 <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 859 </td></tr></table>
dbaron@6480 860 </div>
dbaron@6478 861
dbaron@6484 862 <h4 id="style-in-fragments">Styling inside fragments</h4>
dbaron@6470 863
dbaron@6470 864 <p class="issue">
dbaron@6484 865 Should this apply to fragment overflow only,
dbaron@6470 866 or also to paginated overflow,
dbaron@6470 867 or even to pagination across pages?
dbaron@6470 868 </p>
dbaron@6470 869
dbaron@6470 870 <p>
dbaron@6484 871 The ''::nth-fragment()'' pseudo-element
dbaron@6470 872 can also be used to style
dbaron@15115 873 content inside of a <a>fragment box</a>.
dbaron@6470 874 Unlike the ''::first-line'' and ''::first-letter'' pseudo-elements,
dbaron@6484 875 the ''::nth-fragment()'' pseudo-element can be applied
dbaron@6470 876 to parts of the selector other than the subject:
dbaron@6470 877 in particular, it can match ancestors of the subject.
dbaron@6470 878 However, the only CSS properties applied
dbaron@6470 879 by rules with such selectors
dbaron@6470 880 are those that apply
dbaron@6470 881 to the ''::first-letter'' pseudo-element.
dbaron@6470 882 </p>
dbaron@6470 883
dbaron@6470 884 <p>
dbaron@6470 885 To be more precise,
dbaron@6484 886 when a rule's selector has ''::nth-fragment()'' pseudo-elements
dbaron@6470 887 attached to parts of the selector other than the subject,
dbaron@6470 888 the declarations in that rule apply to
dbaron@6470 889 a fragment (or pseudo-element thereof) when:
dbaron@6470 890 </p>
dbaron@6470 891 <ol>
dbaron@6470 892 <li>
dbaron@6470 893 the declarations are for properties that apply to the
dbaron@6470 894 ''::first-letter'' pseudo-element,
dbaron@6470 895 </li>
dbaron@6470 896 <li>
dbaron@6470 897 the declarations would apply to
dbaron@6470 898 that fragment (or pseudo-element thereof)
dbaron@6484 899 had those ''::nth-fragment()'' pseudo-elements been removed,
dbaron@6470 900 with a particular association between
dbaron@6470 901 each sequence of simple selectors and the element it matched,
dbaron@6470 902 and
dbaron@6470 903 </li>
dbaron@6470 904 <li>
dbaron@6484 905 for each removed ''::nth-fragment()'' pseudo-element,
dbaron@15115 906 the fragment lives within a <a>fragment box</a>
dbaron@6470 907 of the element associated in that association
dbaron@6470 908 with the selector that the pseudo-element was attached to,
dbaron@6470 909 and whose index matches the pseudo-element.
dbaron@6470 910 </li>
dbaron@6470 911 </ol>
dbaron@6470 912
dbaron@6481 913 <div class="example">
dbaron@6481 914 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6481 915 &lt;style&gt;
dbaron@6481 916 .dark-columns {
dbaron@6484 917 overflow: fragments;
dbaron@6481 918 width: 6em;
dbaron@6481 919 height: 10em;
dbaron@6481 920 float: left;
dbaron@6481 921 margin-right: 1em;
dbaron@6481 922 font: medium/1.25 Times New
dbaron@6481 923 Roman, Times, serif;
dbaron@6481 924 }
dbaron@6484 925 .dark-columns::nth-fragment(1) {
dbaron@6481 926 background: aqua; color: black;
dbaron@6481 927 }
dbaron@6484 928 .dark-columns::nth-fragment(1) :link {
dbaron@6481 929 color: blue;
dbaron@6481 930 }
dbaron@6484 931 .dark-columns::nth-fragment(1) :visited {
dbaron@6481 932 color: purple;
dbaron@6481 933 }
dbaron@6484 934 .dark-columns::nth-fragment(2) {
dbaron@6481 935 background: navy; color: white;
dbaron@6481 936 }
dbaron@6484 937 .dark-columns::nth-fragment(2) :link {
dbaron@6481 938 color: aqua;
dbaron@6481 939 }
dbaron@6484 940 .dark-columns::nth-fragment(2) :visited {
dbaron@6481 941 color: fuchsia;
dbaron@6481 942 }
dbaron@6481 943 &lt;/style&gt;
dbaron@6481 944 &lt;div class="dark-columns"&gt;
dbaron@6481 945 <i>...</i>
dbaron@6481 946 &lt;/div&gt;</pre></td><td>
dbaron@6484 947 <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 948 <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 949 </td></tr></table>
dbaron@6481 950 </div>
dbaron@6481 951
dbaron@6478 952
dbaron@6470 953 <h3 id="max-lines">The 'max-lines' property</h3>
dbaron@6470 954
dbaron@6470 955 <p>
dbaron@6470 956 Authors may wish to style the opening lines of an element
dbaron@6470 957 with different styles
dbaron@6484 958 by putting those opening lines in a separate fragment.
dbaron@6470 959 However, since it may be difficult to predict the exact height
dbaron@6470 960 occupied by those lines
dbaron@6484 961 in order to restrict the first fragment to that height,
dbaron@6470 962 this specification introduces a 'max-lines' property
dbaron@6484 963 that forces a fragment to break
dbaron@6470 964 after a specified number of lines.
dbaron@6470 965 This forces a break after the given number of lines
dbaron@6470 966 contained within the element or its descendants,
dbaron@6470 967 as long as those lines are in the same block formatting context.
dbaron@6470 968 </p>
dbaron@6470 969
dbaron@15119 970 <pre class=propdef>
dbaron@15119 971 Name: max-lines
dbaron@15181 972 Value: ''none'' | <<integer>>
dbaron@15180 973 Initial: ''none''
dbaron@15119 974 Applies to: fragment boxes
dbaron@15119 975 Inherited: no
dbaron@15119 976 Animatable: as <a href="http://www.w3.org/TR/css3-transitions/#animatable-types">integer</a>
dbaron@15119 977 Percentages: N/A
dbaron@15119 978 Media: visual
dbaron@15119 979 Computed value: specified value
dbaron@15119 980 Canonical order: <abbr title="follows order of property value definition">per grammar</abbr>
dbaron@15119 981 </pre>
dbaron@6470 982
dbaron@15115 983 <dl dfn-for="max-lines" dfn-type="value">
dbaron@15115 984 <dt><dfn>none</dfn>
dbaron@6470 985 <dd>
dbaron@6470 986 <p>
dbaron@6470 987 Breaks occur only as specified elsewhere.
dbaron@6470 988 </p>
dbaron@6470 989 </dd>
dbaron@6470 990
dbaron@15181 991 <dt><dfn><<integer>></dfn>
dbaron@6470 992 <dd>
dbaron@6470 993 <p>
dbaron@6470 994 In addition to any breaks specified elsewhere,
dbaron@6470 995 a break is forced before any line that would exceed
dbaron@6470 996 the given number of lines
dbaron@6470 997 being placed inside the element
dbaron@6470 998 (excluding lines that are in
dbaron@6470 999 a different block formatting context from
dbaron@6470 1000 the block formatting context to which
dbaron@6470 1001 an unstyled child of the element would belong).
dbaron@6470 1002 </p>
dbaron@6470 1003
dbaron@6470 1004 <p class="issue">
dbaron@6470 1005 If there are multiple boundaries between this line
dbaron@6470 1006 and the previous, where exactly (in terms of element
dbaron@6470 1007 boundaries) is the break forced?
dbaron@6470 1008 </p>
dbaron@6470 1009
dbaron@6470 1010 <p>
dbaron@6470 1011 Only positive integers are accepted.
dbaron@6470 1012 Zero or negative integers are a parse error.
dbaron@6470 1013 </p>
dbaron@6470 1014 </dd>
dbaron@6470 1015 </dl>
dbaron@6470 1016
dbaron@6484 1017 <p class="issue">Should this apply to fragment overflow only, or also
dbaron@6470 1018 to pagination?</p>
dbaron@6470 1019
dbaron@6479 1020 <div class="example">
dbaron@6479 1021 <table class="source-demo-pair"><tr><td><pre>&lt;!DOCTYPE HTML&gt;
dbaron@6479 1022 &lt;style&gt;
dbaron@6479 1023 .article {
dbaron@6484 1024 overflow: fragments;
dbaron@6479 1025 }
dbaron@6479 1026 .article::first-letter {
dbaron@6479 1027 font-size: 2em;
dbaron@6479 1028 line-height: 0.9;
dbaron@6479 1029 }
dbaron@6484 1030 .article::nth-fragment(1) {
dbaron@6479 1031 font-size: 1.5em;
dbaron@6479 1032 max-lines: 3;
dbaron@6479 1033 }
dbaron@6491 1034 .article::nth-fragment(2) {
dbaron@6479 1035 column-count: 2;
dbaron@6479 1036 }
dbaron@6479 1037 &lt;/style&gt;
dbaron@6479 1038 &lt;div class="article"&gt;
dbaron@6479 1039 <i>...</i>
dbaron@6479 1040 &lt;/div&gt;</pre></td><td>
dbaron@6479 1041 <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 1042 <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 1043 <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 1044 </td></tr></table>
dbaron@6479 1045 </div>
dbaron@6478 1046
dbaron@6493 1047 <h2 id="static-media">Overflow in static media</h2>
dbaron@6493 1048
dbaron@6493 1049 <p class="issue">
dbaron@6493 1050 This specification should define useful behavior
dbaron@6493 1051 for all values of 'overflow'
dbaron@6493 1052 in static media (such as print).
dbaron@6493 1053 Current implementation behavior is quite poor and
dbaron@6493 1054 produces unexpected results when authors have not considered
dbaron@6493 1055 what will happen when
dbaron@6493 1056 the content they produce for interactive media
dbaron@6493 1057 is printed.
dbaron@6493 1058 </p>
dbaron@6493 1059
dbaron@6470 1060 <h2 class=no-num id="acknowledgments">
dbaron@6470 1061 Acknowledgments</h2>
dbaron@6470 1062
dbaron@6470 1063 <p>
dbaron@6470 1064 Thanks especially to the feedback from
dbaron@6496 1065 Rossen Atanassov,
dbaron@6496 1066 Bert Bos,
dbaron@6496 1067 Tantek Çelik,
dbaron@6496 1068 John Daggett,
dbaron@6496 1069 fantasai,
dbaron@6496 1070 Daniel Glazman,
dbaron@6496 1071 Vincent Hardy,
dbaron@6470 1072 H&aring;kon Wium Lie,
dbaron@6496 1073 Peter Linss,
dbaron@7815 1074 Robert O'Callahan,
dbaron@6470 1075 Florian Rivoal,
dbaron@6473 1076 Alan Stearns,
dbaron@6496 1077 Steve Zilles,
dbaron@6470 1078 and all the rest of the
dbaron@6470 1079 <a href="http://lists.w3.org/Archives/Public/www-style/">www-style</a> community.
dbaron@6470 1080 </p>

mercurial