Tue, 28 Jan 2014 01:13:53 -0800
[css-overflow] Add a section defining what overflow is and what types of overflow there are.
dbaron@6470 | 1 | <!DOCTYPE html> |
dbaron@6470 | 2 | <html lang="en"> |
dbaron@6470 | 3 | <head> |
dbaron@6470 | 4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
dbaron@6483 | 5 | <title>CSS Overflow Module Level 3</title> |
dbaron@6470 | 6 | <link rel=contents href="#contents"> |
dbaron@6470 | 7 | <link rel=index href="#index"> |
dbaron@6470 | 8 | <link rel="stylesheet" type="text/css" href="../default.css"> |
dbaron@6470 | 9 | <link rel="stylesheet" type="text/css" |
dbaron@6470 | 10 | href="http://www.w3.org/StyleSheets/TR/W3C-[STATUS].css"> |
dbaron@6475 | 11 | <style> |
dbaron@6477 | 12 | table.source-demo-pair { |
dbaron@6477 | 13 | width: 100%; |
dbaron@6477 | 14 | } |
dbaron@6481 | 15 | |
dbaron@6475 | 16 | .in-cards-demo { |
dbaron@6475 | 17 | width: 13em; |
dbaron@6475 | 18 | height: 8em; |
dbaron@6475 | 19 | |
dbaron@6475 | 20 | padding: 4px; |
dbaron@6475 | 21 | border: medium solid blue; |
dbaron@6475 | 22 | margin: 6px; |
dbaron@6475 | 23 | |
dbaron@6475 | 24 | font: medium/1.3 Times New Roman, Times, serif; |
dbaron@6475 | 25 | white-space: nowrap; |
dbaron@6475 | 26 | } |
dbaron@6481 | 27 | |
dbaron@6477 | 28 | .bouncy-columns-demo { |
dbaron@6477 | 29 | width: 6em; |
dbaron@6477 | 30 | height: 10em; |
dbaron@6477 | 31 | float: left; |
dbaron@6477 | 32 | margin: 1em; |
dbaron@6477 | 33 | font: medium/1.25 Times New Roman, Times, serif; |
dbaron@6477 | 34 | white-space: nowrap; |
dbaron@6477 | 35 | } |
dbaron@6477 | 36 | .bouncy-columns-demo.one { |
dbaron@6477 | 37 | background: aqua; color: black; |
dbaron@6477 | 38 | transform: rotate(-3deg); |
dbaron@6477 | 39 | } |
dbaron@6477 | 40 | .bouncy-columns-demo.two { |
dbaron@6477 | 41 | background: yellow; color: black; |
dbaron@6477 | 42 | transform: rotate(3deg); |
dbaron@6477 | 43 | } |
dbaron@6479 | 44 | |
dbaron@6480 | 45 | .article-font-inherit-demo { |
dbaron@6480 | 46 | font: 1em/1.25 Times New Roman, Times, serif; |
dbaron@6480 | 47 | white-space: nowrap; |
dbaron@6480 | 48 | } |
dbaron@6480 | 49 | .article-font-inherit-demo.one { |
dbaron@6480 | 50 | width: 12em; |
dbaron@6480 | 51 | font-size: 1.5em; |
dbaron@6480 | 52 | margin-bottom: 1em; |
dbaron@6480 | 53 | height: 4em; |
dbaron@6480 | 54 | } |
dbaron@6480 | 55 | .article-font-inherit-demo.two { |
dbaron@6480 | 56 | width: 11em; |
dbaron@6480 | 57 | margin-left: 5em; |
dbaron@6480 | 58 | margin-right: 2em; |
dbaron@6480 | 59 | } |
dbaron@6480 | 60 | |
dbaron@6481 | 61 | .dark-columns-demo { |
dbaron@6481 | 62 | width: 6em; |
dbaron@6481 | 63 | height: 10em; |
dbaron@6481 | 64 | float: left; |
dbaron@6481 | 65 | margin-right: 1em; |
dbaron@6481 | 66 | font: medium/1.25 Times New Roman, Times, serif; |
dbaron@6481 | 67 | white-space: nowrap; |
dbaron@6481 | 68 | } |
dbaron@6481 | 69 | .dark-columns-demo.one { |
dbaron@6481 | 70 | background: aqua; color: black; |
dbaron@6481 | 71 | } |
dbaron@6481 | 72 | .dark-columns-demo.one :link { |
dbaron@6481 | 73 | color: blue; |
dbaron@6481 | 74 | } |
dbaron@6481 | 75 | .dark-columns-demo.one :visited { |
dbaron@6481 | 76 | color: purple; |
dbaron@6481 | 77 | } |
dbaron@6481 | 78 | .dark-columns-demo.two { |
dbaron@6481 | 79 | background: navy; color: white; |
dbaron@6481 | 80 | } |
dbaron@6481 | 81 | .dark-columns-demo.two :link { |
dbaron@6481 | 82 | color: aqua; |
dbaron@6481 | 83 | } |
dbaron@6481 | 84 | .dark-columns-demo.two :visited { |
dbaron@6481 | 85 | color: fuchsia; |
dbaron@6481 | 86 | } |
dbaron@6481 | 87 | |
dbaron@6479 | 88 | .article-max-lines-demo { |
dbaron@6479 | 89 | font: 1em/1.25 Times New Roman, Times, serif; |
dbaron@6479 | 90 | white-space: nowrap; |
dbaron@6479 | 91 | } |
dbaron@6479 | 92 | .article-max-lines-demo.one::first-letter { |
dbaron@6479 | 93 | font-size: 2em; |
dbaron@6479 | 94 | line-height: 0.9; |
dbaron@6479 | 95 | } |
dbaron@6479 | 96 | .article-max-lines-demo.one { |
dbaron@6479 | 97 | font-size: 1.5em; |
dbaron@6479 | 98 | width: 16em; |
dbaron@6479 | 99 | } |
dbaron@6479 | 100 | .article-max-lines-demo.two { |
dbaron@6479 | 101 | width: 11.5em; |
dbaron@6479 | 102 | float: left; margin-right: 1em; |
dbaron@6479 | 103 | } |
dbaron@6479 | 104 | .article-max-lines-demo.three { |
dbaron@6479 | 105 | width: 11.5em; |
dbaron@6479 | 106 | float: left; |
dbaron@6479 | 107 | } |
dbaron@6475 | 108 | </style> |
dbaron@6470 | 109 | </head> |
dbaron@6470 | 110 | |
dbaron@6470 | 111 | <div class="head"> |
dbaron@6470 | 112 | <!--logo--> |
dbaron@6470 | 113 | |
dbaron@6483 | 114 | <h1>CSS Overflow Module Level 3</h1> |
dbaron@6470 | 115 | |
dbaron@6470 | 116 | <h2 class="no-num no-toc">[LONGSTATUS] [DATE]</h2> |
dbaron@6470 | 117 | <dl> |
dbaron@6470 | 118 | <dt>This version: |
dbaron@7461 | 119 | <dd><a href="[VERSION]">[VERSION]</a> |
dbaron@6470 | 120 | |
dbaron@6470 | 121 | <dt>Latest version: |
dbaron@7917 | 122 | <dd><a href="http://www.w3.org/TR/css-overflow-3/">http://www.w3.org/TR/css-overflow-3/</a> |
dbaron@6470 | 123 | |
dbaron@6470 | 124 | <dt>Editor's draft: |
dbaron@7929 | 125 | <dd><a href="http://dev.w3.org/csswg/[SHORTNAME]/">http://dev.w3.org/csswg/[SHORTNAME]/</a> |
dbaron@7863 | 126 | (<a href="https://dvcs.w3.org/hg/csswg/log/tip/css-overflow/Overview.src.html">change log</a>, |
dbaron@7863 | 127 | <a href="https://dvcs.w3.org/hg/csswg/log/tip/css3-overflow/Overview.src.html">older change log</a>) |
dbaron@6470 | 128 | |
dbaron@6470 | 129 | <dt>Previous version: |
dbaron@7967 | 130 | <dd><a href="http://www.w3.org/TR/2013/WD-css-overflow-3-20130418/">http://www.w3.org/TR/2013/WD-css-overflow-3-20130418/</a> |
dbaron@6470 | 131 | |
dbaron@7809 | 132 | <dt>Editors: |
dbaron@7809 | 133 | <dd class="h-card vcard"> |
dbaron@7809 | 134 | <a class="p-name fn u-url url" rel="author" |
dbaron@7809 | 135 | href="http://dbaron.org/">L. David Baron</a>, |
dbaron@7809 | 136 | <a class="p-org org" href="http://www.mozilla.org/">Mozilla</a> |
dbaron@7809 | 137 | |
dbaron@6470 | 138 | <dt>Issue Tracking:</dt> |
dbaron@6470 | 139 | <dd>Maintained in document (only editor's draft is current) |
dbaron@6470 | 140 | |
dbaron@6470 | 141 | <dt>Feedback:</dt> |
dbaron@7920 | 142 | <dd><a href="mailto:[email protected]?subject=%5Bcss-overflow%5D%20feedback" |
jackalmage@7856 | 143 | >[email protected]</a> |
jackalmage@7856 | 144 | with subject line “<kbd>[css-overflow] |
jackalmage@7856 | 145 | <var>… message topic …</var></kbd>” |
jackalmage@7856 | 146 | (<a rel="discussion" href="http://lists.w3.org/Archives/Public/www-style/" |
jackalmage@7856 | 147 | >archives</a>) |
dbaron@6470 | 148 | |
dbaron@7809 | 149 | <dt>Test suite: |
dbaron@7809 | 150 | <dd>none yet |
dbaron@6470 | 151 | </dl> |
dbaron@6470 | 152 | |
dbaron@6470 | 153 | <!--copyright--> |
dbaron@6470 | 154 | |
dbaron@6470 | 155 | <hr title="Separator for header"> |
dbaron@6470 | 156 | </div> |
dbaron@6470 | 157 | |
dbaron@6470 | 158 | <h2 class="no-num no-toc" id="abstract">Abstract</h2> |
dbaron@6470 | 159 | |
dbaron@6470 | 160 | <p> |
dbaron@6470 | 161 | <a href="http://www.w3.org/TR/CSS/">CSS</a> is |
dbaron@6470 | 162 | a language for describing |
dbaron@6470 | 163 | the rendering of structured documents (such as HTML and XML) |
dbaron@6470 | 164 | on screen, on paper, in speech, etc. |
dbaron@6470 | 165 | This module contains the features of CSS |
dbaron@6470 | 166 | relating to new mechanisms of overflow handling in visual media (e.g., screen or paper). |
dbaron@6470 | 167 | In interactive media, |
dbaron@6470 | 168 | it describes features that allow the overflow |
dbaron@6470 | 169 | from a fixed size container |
dbaron@6470 | 170 | to be handled by pagination (displaying one page at a time). |
dbaron@6470 | 171 | It also describes features, applying to all visual media, |
dbaron@6470 | 172 | that allow the contents of an element |
dbaron@6484 | 173 | to be spread across multiple fragments, |
dbaron@6484 | 174 | allowing the contents to flow across multiple regions |
dbaron@6484 | 175 | or to have different styles for different fragments. |
dbaron@6470 | 176 | </p> |
dbaron@6470 | 177 | |
dbaron@6470 | 178 | <h2 class="no-num no-toc" id="status">Status of this document</h2> |
dbaron@6470 | 179 | |
dbaron@6470 | 180 | <!--status--> |
dbaron@6470 | 181 | |
dbaron@6470 | 182 | <p>The following features are at risk: … |
dbaron@6470 | 183 | |
dbaron@6470 | 184 | <h2 class="no-num no-toc" id="contents"> |
dbaron@6470 | 185 | Table of contents</h2> |
dbaron@6470 | 186 | |
dbaron@6470 | 187 | <!--toc--> |
dbaron@6470 | 188 | |
dbaron@6470 | 189 | <h2 id="intro"> |
dbaron@6470 | 190 | Introduction</h2> |
dbaron@6470 | 191 | |
dbaron@6470 | 192 | <p> |
dbaron@6470 | 193 | In CSS Level 1 [[CSS1]], placing more content than would fit |
dbaron@6470 | 194 | inside an element with a specified size |
dbaron@6470 | 195 | was generally an authoring error. |
dbaron@6470 | 196 | Doing so caused the content to extend |
dbaron@6470 | 197 | outside the bounds of the element, |
dbaron@6470 | 198 | which would likely cause |
dbaron@6470 | 199 | that content to overlap with other elements. |
dbaron@6470 | 200 | </p> |
dbaron@6470 | 201 | |
dbaron@6470 | 202 | <p> |
dbaron@6470 | 203 | CSS Level 2 [[CSS21]] introduced the 'overflow' property, |
dbaron@6470 | 204 | which allows authors to have overflow be handled by scrolling, |
dbaron@6470 | 205 | which means it is no longer an authoring error. |
dbaron@6470 | 206 | It also allows authors to specify |
dbaron@6470 | 207 | that overflow is handled by clipping, |
dbaron@6470 | 208 | which makes sense when the author's intent |
dbaron@6470 | 209 | is that the content not be shown. |
dbaron@6470 | 210 | </p> |
dbaron@6470 | 211 | |
dbaron@6470 | 212 | <p> |
dbaron@6470 | 213 | However, scrolling is not the only way |
dbaron@6470 | 214 | to present large amounts of content, |
dbaron@6470 | 215 | and may even not be the optimal way. |
dbaron@6470 | 216 | After all, the codex replaced the scroll |
dbaron@6470 | 217 | as the common format for large written works |
dbaron@6470 | 218 | because of its advantages. |
dbaron@6470 | 219 | </p> |
dbaron@6470 | 220 | |
dbaron@6470 | 221 | <p> |
dbaron@6470 | 222 | This specification introduces |
dbaron@6470 | 223 | a mechanism for Web pages to specify |
dbaron@6484 | 224 | that an element of a page should handle overflow |
dbaron@6470 | 225 | through pagination rather than through scrolling. |
dbaron@6470 | 226 | </p> |
dbaron@6470 | 227 | |
dbaron@6470 | 228 | <p> |
dbaron@6470 | 229 | This specification also extends the concept of overflow |
dbaron@6470 | 230 | in another direction. |
dbaron@6484 | 231 | Instead of requiring that authors specify a single area |
dbaron@6470 | 232 | into which the content of an element must flow, |
dbaron@6484 | 233 | this specification allows authors to specify multiple fragments, |
dbaron@6470 | 234 | each with their own dimensions and styles, |
dbaron@6470 | 235 | so that the content of the element can flow from one to the next, |
dbaron@6470 | 236 | using as many as needed to place the content without overflowing. |
dbaron@6470 | 237 | </p> |
dbaron@6470 | 238 | |
dbaron@6470 | 239 | <p> |
dbaron@6470 | 240 | In both of these cases, implementations must |
dbaron@6470 | 241 | break the content in the block-progression dimension. |
dbaron@6470 | 242 | Implementations must do this is described |
dbaron@6470 | 243 | in the CSS Fragmentation Module [[!CSS3-BREAK]]. |
dbaron@6470 | 244 | </p> |
dbaron@6470 | 245 | |
dbaron@9850 | 246 | <h2 id="overflow-concepts">Types of overflow</h2> |
dbaron@9850 | 247 | |
dbaron@9850 | 248 | <p> |
dbaron@9850 | 249 | CSS uses the term <dfn>overflow</dfn> to describe |
dbaron@9850 | 250 | the contents of a box |
dbaron@9850 | 251 | that extend outside that one of that box's edges |
dbaron@9850 | 252 | (i.e., its <i>content edge</i>, <i>padding edge</i>, |
dbaron@9850 | 253 | <i>border edge</i>, or <i>margin edge</i>). |
dbaron@9850 | 254 | The overflow might be described as the elements or features |
dbaron@9850 | 255 | that cause this overflow, |
dbaron@9850 | 256 | the non-rectangular region occupied by these features, |
dbaron@9850 | 257 | or, more commonly, |
dbaron@9850 | 258 | as the minimal rectangle that bounds that region. |
dbaron@9850 | 259 | A box's overflow is computed based on the boxes and styles |
dbaron@9850 | 260 | of the box and of all its descendants whose containing block chain |
dbaron@9850 | 261 | <span class="issue">undefined term?</span> |
dbaron@9850 | 262 | includes the box. |
dbaron@9850 | 263 | </p> |
dbaron@9850 | 264 | |
dbaron@9850 | 265 | <p> |
dbaron@9850 | 266 | In most cases, any of these types of overflow |
dbaron@9850 | 267 | can be computed for any box |
dbaron@9850 | 268 | from the bounds and properties of that box, |
dbaron@9850 | 269 | and from the overflow (of that type) |
dbaron@9850 | 270 | of each of its children. |
dbaron@9850 | 271 | However, this is not always the case; for example, |
dbaron@9850 | 272 | when ''transform-style: preserve-3d'' [[CSS3-TRANSFORMS]] is used on |
dbaron@9850 | 273 | some of the children, their descendants with |
dbaron@9850 | 274 | ''transform-style: preserve-3d'' must also be examined. |
dbaron@9850 | 275 | </p> |
dbaron@9850 | 276 | |
dbaron@9850 | 277 | <h3 id="ink-overflow">Ink overflow</h3> |
dbaron@9850 | 278 | |
dbaron@9850 | 279 | <p> |
dbaron@9850 | 280 | The <dfn>ink overflow</dfn> of a box |
dbaron@9850 | 281 | is the part of that box and its contents that |
dbaron@9850 | 282 | creates a visual effect outside of |
dbaron@9850 | 283 | the box's border box. |
dbaron@9850 | 284 | </p> |
dbaron@9850 | 285 | |
dbaron@9850 | 286 | <p> |
dbaron@9850 | 287 | Since some effects in CSS (for example, the blurs in |
dbaron@9850 | 288 | 'text-shadow' [[CSS3TEXT]] and 'box-shadow' [[CSS3BG]]) |
dbaron@9850 | 289 | do not define what visual extent they cover, the extent |
dbaron@9850 | 290 | of the <i>ink overflow</i> is undefined. |
dbaron@9850 | 291 | </p> |
dbaron@9850 | 292 | |
dbaron@9850 | 293 | <p class="issue"> |
dbaron@9850 | 294 | Should we try to define it at all and just leave pieces undefined? |
dbaron@9850 | 295 | </p> |
dbaron@9850 | 296 | |
dbaron@9850 | 297 | <p> |
dbaron@9850 | 298 | The <dfn>ink overflow region</dfn> is the non-rectangular region |
dbaron@9850 | 299 | occupied by the <i>ink overflow</i>, and the |
dbaron@9850 | 300 | <dfn>ink overflow rectangle</dfn> is |
dbaron@9850 | 301 | the minimal rectangle whose axis is aligned to the box's axes |
dbaron@9850 | 302 | and contains the <i>ink overflow region</i>. |
dbaron@9850 | 303 | Note that the <i>ink overflow rectangle</i> is a rectangle |
dbaron@9850 | 304 | in the box's coordinate system, but might be non-rectangular |
dbaron@9850 | 305 | in other coordinate systems due to transforms [[CSS3-TRANSFORMS]]. |
dbaron@9850 | 306 | </p> |
dbaron@9850 | 307 | |
dbaron@9850 | 308 | <h3 id="scrollable-overflow">Scrollable overflow</h3> |
dbaron@9850 | 309 | |
dbaron@9850 | 310 | <p> |
dbaron@9850 | 311 | The <dfn>scrollable overflow</dfn> of a box is the |
dbaron@9850 | 312 | set of things extending outside of that box's padding edge |
dbaron@9850 | 313 | for which a scrolling mechanism needs to be provided. |
dbaron@9850 | 314 | </p> |
dbaron@9850 | 315 | |
dbaron@9850 | 316 | <p> |
dbaron@9850 | 317 | Given the following definitions |
dbaron@9850 | 318 | <span class="issue">which belong in [[CSS3-TRANSFORMS]]</span>: |
dbaron@9850 | 319 | </p> |
dbaron@9850 | 320 | |
dbaron@9850 | 321 | <dl> |
dbaron@9850 | 322 | <dt><dfn>3d-preserving child</dfn></dt> |
dbaron@9850 | 323 | <dd> |
dbaron@9850 | 324 | A child box C of a parent box P is a 3d-preserving |
dbaron@9850 | 325 | child if it has ''transform-style: preserve-3d'' |
dbaron@9850 | 326 | and the user-agent is not required to flatten it |
dbaron@9850 | 327 | based on the <a href="http://www.w3.org/TR/css3-transforms/#transform-style-property">requirements</a> in [[!CSS3-TRANSFORMS]]. |
dbaron@9850 | 328 | </dt> |
dbaron@9850 | 329 | <dt><dfn>non-3d-preserving child</dfn></dt> |
dbaron@9850 | 330 | <dd> |
dbaron@9850 | 331 | A child C of a box P is a non-3d-preserving-child if |
dbaron@9850 | 332 | it is not a <i>3d-preserving child</i>. |
dbaron@9850 | 333 | </dd> |
dbaron@9850 | 334 | <dt><dfn>3d-preserving descendant</dfn></dt> |
dbaron@9850 | 335 | <dd> |
dbaron@9850 | 336 | Box D is a 3d-preserving descendant of box A if A is |
dbaron@9850 | 337 | an ancestor of D, and D and all of the boxes (if any) |
dbaron@9850 | 338 | in the ancestor chain from D to A |
dbaron@9850 | 339 | are <i>3d-preserving child</i> boxes. |
dbaron@9850 | 340 | </dd> |
dbaron@9850 | 341 | </dl> |
dbaron@9850 | 342 | |
dbaron@9850 | 343 | <p>The scrollable overflow of a box is the union of the following things, |
dbaron@9850 | 344 | all adjusted for transforms <span class="issue">undefined concept!</span> into the box's coordinate space:</p> |
dbaron@9850 | 345 | |
dbaron@9850 | 346 | <ul> |
dbaron@9850 | 347 | <li> |
dbaron@9850 | 348 | for the box and all of its <i>3d-preserving descendant</i> boxes: |
dbaron@9850 | 349 | <ul> |
dbaron@9850 | 350 | <li>the box's own padding edge (for the box itself) or border edge (for <i>3d-preserving descendant</i> boxes)</li> |
dbaron@9850 | 351 | <li>the bounds <span class="issue">undefined term!</span> of any text directly in the box</li> |
dbaron@9850 | 352 | <li><span class="issue">MORE HERE!</span> |
dbaron@9850 | 353 | </ul> |
dbaron@9850 | 354 | <li> |
dbaron@9850 | 355 | for all the <i>non-3d-preserving child</i> boxes of the |
dbaron@9850 | 356 | box and its <i>3d-preserving descendant</i> boxes, |
dbaron@9850 | 357 | the scrollable overflow of the box |
dbaron@9850 | 358 | </li> |
dbaron@9850 | 359 | </ul> |
dbaron@9850 | 360 | |
dbaron@9850 | 361 | <p class="issue"> |
dbaron@9850 | 362 | I wrote this definition off the top of my head, |
dbaron@9850 | 363 | so it can't possibly be right. |
dbaron@9850 | 364 | It's missing tons of pieces! |
dbaron@9850 | 365 | </p> |
dbaron@9850 | 366 | |
dbaron@9850 | 367 | <p> |
dbaron@9850 | 368 | The <dfn>scrollable overflow region</dfn> is the non-rectangular region |
dbaron@9850 | 369 | occupied by the <i>scrollable overflow</i>, and the |
dbaron@9850 | 370 | <dfn>scrollable overflow rectangle</dfn> is |
dbaron@9850 | 371 | the minimal rectangle whose axis is aligned to the box's axes |
dbaron@9850 | 372 | and contains the <i>scrollable overflow region</i>. |
dbaron@9850 | 373 | Note that the <i>scrollable overflow rectangle</i> is a rectangle |
dbaron@9850 | 374 | in the box's coordinate system, but might be non-rectangular |
dbaron@9850 | 375 | in other coordinate systems due to transforms [[CSS3-TRANSFORMS]]. |
dbaron@9850 | 376 | </p> |
dbaron@9850 | 377 | |
dbaron@9850 | 378 | <h3 id="border-box-overflow">Border box overflow</h3> |
dbaron@9850 | 379 | |
dbaron@9850 | 380 | <p class="issue"> |
dbaron@9850 | 381 | This concept has been proposed for some uses, such as for |
dbaron@9850 | 382 | determining what the 'outline' property goes around, and |
dbaron@9850 | 383 | as the basis of a coordinate system for specifying clips and masks, |
dbaron@9850 | 384 | but it's not clear if it's needed. |
dbaron@9850 | 385 | </p> |
dbaron@9850 | 386 | |
dbaron@9850 | 387 | <p> |
dbaron@9850 | 388 | The <dfn>border-box overflow</dfn> of a box is the |
dbaron@9850 | 389 | union of the box's border edge and the border edges of |
dbaron@9850 | 390 | the box's descendants.</p> |
dbaron@9850 | 391 | </p> |
dbaron@9850 | 392 | |
dbaron@9850 | 393 | <p class="issue"> |
dbaron@9850 | 394 | If needed, define more formally, as for scrollable overflow above. |
dbaron@9850 | 395 | (Maybe even share the definitions in an appropriate way!) |
dbaron@9850 | 396 | </p> |
dbaron@9850 | 397 | |
dbaron@9850 | 398 | <p> |
dbaron@9850 | 399 | The <dfn>border-box overflow region</dfn> is the non-rectangular region |
dbaron@9850 | 400 | occupied by the <i>border-box overflow</i>, and the |
dbaron@9850 | 401 | <dfn>border-box overflow rectangle</dfn> is |
dbaron@9850 | 402 | the minimal rectangle whose axis is aligned to the box's axes |
dbaron@9850 | 403 | and contains the <i>border-box overflow region</i>. |
dbaron@9850 | 404 | Note that the <i>border-box overflow rectangle</i> is a rectangle |
dbaron@9850 | 405 | in the box's coordinate system, but might be non-rectangular |
dbaron@9850 | 406 | in other coordinate systems due to transforms [[CSS3-TRANSFORMS]]. |
dbaron@9850 | 407 | </p> |
dbaron@9850 | 408 | |
dbaron@7811 | 409 | <h2 id="overflow-properties">Overflow properties</h2> |
dbaron@7811 | 410 | |
dbaron@7814 | 411 | <p> |
dbaron@7814 | 412 | The ''overflow-x'' property specifies |
dbaron@7814 | 413 | the handling of overflow in the horizontal direction |
dbaron@7814 | 414 | (i.e., overflow from the left and right sides of the box), |
dbaron@7814 | 415 | and the ''overflow-y'' property specifies the handling |
dbaron@7814 | 416 | of overflow in the vertical direction |
dbaron@7814 | 417 | (i.e., overflow from the top and bottom sides of the box) |
dbaron@7814 | 418 | </p> |
dbaron@7814 | 419 | |
dbaron@7811 | 420 | <table class=propdef> |
dbaron@7811 | 421 | <tr> |
dbaron@7811 | 422 | <th>Name: |
dbaron@7811 | 423 | <td><dfn>overflow-x</dfn>, <dfn>overflow-y</dfn> |
dbaron@7811 | 424 | <tr> |
dbaron@7811 | 425 | <th><a href="#values">Value</a>: |
dbaron@7811 | 426 | <td>visible | hidden | scroll | auto | paged-x | paged-y | paged-x-controls | paged-y-controls | fragments |
dbaron@7811 | 427 | <tr> |
dbaron@7811 | 428 | <th>Initial: |
dbaron@7811 | 429 | <td>visible |
dbaron@7811 | 430 | <tr> |
dbaron@7811 | 431 | <th>Applies to: |
dbaron@7819 | 432 | <td>block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]] |
dbaron@7811 | 433 | <tr> |
dbaron@7811 | 434 | <th>Inherited: |
dbaron@7811 | 435 | <td>no |
dbaron@7811 | 436 | <tr> |
dbaron@7811 | 437 | <th>Percentages: |
dbaron@7811 | 438 | <td>N/A |
dbaron@7811 | 439 | <tr> |
dbaron@7811 | 440 | <th>Media: |
dbaron@7811 | 441 | <td>visual |
dbaron@7811 | 442 | <tr> |
dbaron@7811 | 443 | <th>Computed value: |
dbaron@7811 | 444 | <td>see below |
dbaron@7811 | 445 | <tr> |
dbaron@7811 | 446 | <th>Animatable: |
dbaron@7811 | 447 | <td>no |
dbaron@7811 | 448 | <tr> |
dbaron@7811 | 449 | <th>Canonical order: |
dbaron@7811 | 450 | <td><abbr title="follows order of property value definition">per grammar</abbr> |
dbaron@7811 | 451 | </table> |
dbaron@7811 | 452 | |
dbaron@7814 | 453 | <p> |
dbaron@7814 | 454 | The 'overflow' property is a shorthand property |
dbaron@7814 | 455 | that sets the specified values of both 'overflow-x' and 'overflow-y' |
dbaron@7814 | 456 | to the value specified for 'overflow'. |
dbaron@7814 | 457 | </p> |
dbaron@7814 | 458 | |
dbaron@7811 | 459 | <table class=propdef> |
dbaron@7811 | 460 | <tr> |
dbaron@7811 | 461 | <th>Name: |
dbaron@7811 | 462 | <td><dfn>overflow</dfn> |
dbaron@7811 | 463 | <tr> |
dbaron@7811 | 464 | <th><a href="#values">Value</a>: |
dbaron@7811 | 465 | <td>visible | hidden | scroll | auto | paged-x | paged-y | paged-x-controls | paged-y-controls | fragments |
dbaron@7811 | 466 | <tr> |
dbaron@7811 | 467 | <th>Initial: |
dbaron@7811 | 468 | <td>see individual properties |
dbaron@7811 | 469 | <tr> |
dbaron@7811 | 470 | <th>Applies to: |
dbaron@8332 | 471 | <td>block containers [[!CSS21]], flex containers [[!CSS3-FLEXBOX]], and grid containers [[!CSS3-GRID-LAYOUT]] |
dbaron@7811 | 472 | <tr> |
dbaron@7811 | 473 | <th>Inherited: |
dbaron@7811 | 474 | <td>no |
dbaron@7811 | 475 | <tr> |
dbaron@7811 | 476 | <th>Percentages: |
dbaron@7811 | 477 | <td>N/A |
dbaron@7811 | 478 | <tr> |
dbaron@7811 | 479 | <th>Media: |
dbaron@7811 | 480 | <td>visual |
dbaron@7811 | 481 | <tr> |
dbaron@7811 | 482 | <th>Computed value: |
dbaron@7811 | 483 | <td>see individual properties |
dbaron@7811 | 484 | <tr> |
dbaron@7811 | 485 | <th>Animatable: |
dbaron@7811 | 486 | <td>no |
dbaron@7811 | 487 | <tr> |
dbaron@7811 | 488 | <th>Canonical order: |
dbaron@7811 | 489 | <td><abbr title="follows order of property value definition">per grammar</abbr> |
dbaron@7811 | 490 | </table> |
dbaron@7811 | 491 | |
dbaron@7811 | 492 | <p>The values of these properties are:</p> |
dbaron@7811 | 493 | |
dbaron@7811 | 494 | <dl> |
dbaron@7811 | 495 | <dt><dfn>visible</dfn> |
dbaron@7811 | 496 | <dd> |
dbaron@7811 | 497 | There is no special handling of overflow, that is, it |
dbaron@7811 | 498 | may be rendered outside the block container. |
dbaron@7811 | 499 | </dd> |
dbaron@7811 | 500 | <dt><dfn>hidden</dfn> |
dbaron@7811 | 501 | <dt><dfn>scroll</dfn> |
dbaron@7811 | 502 | <dt><dfn>auto</dfn> |
dbaron@7811 | 503 | <dd> |
dbaron@7811 | 504 | These values are collectively the <dfn>scrolling values</dfn>; |
dbaron@7811 | 505 | they are defined in the section on |
dbaron@7811 | 506 | <a href="#scrolling-overflow">scrolling and hidden overflow</a>. |
dbaron@7811 | 507 | </dd> |
dbaron@7811 | 508 | <dt><dfn>paged-x</dfn> |
dbaron@7811 | 509 | <dt><dfn>paged-y</dfn> |
dbaron@7811 | 510 | <dt><dfn>paged-x-controls</dfn> |
dbaron@7811 | 511 | <dt><dfn>paged-y-controls</dfn> |
dbaron@7811 | 512 | <dt><dfn>fragments</dfn> |
dbaron@7811 | 513 | <dd> |
dbaron@7811 | 514 | These values are collectively the <dfn>fragmenting values</dfn>; |
dbaron@7811 | 515 | they are defined in the sections on |
dbaron@7811 | 516 | <a href="#paginated-overflow">paginated overflow</a> and |
dbaron@7811 | 517 | <a href="#fragment-overflow">fragment overflow</a>. |
dbaron@7811 | 518 | </dd> |
dbaron@7811 | 519 | </dl> |
dbaron@7811 | 520 | |
dbaron@7811 | 521 | <div id="overflow-computed-values"> |
dbaron@7811 | 522 | <p>The computed values of 'overflow-x' and 'overflow-y' |
dbaron@7811 | 523 | are determined from the cascaded values [[!CSS3CASCADE]] |
dbaron@7811 | 524 | based on the following rules:</p> |
dbaron@7811 | 525 | |
dbaron@7811 | 526 | <ol> |
dbaron@7811 | 527 | <li> |
dbaron@7811 | 528 | If one or both of the cascaded values are |
dbaron@7811 | 529 | <i>fragmenting values</i>, then: |
dbaron@7811 | 530 | <ol> |
dbaron@7811 | 531 | <li> |
dbaron@7811 | 532 | If one of the cascaded values is one of the |
dbaron@7811 | 533 | <i>fragmenting values</i> |
dbaron@7811 | 534 | and the other is not, |
dbaron@7811 | 535 | then the computed values are |
dbaron@7811 | 536 | the same as the cascaded values. |
dbaron@7811 | 537 | </li> |
dbaron@7811 | 538 | <li> |
dbaron@7811 | 539 | If both of the cascaded values are <i>fragmenting values</i>, then: |
dbaron@7811 | 540 | <ol> |
dbaron@7811 | 541 | <li> |
dbaron@7811 | 542 | for horizontal writing mode [[!CSS3-WRITING-MODES]], |
dbaron@7811 | 543 | the computed value for ''overflow-y'' is the cascaded value |
dbaron@7811 | 544 | and the computed value for ''overflow-x'' is ''hidden'', or |
dbaron@7811 | 545 | </li> |
dbaron@7811 | 546 | <li> |
dbaron@7811 | 547 | for vertical writing mode [[!CSS3-WRITING-MODES]], |
dbaron@7811 | 548 | the computed value for ''overflow-x'' is the cascaded value |
dbaron@7811 | 549 | and the computed value for ''overflow-y'' is ''hidden''. |
dbaron@7811 | 550 | </li> |
dbaron@7811 | 551 | </ol> |
dbaron@7811 | 552 | </li> |
dbaron@7811 | 553 | </ol> |
dbaron@7811 | 554 | </li> |
dbaron@7811 | 555 | <li> |
dbaron@7811 | 556 | Otherwise, if one cascaded values is |
dbaron@7811 | 557 | one of the <i>scrolling values</i> |
dbaron@7811 | 558 | and the other is ''visible'', |
dbaron@7811 | 559 | then computed values are the cascaded values |
dbaron@7811 | 560 | with ''visible'' changed to ''hidden''. |
dbaron@7811 | 561 | </li> |
dbaron@7811 | 562 | <li> |
dbaron@7811 | 563 | Otherwise, the computed values are as specified. |
dbaron@7811 | 564 | </li> |
dbaron@7811 | 565 | </ol> |
dbaron@7811 | 566 | </div> |
dbaron@7811 | 567 | |
dbaron@7811 | 568 | <p class="issue"> |
dbaron@7811 | 569 | Are all 4 of the ''paged-*'' values really needed? |
dbaron@7811 | 570 | </p> |
dbaron@7811 | 571 | |
dbaron@7811 | 572 | <p> |
dbaron@7811 | 573 | When the <i>fragmenting values</i> are used, |
dbaron@7811 | 574 | the overflow from the fragments themselves |
dbaron@7811 | 575 | treats the fragmenting value as ''hidden''. |
dbaron@7811 | 576 | <span class="issue">Is this the right behavior?</span> |
dbaron@7811 | 577 | <span class="issue">Give example.</span> |
dbaron@7811 | 578 | </p> |
dbaron@7811 | 579 | |
dbaron@7820 | 580 | <p class="issue"> |
dbaron@7820 | 581 | [[CSS3-MARQUEE]] describes an 'overflow-style' property, |
dbaron@7820 | 582 | but it has not picked up implementation experience |
dbaron@7820 | 583 | that the working group is aware of. |
dbaron@7820 | 584 | Should this document treat 'overflow-style' as a defunct proposal, |
dbaron@7820 | 585 | or should this document describe the 'overflow-style' property |
dbaron@7820 | 586 | and attempt to revive it, |
dbaron@7820 | 587 | despite that implementations have implemented |
dbaron@7820 | 588 | 'overflow-x' and 'overflow-y' instead? |
dbaron@7820 | 589 | </p> |
dbaron@7820 | 590 | |
dbaron@7916 | 591 | <p class="issue"> |
dbaron@7916 | 592 | There are <a href="http://lists.w3.org/Archives/Public/www-style/2012May/1197.html">discussions</a> |
dbaron@7916 | 593 | about how overflow, overflow-style, overflow-x and overflow-y |
dbaron@7916 | 594 | should work and interact with each other. |
dbaron@7916 | 595 | Until consensus on this topic is reached, |
dbaron@7916 | 596 | it is not completely clear which of these |
dbaron@7916 | 597 | should be used for |
dbaron@7916 | 598 | paged-x | paged-y | paged-x-controls | paged-y-controls | fragments |
dbaron@7916 | 599 | </p> |
dbaron@7916 | 600 | |
dbaron@6483 | 601 | <h2 id="scrolling-overflow">Scrolling and hidden overflow</h2> |
dbaron@6483 | 602 | |
dbaron@6483 | 603 | <p class="issue"> |
dbaron@6483 | 604 | Move material from [[CSS21]] and [[CSS3BOX]] here. |
dbaron@6483 | 605 | </p> |
dbaron@6470 | 606 | |
dbaron@6470 | 607 | <h2 id="paginated-overflow">Paginated overflow</h2> |
dbaron@6470 | 608 | |
dbaron@6497 | 609 | <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 | 610 | |
dbaron@6470 | 611 | <p class="issue">Ability to display N pages at once |
dbaron@6470 | 612 | rather than just one page at once?</p> |
dbaron@6470 | 613 | |
dbaron@6497 | 614 | <p class="issue"> |
dbaron@6497 | 615 | The current implementation of paginated overflow uses |
dbaron@6497 | 616 | the 'overflow'/'overflow-x'/'overflow-y' properties |
dbaron@6497 | 617 | rather than the 'overflow-style' property as proposed |
dbaron@6497 | 618 | in the [[CSS3GCPM]] draft |
dbaron@6497 | 619 | (which also matches the [[CSS3-MARQUEE]] proposal). |
dbaron@6497 | 620 | We should probably switch away from 'overflow-style', |
dbaron@6497 | 621 | but that's not 100% clear. |
dbaron@6497 | 622 | </p> |
dbaron@6497 | 623 | |
dbaron@6484 | 624 | <h2 id="fragment-overflow">Fragment overflow</h2> |
dbaron@6470 | 625 | |
dbaron@6470 | 626 | <p> |
dbaron@6470 | 627 | This section introduces and defines the meaning of |
dbaron@6484 | 628 | the new ''fragments'' value of the 'overflow' property. |
dbaron@6470 | 629 | </p> |
dbaron@6470 | 630 | |
dbaron@6470 | 631 | <p> |
dbaron@6484 | 632 | When the computed value of 'overflow' for an element is ''fragments'', |
dbaron@6470 | 633 | and implementations would otherwise have created a box for the element, |
dbaron@6491 | 634 | then implementations must create a sequence of <dfn>fragment box</dfn>es |
dbaron@6470 | 635 | for that element. |
dbaron@6491 | 636 | (It is possible for an element with ''overflow: fragments'' |
dbaron@6491 | 637 | to generate only one <i>fragment box</i>. |
dbaron@6484 | 638 | However, if an element's computed 'overflow' is not ''fragments'', |
dbaron@6484 | 639 | then its box is not a <i>fragment box</i>.) |
dbaron@6484 | 640 | Every <i>fragment box</i> is a fragmentation container, |
dbaron@6491 | 641 | and any overflow |
dbaron@6491 | 642 | that would cause that fragmentation container to fragment |
dbaron@6491 | 643 | causes another <i>fragment box</i> created as a next sibling |
dbaron@6470 | 644 | of the previous one. |
dbaron@6470 | 645 | <span class="issue">Or is it as though it's a next sibling of |
dbaron@6470 | 646 | the element? Need to figure out exactly how this interacts with |
dbaron@6470 | 647 | other box-level fixup.</span> |
dbaron@6492 | 648 | Additionally, if the <i>fragment box</i> is also |
dbaron@6492 | 649 | a multi-column box (as defined in [[!CSS3COL]] |
dbaron@6492 | 650 | <span class="issue">though it defines <i>multi-column element</i></span>) |
dbaron@6492 | 651 | any content that would lead to the creation of <i>overflow columns</i> [[!CSS3COL]] |
dbaron@6492 | 652 | instead is flown into an additional fragment box. |
dbaron@6491 | 653 | However, fragment boxes may themselves be broken |
dbaron@6491 | 654 | (due to fragmentation in a fragmentation context outside of them, |
dbaron@6491 | 655 | such as pages, columns, or other fragment boxes); |
dbaron@6491 | 656 | such breaking leads to fragments of the same fragment box |
dbaron@6491 | 657 | rather than multiple fragment boxes. |
dbaron@6491 | 658 | (This matters because fragment boxes may be styled by their index; |
dbaron@6491 | 659 | such breaking leads to multiple fragments of a fragment box |
dbaron@6491 | 660 | with a single index. |
dbaron@6491 | 661 | This design choice is so that |
dbaron@6491 | 662 | breaking a fragment box across pages does not break |
dbaron@6491 | 663 | the association of indices to particular pieces of content.) |
dbaron@6491 | 664 | <span class="issue">Should a forced break that breaks to |
dbaron@6491 | 665 | an outer fragmentation context cause a new fragment of a single |
dbaron@6491 | 666 | fragment box or a new fragment box?</span> |
dbaron@6491 | 667 | <span class="issue">Should we find a term other than |
dbaron@6491 | 668 | <i>fragment box</i> here to make this a little less confusing?</span> |
dbaron@6470 | 669 | </p> |
dbaron@6470 | 670 | |
dbaron@6470 | 671 | <p class="issue"> |
dbaron@6491 | 672 | What if we want to be able to style the pieces of an element |
dbaron@6491 | 673 | split within another type of fragmentation context? |
dbaron@6491 | 674 | These rules prevent ever using ''::nth-fragment()'' for that, |
dbaron@6491 | 675 | despite that the name seems the most logical name for such a feature. |
dbaron@6470 | 676 | </p> |
dbaron@6470 | 677 | |
dbaron@6475 | 678 | <div class="example"> |
dbaron@6477 | 679 | <table class="source-demo-pair"><tr><td><pre><!DOCTYPE HTML> |
dbaron@6475 | 680 | <title>Breaking content into |
dbaron@6475 | 681 | equal-sized cards</title> |
dbaron@6475 | 682 | <style> |
dbaron@6475 | 683 | .in-cards { |
dbaron@6484 | 684 | overflow: fragments; |
dbaron@6475 | 685 | |
dbaron@6475 | 686 | width: 13em; |
dbaron@6475 | 687 | height: 8em; |
dbaron@6475 | 688 | |
dbaron@6475 | 689 | padding: 4px; |
dbaron@6475 | 690 | border: medium solid blue; |
dbaron@6475 | 691 | margin: 6px; |
dbaron@6475 | 692 | |
dbaron@6475 | 693 | font: medium/1.3 Times New |
dbaron@6475 | 694 | Roman, Times, serif; |
dbaron@6475 | 695 | } |
dbaron@6475 | 696 | </style> |
dbaron@6475 | 697 | <div class="in-cards"> |
dbaron@6475 | 698 | In this example, the text in the div |
dbaron@6475 | 699 | is broken into a series of cards. |
dbaron@6475 | 700 | These cards all have the same style. |
dbaron@6475 | 701 | The presence of enough content to |
dbaron@6475 | 702 | overflow one of the cards causes |
dbaron@6475 | 703 | another one to be created. The second |
dbaron@6475 | 704 | card is created just like it's the |
dbaron@6475 | 705 | next sibling of the first. |
dbaron@6477 | 706 | </div></pre></td><td> |
dbaron@6475 | 707 | <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 | 708 | <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 | 709 | </td></tr></table> |
dbaron@6475 | 710 | </div> |
dbaron@6475 | 711 | |
dbaron@6487 | 712 | <p class="issue"> |
dbaron@6487 | 713 | We should specify that ''overflow: fragments'' does not apply |
dbaron@6487 | 714 | to at least some table parts, |
dbaron@6487 | 715 | and perhaps other elements as well. |
dbaron@6487 | 716 | We need to determine exactly which ones. |
dbaron@6487 | 717 | </p> |
dbaron@6487 | 718 | |
dbaron@6488 | 719 | <p class="issue"> |
dbaron@6488 | 720 | This specification needs to say which type of |
dbaron@6488 | 721 | fragmentation context is created |
dbaron@6488 | 722 | so that it's clear which values of the 'break' property |
dbaron@6488 | 723 | cause breaks within this context. |
dbaron@6488 | 724 | We probably want ''break: regions'' to apply. |
dbaron@6488 | 725 | </p> |
dbaron@6488 | 726 | |
dbaron@6494 | 727 | <p class="issue"> |
dbaron@6494 | 728 | This specification needs a processing model |
dbaron@6494 | 729 | that will apply in cases where the layout containing the |
dbaron@6494 | 730 | fragments has characteristics that use the intrinsic size of the fragments |
dbaron@6494 | 731 | to change the amount of space available for them, |
dbaron@6494 | 732 | such as [[CSS3-GRID-LAYOUT]]. |
dbaron@6494 | 733 | There has already been some work on such a processing model |
dbaron@6494 | 734 | in [[CSS3-REGIONS]], |
dbaron@6494 | 735 | and the work done on a model there, |
dbaron@6494 | 736 | and the editors of that specification, |
dbaron@6494 | 737 | should inform what happens in this specification. |
dbaron@6494 | 738 | </p> |
dbaron@6494 | 739 | |
dbaron@6484 | 740 | <h3 id="fragment-styling">Fragment styling</h3> |
dbaron@6470 | 741 | |
dbaron@6484 | 742 | <h4 id="fragment-pseudo-element">The ::nth-fragment() pseudo-element</h4> |
dbaron@6470 | 743 | |
dbaron@6470 | 744 | <p> |
dbaron@6484 | 745 | The ::nth-fragment() pseudo-element is a pseudo-element |
dbaron@6484 | 746 | that describes some of the <i>fragment box</i>es generated by an element. |
dbaron@6470 | 747 | The argument to the pseudo-element takes the same syntax |
dbaron@6470 | 748 | as the argument to the :nth-child() pseudo-class |
dbaron@6470 | 749 | defined in [[!SELECT]], and has the same meaning |
dbaron@6470 | 750 | except that the number is relative to |
dbaron@6484 | 751 | <i>fragment box</i>es generated by the element |
dbaron@6470 | 752 | instead of siblings of the element. |
dbaron@6470 | 753 | </p> |
dbaron@6470 | 754 | |
dbaron@6470 | 755 | <p class="note"> |
dbaron@6484 | 756 | Selectors that allow addressing fragments |
dbaron@6470 | 757 | by counting from the end rather than the start |
dbaron@6470 | 758 | are intentionally not provided. |
dbaron@6470 | 759 | Such selectors would interfere with determining |
dbaron@6484 | 760 | the number of fragments. |
dbaron@6470 | 761 | </p> |
dbaron@6470 | 762 | |
dbaron@6489 | 763 | <p class="issue"> |
dbaron@6489 | 764 | Depending on future discussions, |
dbaron@6489 | 765 | this ''::nth-fragment(<var>an+b</var>)'' syntax |
dbaron@6489 | 766 | may be replaced with |
dbaron@6489 | 767 | the new ''::fragment:nth(<var>an+b</var>)'' syntax. |
dbaron@6489 | 768 | </p> |
dbaron@6489 | 769 | |
dbaron@6484 | 770 | <h4 id="style-of-fragments">Styling of fragments</h4> |
dbaron@6470 | 771 | |
dbaron@6470 | 772 | <p class="issue"> |
dbaron@6484 | 773 | Should this apply to fragment overflow only, |
dbaron@6470 | 774 | or also to paginated overflow? |
dbaron@6470 | 775 | (If it applies, |
dbaron@6470 | 776 | then stricter property restrictions would be needed |
dbaron@6470 | 777 | for paginated overflow.) |
dbaron@6470 | 778 | </p> |
dbaron@6470 | 779 | |
dbaron@6470 | 780 | <p> |
dbaron@6484 | 781 | In the absence of rules with ''::nth-fragment()'' pseudo-elements, |
dbaron@6484 | 782 | the computed style for each <i>fragment box</i> |
dbaron@6470 | 783 | is the computed style for the element |
dbaron@6484 | 784 | for which the <i>fragment box</i> was created. |
dbaron@6484 | 785 | However, the style for a <i>fragment box</i> is also influenced |
dbaron@6470 | 786 | by rules whose selector's <i>subject</i> [[!SELECT]] |
dbaron@6484 | 787 | has an ''::nth-fragment()'' pseudo-element, |
dbaron@6484 | 788 | if the 1-based number of the <i>fragment box</i> matches |
dbaron@6484 | 789 | that ''::nth-fragment()'' pseudo-element |
dbaron@6484 | 790 | and the selector (excluding the ''::nth-fragment()'' pseudo-element) |
dbaron@6484 | 791 | matches the element generating the fragments. |
dbaron@6470 | 792 | </p> |
dbaron@6470 | 793 | |
dbaron@6486 | 794 | <p> |
dbaron@6486 | 795 | When determining the style of the <i>fragment box</i>, |
dbaron@6486 | 796 | these rules that match the fragment pseudo-element |
dbaron@6486 | 797 | cascade together with the rules that match the element, |
dbaron@6486 | 798 | with the fragment pseudo-element adding the specificity |
dbaron@6486 | 799 | of a pseudo-class to the specificity calculation. |
dbaron@6486 | 800 | <span class="issue">Does this need to be specified in |
dbaron@6486 | 801 | the cascading module as well?</span> |
dbaron@6486 | 802 | </p> |
dbaron@6486 | 803 | |
dbaron@6477 | 804 | <div class="example"> |
dbaron@6477 | 805 | <table class="source-demo-pair"><tr><td><pre><!DOCTYPE HTML> |
dbaron@6477 | 806 | <style> |
dbaron@6477 | 807 | .bouncy-columns { |
dbaron@6484 | 808 | overflow: fragments; |
dbaron@6477 | 809 | width: 6em; |
dbaron@6477 | 810 | height: 10em; |
dbaron@6477 | 811 | float: left; |
dbaron@6477 | 812 | margin: 1em; |
dbaron@6477 | 813 | font: medium/1.25 Times New |
dbaron@6477 | 814 | Roman, Times, serif; |
dbaron@6477 | 815 | } |
dbaron@6484 | 816 | .bouncy-columns::nth-fragment(1) { |
dbaron@6477 | 817 | background: aqua; color: black; |
dbaron@6477 | 818 | transform: rotate(-3deg); |
dbaron@6477 | 819 | } |
dbaron@6484 | 820 | .bouncy-columns::nth-fragment(2) { |
dbaron@6477 | 821 | background: yellow; color: black; |
dbaron@6477 | 822 | transform: rotate(3deg); |
dbaron@6477 | 823 | } |
dbaron@6477 | 824 | </style> |
dbaron@6477 | 825 | <div class="bouncy-columns"> |
dbaron@6477 | 826 | <i>...</i> |
dbaron@6477 | 827 | </div></pre></td><td> |
dbaron@6477 | 828 | <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 | 829 | <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 | 830 | <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 | 831 | </td></tr></table> |
dbaron@6477 | 832 | </div> |
dbaron@6477 | 833 | |
dbaron@6470 | 834 | <p> |
dbaron@6484 | 835 | Styling an ''::nth-fragment()'' pseudo-element with the 'overflow' |
dbaron@6490 | 836 | property does take effect; |
dbaron@6490 | 837 | if a <i>fragment box</i> has a |
dbaron@6490 | 838 | computed value of 'overflow' other than ''fragments'' |
dbaron@6490 | 839 | then that fragment box is the last fragment. |
dbaron@6490 | 840 | However, overriding ''overflow'' on the first fragment |
dbaron@6490 | 841 | does not cause the <i>fragment box</i> not to exist; |
dbaron@6490 | 842 | whether there are fragment boxes at all is determined by |
dbaron@6490 | 843 | the computed value of overflow for the element. |
dbaron@7813 | 844 | <span class="issue">Need to reword this to refer to the |
dbaron@7813 | 845 | appropriate choice of ''overflow-x'' or ''overflow-y'', |
dbaron@7813 | 846 | and then point to rule about the handling of the other one |
dbaron@7813 | 847 | of ''overflow-x'' or ''overflow-y''.</span> |
dbaron@6470 | 848 | </p> |
dbaron@6470 | 849 | |
dbaron@6470 | 850 | <p> |
dbaron@6485 | 851 | Styling an ''::nth-fragment()'' pseudo-element with the 'content' |
dbaron@6485 | 852 | property has no effect; |
dbaron@6485 | 853 | the computed value of 'content' for the fragment box |
dbaron@6485 | 854 | remains the same as the computed value of content for the element. |
dbaron@6485 | 855 | </p> |
dbaron@6485 | 856 | |
dbaron@6485 | 857 | <p> |
dbaron@6484 | 858 | Specifying ''display: none'' for a <i>fragment box</i> causes |
dbaron@6484 | 859 | the fragment box with that index not to be generated. |
dbaron@6470 | 860 | However, in terms of the indices |
dbaron@6484 | 861 | used for matching ''::nth-fragment()'' pseudo-elements |
dbaron@6484 | 862 | of later fragment boxes, |
dbaron@6470 | 863 | it still counts as though it was generated. |
dbaron@6470 | 864 | However, since it is not generated, it does not contain any content. |
dbaron@6470 | 865 | </p> |
dbaron@6470 | 866 | |
dbaron@7813 | 867 | <p> |
dbaron@7813 | 868 | Specifying other values of 'display', 'position', |
dbaron@7813 | 869 | or 'float' is permitted, but is not allowed to change |
dbaron@7813 | 870 | the computed value of 'display-inside'. |
dbaron@7813 | 871 | (Since 'overflow', 'overflow-x', and 'overflow-y' only |
dbaron@7819 | 872 | apply to block containers, flex containers, and grid containers |
dbaron@7813 | 873 | the computed value of 'display-inside' is always |
dbaron@7819 | 874 | ''block'', ''flex'' or ''grid''. |
dbaron@7813 | 875 | <span class="issue">Need to specify exactly how this works, |
dbaron@7813 | 876 | but it depends on |
dbaron@7813 | 877 | having 'display-inside' and 'display-outside' specified.</span> |
dbaron@6470 | 878 | </p> |
dbaron@6470 | 879 | |
dbaron@6470 | 880 | <p> |
dbaron@6470 | 881 | To match the model for other pseudo-elements |
dbaron@6470 | 882 | where the pseudo-elements live inside their corresponding element, |
dbaron@6484 | 883 | declarations in ''::nth-fragment()'' pseudo-elements override |
dbaron@6470 | 884 | declarations in rules without the pseudo-element. |
dbaron@6470 | 885 | The relative priority within such declarations is determined |
dbaron@6470 | 886 | by normal cascading order (see [[!CSS21]]). |
dbaron@6470 | 887 | </p> |
dbaron@6470 | 888 | |
dbaron@6470 | 889 | <p> |
dbaron@6484 | 890 | Styles specified on ''::nth-fragment()'' pseudo-elements |
dbaron@6484 | 891 | do affect inheritance to content within the <i>fragment box</i>. |
dbaron@6484 | 892 | In other words, the content within the <i>fragment box</i> must |
dbaron@6484 | 893 | inherit from the fragment box's style (i.e., the pseudo-element style) |
dbaron@6470 | 894 | rather than directly from the element. |
dbaron@6484 | 895 | This means that elements split between fragment boxes may |
dbaron@6470 | 896 | have different styles for different parts of the element. |
dbaron@6470 | 897 | </p> |
dbaron@6470 | 898 | |
dbaron@6472 | 899 | <p class="issue"> |
dbaron@6472 | 900 | This inheritance rule allows specifying styles indirectly |
dbaron@6472 | 901 | (by using explicit ''inherit'' or using default inheritance |
dbaron@6472 | 902 | on properties that don't apply to '':first-letter'') |
dbaron@6472 | 903 | that can't be specified directly |
dbaron@6472 | 904 | (based on the rules in the next section). |
dbaron@6472 | 905 | This is a problem. |
dbaron@6484 | 906 | The restrictions that apply to styling inside fragments |
dbaron@6484 | 907 | should also apply to inheritance from fragments. |
dbaron@6472 | 908 | </p> |
dbaron@6472 | 909 | |
dbaron@6480 | 910 | <div class="example"> |
dbaron@6480 | 911 | <table class="source-demo-pair"><tr><td><pre><!DOCTYPE HTML> |
dbaron@6480 | 912 | <style> |
dbaron@6480 | 913 | .article { |
dbaron@6484 | 914 | overflow: fragments; |
dbaron@6480 | 915 | } |
dbaron@6484 | 916 | .article::nth-fragment(1) { |
dbaron@6480 | 917 | font-size: 1.5em; |
dbaron@6480 | 918 | margin-bottom: 1em; |
dbaron@6480 | 919 | height: 4em; |
dbaron@6480 | 920 | } |
dbaron@6491 | 921 | .article::nth-fragment(2) { |
dbaron@6480 | 922 | margin-left: 5em; |
dbaron@6480 | 923 | margin-right: 2em; |
dbaron@6480 | 924 | } |
dbaron@6480 | 925 | </style> |
dbaron@6480 | 926 | <div class="article"> |
dbaron@6480 | 927 | The <code>font-size</code> property<i>...</i> |
dbaron@6480 | 928 | </div></pre></td><td> |
dbaron@6484 | 929 | <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 | 930 | <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 | 931 | </td></tr></table> |
dbaron@6480 | 932 | </div> |
dbaron@6478 | 933 | |
dbaron@6484 | 934 | <h4 id="style-in-fragments">Styling inside fragments</h4> |
dbaron@6470 | 935 | |
dbaron@6470 | 936 | <p class="issue"> |
dbaron@6484 | 937 | Should this apply to fragment overflow only, |
dbaron@6470 | 938 | or also to paginated overflow, |
dbaron@6470 | 939 | or even to pagination across pages? |
dbaron@6470 | 940 | </p> |
dbaron@6470 | 941 | |
dbaron@6470 | 942 | <p> |
dbaron@6484 | 943 | The ''::nth-fragment()'' pseudo-element |
dbaron@6470 | 944 | can also be used to style |
dbaron@6484 | 945 | content inside of a <i>fragment box</i>. |
dbaron@6470 | 946 | Unlike the ''::first-line'' and ''::first-letter'' pseudo-elements, |
dbaron@6484 | 947 | the ''::nth-fragment()'' pseudo-element can be applied |
dbaron@6470 | 948 | to parts of the selector other than the subject: |
dbaron@6470 | 949 | in particular, it can match ancestors of the subject. |
dbaron@6470 | 950 | However, the only CSS properties applied |
dbaron@6470 | 951 | by rules with such selectors |
dbaron@6470 | 952 | are those that apply |
dbaron@6470 | 953 | to the ''::first-letter'' pseudo-element. |
dbaron@6470 | 954 | </p> |
dbaron@6470 | 955 | |
dbaron@6470 | 956 | <p> |
dbaron@6470 | 957 | To be more precise, |
dbaron@6484 | 958 | when a rule's selector has ''::nth-fragment()'' pseudo-elements |
dbaron@6470 | 959 | attached to parts of the selector other than the subject, |
dbaron@6470 | 960 | the declarations in that rule apply to |
dbaron@6470 | 961 | a fragment (or pseudo-element thereof) when: |
dbaron@6470 | 962 | </p> |
dbaron@6470 | 963 | <ol> |
dbaron@6470 | 964 | <li> |
dbaron@6470 | 965 | the declarations are for properties that apply to the |
dbaron@6470 | 966 | ''::first-letter'' pseudo-element, |
dbaron@6470 | 967 | </li> |
dbaron@6470 | 968 | <li> |
dbaron@6470 | 969 | the declarations would apply to |
dbaron@6470 | 970 | that fragment (or pseudo-element thereof) |
dbaron@6484 | 971 | had those ''::nth-fragment()'' pseudo-elements been removed, |
dbaron@6470 | 972 | with a particular association between |
dbaron@6470 | 973 | each sequence of simple selectors and the element it matched, |
dbaron@6470 | 974 | and |
dbaron@6470 | 975 | </li> |
dbaron@6470 | 976 | <li> |
dbaron@6484 | 977 | for each removed ''::nth-fragment()'' pseudo-element, |
dbaron@6484 | 978 | the fragment lives within a <i>fragment box</i> |
dbaron@6470 | 979 | of the element associated in that association |
dbaron@6470 | 980 | with the selector that the pseudo-element was attached to, |
dbaron@6470 | 981 | and whose index matches the pseudo-element. |
dbaron@6470 | 982 | </li> |
dbaron@6470 | 983 | </ol> |
dbaron@6470 | 984 | |
dbaron@6481 | 985 | <div class="example"> |
dbaron@6481 | 986 | <table class="source-demo-pair"><tr><td><pre><!DOCTYPE HTML> |
dbaron@6481 | 987 | <style> |
dbaron@6481 | 988 | .dark-columns { |
dbaron@6484 | 989 | overflow: fragments; |
dbaron@6481 | 990 | width: 6em; |
dbaron@6481 | 991 | height: 10em; |
dbaron@6481 | 992 | float: left; |
dbaron@6481 | 993 | margin-right: 1em; |
dbaron@6481 | 994 | font: medium/1.25 Times New |
dbaron@6481 | 995 | Roman, Times, serif; |
dbaron@6481 | 996 | } |
dbaron@6484 | 997 | .dark-columns::nth-fragment(1) { |
dbaron@6481 | 998 | background: aqua; color: black; |
dbaron@6481 | 999 | } |
dbaron@6484 | 1000 | .dark-columns::nth-fragment(1) :link { |
dbaron@6481 | 1001 | color: blue; |
dbaron@6481 | 1002 | } |
dbaron@6484 | 1003 | .dark-columns::nth-fragment(1) :visited { |
dbaron@6481 | 1004 | color: purple; |
dbaron@6481 | 1005 | } |
dbaron@6484 | 1006 | .dark-columns::nth-fragment(2) { |
dbaron@6481 | 1007 | background: navy; color: white; |
dbaron@6481 | 1008 | } |
dbaron@6484 | 1009 | .dark-columns::nth-fragment(2) :link { |
dbaron@6481 | 1010 | color: aqua; |
dbaron@6481 | 1011 | } |
dbaron@6484 | 1012 | .dark-columns::nth-fragment(2) :visited { |
dbaron@6481 | 1013 | color: fuchsia; |
dbaron@6481 | 1014 | } |
dbaron@6481 | 1015 | </style> |
dbaron@6481 | 1016 | <div class="dark-columns"> |
dbaron@6481 | 1017 | <i>...</i> |
dbaron@6481 | 1018 | </div></pre></td><td> |
dbaron@6484 | 1019 | <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 | 1020 | <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 | 1021 | </td></tr></table> |
dbaron@6481 | 1022 | </div> |
dbaron@6481 | 1023 | |
dbaron@6478 | 1024 | |
dbaron@6470 | 1025 | <h3 id="max-lines">The 'max-lines' property</h3> |
dbaron@6470 | 1026 | |
dbaron@6470 | 1027 | <p> |
dbaron@6470 | 1028 | Authors may wish to style the opening lines of an element |
dbaron@6470 | 1029 | with different styles |
dbaron@6484 | 1030 | by putting those opening lines in a separate fragment. |
dbaron@6470 | 1031 | However, since it may be difficult to predict the exact height |
dbaron@6470 | 1032 | occupied by those lines |
dbaron@6484 | 1033 | in order to restrict the first fragment to that height, |
dbaron@6470 | 1034 | this specification introduces a 'max-lines' property |
dbaron@6484 | 1035 | that forces a fragment to break |
dbaron@6470 | 1036 | after a specified number of lines. |
dbaron@6470 | 1037 | This forces a break after the given number of lines |
dbaron@6470 | 1038 | contained within the element or its descendants, |
dbaron@6470 | 1039 | as long as those lines are in the same block formatting context. |
dbaron@6470 | 1040 | </p> |
dbaron@6470 | 1041 | |
dbaron@6470 | 1042 | <table class=propdef> |
dbaron@6470 | 1043 | <tr> |
dbaron@6470 | 1044 | <th>Name: |
dbaron@6470 | 1045 | <td><dfn>max-lines</dfn> |
dbaron@6470 | 1046 | <tr> |
dbaron@6470 | 1047 | <th><a href="#values">Value</a>: |
dbaron@6470 | 1048 | <td>none | <integer> |
dbaron@6470 | 1049 | <tr> |
dbaron@6470 | 1050 | <th>Initial: |
dbaron@6470 | 1051 | <td>none |
dbaron@6470 | 1052 | <tr> |
dbaron@6470 | 1053 | <th>Applies to: |
dbaron@6484 | 1054 | <td>fragment boxes |
dbaron@6470 | 1055 | <tr> |
dbaron@6470 | 1056 | <th>Inherited: |
dbaron@6470 | 1057 | <td>no |
dbaron@6470 | 1058 | <tr> |
dbaron@6482 | 1059 | <th>Animatable: |
dbaron@6482 | 1060 | <td>as <a href="http://www.w3.org/TR/css3-transitions/#animatable-types">integer</a> |
dbaron@6482 | 1061 | <tr> |
dbaron@6470 | 1062 | <th>Percentages: |
dbaron@6470 | 1063 | <td>N/A |
dbaron@6470 | 1064 | <tr> |
dbaron@6470 | 1065 | <th>Media: |
dbaron@6470 | 1066 | <td>visual |
dbaron@6470 | 1067 | <tr> |
dbaron@6470 | 1068 | <th>Computed value: |
dbaron@6470 | 1069 | <td>specified value |
dbaron@6470 | 1070 | <tr> |
dbaron@6470 | 1071 | <th>Canonical order: |
dbaron@6470 | 1072 | <td><abbr title="follows order of property value definition">per grammar</abbr> |
dbaron@6470 | 1073 | </table> |
dbaron@6470 | 1074 | |
dbaron@6470 | 1075 | <dl> |
dbaron@6470 | 1076 | <dt>none |
dbaron@6470 | 1077 | <dd> |
dbaron@6470 | 1078 | <p> |
dbaron@6470 | 1079 | Breaks occur only as specified elsewhere. |
dbaron@6470 | 1080 | </p> |
dbaron@6470 | 1081 | </dd> |
dbaron@6470 | 1082 | |
dbaron@6470 | 1083 | <dt><integer> |
dbaron@6470 | 1084 | <dd> |
dbaron@6470 | 1085 | <p> |
dbaron@6470 | 1086 | In addition to any breaks specified elsewhere, |
dbaron@6470 | 1087 | a break is forced before any line that would exceed |
dbaron@6470 | 1088 | the given number of lines |
dbaron@6470 | 1089 | being placed inside the element |
dbaron@6470 | 1090 | (excluding lines that are in |
dbaron@6470 | 1091 | a different block formatting context from |
dbaron@6470 | 1092 | the block formatting context to which |
dbaron@6470 | 1093 | an unstyled child of the element would belong). |
dbaron@6470 | 1094 | </p> |
dbaron@6470 | 1095 | |
dbaron@6470 | 1096 | <p class="issue"> |
dbaron@6470 | 1097 | If there are multiple boundaries between this line |
dbaron@6470 | 1098 | and the previous, where exactly (in terms of element |
dbaron@6470 | 1099 | boundaries) is the break forced? |
dbaron@6470 | 1100 | </p> |
dbaron@6470 | 1101 | |
dbaron@6470 | 1102 | <p> |
dbaron@6470 | 1103 | Only positive integers are accepted. |
dbaron@6470 | 1104 | Zero or negative integers are a parse error. |
dbaron@6470 | 1105 | </p> |
dbaron@6470 | 1106 | </dd> |
dbaron@6470 | 1107 | </dl> |
dbaron@6470 | 1108 | |
dbaron@6484 | 1109 | <p class="issue">Should this apply to fragment overflow only, or also |
dbaron@6470 | 1110 | to pagination?</p> |
dbaron@6470 | 1111 | |
dbaron@6479 | 1112 | <div class="example"> |
dbaron@6479 | 1113 | <table class="source-demo-pair"><tr><td><pre><!DOCTYPE HTML> |
dbaron@6479 | 1114 | <style> |
dbaron@6479 | 1115 | .article { |
dbaron@6484 | 1116 | overflow: fragments; |
dbaron@6479 | 1117 | } |
dbaron@6479 | 1118 | .article::first-letter { |
dbaron@6479 | 1119 | font-size: 2em; |
dbaron@6479 | 1120 | line-height: 0.9; |
dbaron@6479 | 1121 | } |
dbaron@6484 | 1122 | .article::nth-fragment(1) { |
dbaron@6479 | 1123 | font-size: 1.5em; |
dbaron@6479 | 1124 | max-lines: 3; |
dbaron@6479 | 1125 | } |
dbaron@6491 | 1126 | .article::nth-fragment(2) { |
dbaron@6479 | 1127 | column-count: 2; |
dbaron@6479 | 1128 | } |
dbaron@6479 | 1129 | </style> |
dbaron@6479 | 1130 | <div class="article"> |
dbaron@6479 | 1131 | <i>...</i> |
dbaron@6479 | 1132 | </div></pre></td><td> |
dbaron@6479 | 1133 | <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 | 1134 | <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 | 1135 | <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 | 1136 | </td></tr></table> |
dbaron@6479 | 1137 | </div> |
dbaron@6478 | 1138 | |
dbaron@6493 | 1139 | <h2 id="static-media">Overflow in static media</h2> |
dbaron@6493 | 1140 | |
dbaron@6493 | 1141 | <p class="issue"> |
dbaron@6493 | 1142 | This specification should define useful behavior |
dbaron@6493 | 1143 | for all values of 'overflow' |
dbaron@6493 | 1144 | in static media (such as print). |
dbaron@6493 | 1145 | Current implementation behavior is quite poor and |
dbaron@6493 | 1146 | produces unexpected results when authors have not considered |
dbaron@6493 | 1147 | what will happen when |
dbaron@6493 | 1148 | the content they produce for interactive media |
dbaron@6493 | 1149 | is printed. |
dbaron@6493 | 1150 | </p> |
dbaron@6493 | 1151 | |
dbaron@6470 | 1152 | <h2 id="conformance"> |
dbaron@6470 | 1153 | Conformance</h2> |
dbaron@6470 | 1154 | |
dbaron@6470 | 1155 | <h3 id="placement"> |
dbaron@6470 | 1156 | Module interactions</h3> |
dbaron@6470 | 1157 | |
dbaron@6470 | 1158 | <p>This module extends the 'overflow' |
dbaron@6470 | 1159 | feature defined in [[CSS21]] section 11.1.1. It defines additional |
dbaron@6470 | 1160 | overflow handling mechanisms that implementations must implement as |
dbaron@6470 | 1161 | described in this module in order to conform to this module.</p> |
dbaron@6470 | 1162 | |
dbaron@6470 | 1163 | <p>No properties in this module apply to the <code>::first-line</code> or |
dbaron@6470 | 1164 | <code>::first-letter</code> pseudo-elements.</p> |
dbaron@6470 | 1165 | |
dbaron@6470 | 1166 | <h3 id="values"> |
dbaron@6470 | 1167 | Values</h3> |
dbaron@6470 | 1168 | |
dbaron@6470 | 1169 | <p>This specification follows the |
dbaron@6470 | 1170 | <a href="http://www.w3.org/TR/CSS21/about.html#property-defs">CSS property |
dbaron@6470 | 1171 | definition conventions</a> from [[!CSS21]]. Value types not defined in |
dbaron@6470 | 1172 | this specification are defined in CSS Level 2 Revision 1 [[!CSS21]]. |
dbaron@6470 | 1173 | Other CSS modules may expand the definitions of these value types: for |
dbaron@6470 | 1174 | example [[CSS3COLOR]], when combined with this module, expands the |
dbaron@6470 | 1175 | definition of the <color> value type as used in this specification.</p> |
dbaron@6470 | 1176 | |
dbaron@6470 | 1177 | <p>In addition to the property-specific values listed in their definitions, |
dbaron@6470 | 1178 | all properties defined in this specification also accept the |
dbaron@6470 | 1179 | <a href="http://www.w3.org/TR/CSS21/cascade.html#value-def-inherit">inherit</a> |
dbaron@6470 | 1180 | keyword as their property value. For readability it has not been repeated |
dbaron@6470 | 1181 | explicitly. |
dbaron@6470 | 1182 | |
dbaron@6470 | 1183 | |
dbaron@6470 | 1184 | <h3 id="conventions"> |
dbaron@6470 | 1185 | Document conventions</h3> |
dbaron@6470 | 1186 | |
dbaron@6470 | 1187 | <p>Conformance requirements are expressed with a combination of |
dbaron@6470 | 1188 | descriptive assertions and RFC 2119 terminology. The key words âMUSTâ, |
dbaron@6470 | 1189 | âMUST NOTâ, âREQUIREDâ, âSHALLâ, âSHALL NOTâ, âSHOULDâ, âSHOULD NOTâ, |
dbaron@6470 | 1190 | âRECOMMENDEDâ, âMAYâ, and âOPTIONALâ in the normative parts of this |
dbaron@6470 | 1191 | document are to be interpreted as described in RFC 2119. |
dbaron@6470 | 1192 | However, for readability, these words do not appear in all uppercase |
dbaron@6470 | 1193 | letters in this specification. |
dbaron@6470 | 1194 | |
dbaron@6470 | 1195 | <p>All of the text of this specification is normative except sections |
dbaron@6470 | 1196 | explicitly marked as non-normative, examples, and notes. [[!RFC2119]]</p> |
dbaron@6470 | 1197 | |
dbaron@6470 | 1198 | <p>Examples in this specification are introduced with the words âfor exampleâ |
dbaron@6470 | 1199 | or are set apart from the normative text with <code>class="example"</code>, |
dbaron@6470 | 1200 | like this: |
dbaron@6470 | 1201 | |
dbaron@6470 | 1202 | <div class="example"> |
dbaron@6470 | 1203 | <p>This is an example of an informative example.</p> |
dbaron@6470 | 1204 | </div> |
dbaron@6470 | 1205 | |
dbaron@6470 | 1206 | <p>Informative notes begin with the word âNoteâ and are set apart from the |
dbaron@6470 | 1207 | normative text with <code>class="note"</code>, like this: |
dbaron@6470 | 1208 | |
dbaron@6470 | 1209 | <p class="note">Note, this is an informative note.</p> |
dbaron@6470 | 1210 | |
dbaron@6470 | 1211 | <h3 id="conformance-classes"> |
dbaron@6470 | 1212 | Conformance classes</h3> |
dbaron@6470 | 1213 | |
dbaron@6483 | 1214 | <p>Conformance to CSS Overflow Module Level 3 |
dbaron@6470 | 1215 | is defined for three conformance classes: |
dbaron@6470 | 1216 | <dl> |
dbaron@6470 | 1217 | <dt><dfn title="style sheet!!as conformance class">style sheet</dfn> |
dbaron@6470 | 1218 | <dd>A <a href="http://www.w3.org/TR/CSS21/conform.html#style-sheet">CSS |
dbaron@6470 | 1219 | style sheet</a>. |
dbaron@6470 | 1220 | <dt><dfn>renderer</dfn></dt> |
dbaron@6470 | 1221 | <dd>A <a href="http://www.w3.org/TR/CSS21/conform.html#user-agent">UA</a> |
dbaron@6470 | 1222 | that interprets the semantics of a style sheet and renders |
dbaron@6470 | 1223 | documents that use them. |
dbaron@6470 | 1224 | <dt><dfn id="authoring-tool">authoring tool</dfn></dt> |
dbaron@6470 | 1225 | <dd>A <a href="http://www.w3.org/TR/CSS21/conform.html#user-agent">UA</a> |
dbaron@6470 | 1226 | that writes a style sheet. |
dbaron@6470 | 1227 | </dl> |
dbaron@6470 | 1228 | |
dbaron@6483 | 1229 | <p>A style sheet is conformant to CSS Overflow Module Level 3 |
dbaron@6470 | 1230 | if all of its statements that use syntax defined in this module are valid |
dbaron@6470 | 1231 | according to the generic CSS grammar and the individual grammars of each |
dbaron@6470 | 1232 | feature defined in this module. |
dbaron@6470 | 1233 | |
dbaron@6483 | 1234 | <p>A renderer is conformant to CSS Overflow Module Level 3 |
dbaron@6470 | 1235 | if, in addition to interpreting the style sheet as defined by the |
dbaron@6470 | 1236 | appropriate specifications, it supports all the features defined |
dbaron@6483 | 1237 | by CSS Overflow Module Level 3 by parsing them correctly |
dbaron@6470 | 1238 | and rendering the document accordingly. However, the inability of a |
dbaron@6470 | 1239 | UA to correctly render a document due to limitations of the device |
dbaron@6470 | 1240 | does not make the UA non-conformant. (For example, a UA is not |
dbaron@6470 | 1241 | required to render color on a monochrome monitor.) |
dbaron@6470 | 1242 | |
dbaron@6483 | 1243 | <p>An authoring tool is conformant to CSS Overflow Module Level 3 |
dbaron@6470 | 1244 | if it writes style sheets that are syntactically correct according to the |
dbaron@6470 | 1245 | generic CSS grammar and the individual grammars of each feature in |
dbaron@6470 | 1246 | this module, and meet all other conformance requirements of style sheets |
dbaron@6470 | 1247 | as described in this module. |
dbaron@6470 | 1248 | |
dbaron@6470 | 1249 | <h3 id="partial"> |
dbaron@6470 | 1250 | Partial implementations</h3> |
dbaron@6470 | 1251 | |
dbaron@6470 | 1252 | <p>So that authors can exploit the forward-compatible parsing rules to |
dbaron@6470 | 1253 | assign fallback values, CSS renderers <strong>must</strong> |
dbaron@6470 | 1254 | treat as invalid (and <a href="http://www.w3.org/TR/CSS21/conform.html#ignore">ignore |
dbaron@6470 | 1255 | as appropriate</a>) any at-rules, properties, property values, keywords, |
dbaron@6470 | 1256 | and other syntactic constructs for which they have no usable level of |
dbaron@6470 | 1257 | support. In particular, user agents <strong>must not</strong> selectively |
dbaron@6470 | 1258 | ignore unsupported component values and honor supported values in a single |
dbaron@6470 | 1259 | multi-value property declaration: if any value is considered invalid |
dbaron@6470 | 1260 | (as unsupported values must be), CSS requires that the entire declaration |
dbaron@6470 | 1261 | be ignored.</p> |
dbaron@6470 | 1262 | |
dbaron@6470 | 1263 | <h3 id="experimental"> |
dbaron@6470 | 1264 | Experimental implementations</h3> |
dbaron@6470 | 1265 | |
dbaron@6470 | 1266 | <p>To avoid clashes with future CSS features, the CSS2.1 specification |
dbaron@6470 | 1267 | reserves a <a href="http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords">prefixed |
dbaron@6470 | 1268 | syntax</a> for proprietary and experimental extensions to CSS. |
dbaron@6470 | 1269 | |
dbaron@6470 | 1270 | <p>Prior to a specification reaching the Candidate Recommendation stage |
dbaron@6470 | 1271 | in the W3C process, all implementations of a CSS feature are considered |
dbaron@6470 | 1272 | experimental. The CSS Working Group recommends that implementations |
dbaron@6470 | 1273 | use a vendor-prefixed syntax for such features, including those in |
dbaron@6470 | 1274 | W3C Working Drafts. This avoids incompatibilities with future changes |
dbaron@6470 | 1275 | in the draft. |
dbaron@6470 | 1276 | </p> |
dbaron@6470 | 1277 | |
dbaron@6470 | 1278 | <h3 id="testing"> |
dbaron@6470 | 1279 | Non-experimental implementations</h3> |
dbaron@6470 | 1280 | |
dbaron@6470 | 1281 | <p>Once a specification reaches the Candidate Recommendation stage, |
dbaron@6470 | 1282 | non-experimental implementations are possible, and implementors should |
dbaron@6470 | 1283 | release an unprefixed implementation of any CR-level feature they |
dbaron@6470 | 1284 | can demonstrate to be correctly implemented according to spec. |
dbaron@6470 | 1285 | |
dbaron@6470 | 1286 | <p>To establish and maintain the interoperability of CSS across |
dbaron@6470 | 1287 | implementations, the CSS Working Group requests that non-experimental |
dbaron@6470 | 1288 | CSS renderers submit an implementation report (and, if necessary, the |
dbaron@6470 | 1289 | testcases used for that implementation report) to the W3C before |
dbaron@6470 | 1290 | releasing an unprefixed implementation of any CSS features. Testcases |
dbaron@6470 | 1291 | submitted to W3C are subject to review and correction by the CSS |
dbaron@6470 | 1292 | Working Group. |
dbaron@6470 | 1293 | |
dbaron@6470 | 1294 | <p>Further information on submitting testcases and implementation reports |
dbaron@6470 | 1295 | can be found from on the CSS Working Group's website at |
dbaron@6470 | 1296 | <a href="http://www.w3.org/Style/CSS/Test/">http://www.w3.org/Style/CSS/Test/</a>. |
dbaron@6470 | 1297 | Questions should be directed to the |
dbaron@6470 | 1298 | <a href="http://lists.w3.org/Archives/Public/public-css-testsuite">[email protected]</a> |
dbaron@6470 | 1299 | mailing list. |
dbaron@6470 | 1300 | |
dbaron@6470 | 1301 | <h3 id="cr-exit-criteria"> |
dbaron@6470 | 1302 | CR exit criteria</h3> |
dbaron@6470 | 1303 | |
dbaron@6470 | 1304 | <p class=issue>[Change or remove the following CR exit criteria if |
dbaron@6470 | 1305 | the spec is not a module, but, e.g., a Note or a profile. This text was <a |
dbaron@6470 | 1306 | href="http://www.w3.org/Style/CSS/Tracker/actions/44"> decided on 2008-06-04.</a>]</p> |
dbaron@6470 | 1307 | |
dbaron@6470 | 1308 | <p> |
dbaron@6470 | 1309 | For this specification to be advanced to Proposed Recommendation, |
dbaron@6470 | 1310 | there must be at least two independent, interoperable implementations |
dbaron@6470 | 1311 | of each feature. Each feature may be implemented by a different set of |
dbaron@6470 | 1312 | products, there is no requirement that all features be implemented by |
dbaron@6470 | 1313 | a single product. For the purposes of this criterion, we define the |
dbaron@6470 | 1314 | following terms: |
dbaron@6470 | 1315 | |
dbaron@6470 | 1316 | <dl> |
dbaron@6470 | 1317 | <dt>independent <dd>each implementation must be developed by a |
dbaron@6470 | 1318 | different party and cannot share, reuse, or derive from code |
dbaron@6470 | 1319 | used by another qualifying implementation. Sections of code that |
dbaron@6470 | 1320 | have no bearing on the implementation of this specification are |
dbaron@6470 | 1321 | exempt from this requirement. |
dbaron@6470 | 1322 | |
dbaron@6470 | 1323 | <dt>interoperable <dd>passing the respective test case(s) in the |
dbaron@6470 | 1324 | official CSS test suite, or, if the implementation is not a Web |
dbaron@6470 | 1325 | browser, an equivalent test. Every relevant test in the test |
dbaron@6470 | 1326 | suite should have an equivalent test created if such a user |
dbaron@6470 | 1327 | agent (UA) is to be used to claim interoperability. In addition |
dbaron@6470 | 1328 | if such a UA is to be used to claim interoperability, then there |
dbaron@6470 | 1329 | must one or more additional UAs which can also pass those |
dbaron@6470 | 1330 | equivalent tests in the same way for the purpose of |
dbaron@6470 | 1331 | interoperability. The equivalent tests must be made publicly |
dbaron@6470 | 1332 | available for the purposes of peer review. |
dbaron@6470 | 1333 | |
dbaron@6470 | 1334 | <dt>implementation <dd>a user agent which: |
dbaron@6470 | 1335 | |
dbaron@6470 | 1336 | <ol class=inline> |
dbaron@6470 | 1337 | <li>implements the specification. |
dbaron@6470 | 1338 | |
dbaron@6470 | 1339 | <li>is available to the general public. The implementation may |
dbaron@6470 | 1340 | be a shipping product or other publicly available version |
dbaron@6470 | 1341 | (i.e., beta version, preview release, or ânightly buildâ). |
dbaron@6470 | 1342 | Non-shipping product releases must have implemented the |
dbaron@6470 | 1343 | feature(s) for a period of at least one month in order to |
dbaron@6470 | 1344 | demonstrate stability. |
dbaron@6470 | 1345 | |
dbaron@6470 | 1346 | <li>is not experimental (i.e., a version specifically designed |
dbaron@6470 | 1347 | to pass the test suite and is not intended for normal usage |
dbaron@6470 | 1348 | going forward). |
dbaron@6470 | 1349 | </ol> |
dbaron@6470 | 1350 | </dl> |
dbaron@6470 | 1351 | |
dbaron@6470 | 1352 | <p>The specification will remain Candidate Recommendation for at least |
dbaron@6470 | 1353 | six months. |
dbaron@6470 | 1354 | |
dbaron@6470 | 1355 | <h2 class=no-num id="acknowledgments"> |
dbaron@6470 | 1356 | Acknowledgments</h2> |
dbaron@6470 | 1357 | |
dbaron@6470 | 1358 | <p> |
dbaron@6470 | 1359 | Thanks especially to the feedback from |
dbaron@6496 | 1360 | Rossen Atanassov, |
dbaron@6496 | 1361 | Bert Bos, |
dbaron@6496 | 1362 | Tantek Ãelik, |
dbaron@6496 | 1363 | John Daggett, |
dbaron@6496 | 1364 | fantasai, |
dbaron@6496 | 1365 | Daniel Glazman, |
dbaron@6496 | 1366 | Vincent Hardy, |
dbaron@6470 | 1367 | Håkon Wium Lie, |
dbaron@6496 | 1368 | Peter Linss, |
dbaron@7815 | 1369 | Robert O'Callahan, |
dbaron@6470 | 1370 | Florian Rivoal, |
dbaron@6473 | 1371 | Alan Stearns, |
dbaron@6496 | 1372 | Steve Zilles, |
dbaron@6470 | 1373 | and all the rest of the |
dbaron@6470 | 1374 | <a href="http://lists.w3.org/Archives/Public/www-style/">www-style</a> community. |
dbaron@6470 | 1375 | </p> |
dbaron@6470 | 1376 | |
dbaron@6470 | 1377 | <h2 class=no-num id="references"> |
dbaron@6470 | 1378 | References</h2> |
dbaron@6470 | 1379 | |
dbaron@6470 | 1380 | <h3 class="no-num" id="normative-references"> |
dbaron@6470 | 1381 | Normative references</h3> |
dbaron@6470 | 1382 | <!--normative--> |
dbaron@6470 | 1383 | |
dbaron@6470 | 1384 | <h3 class="no-num" id="other-references"> |
dbaron@6470 | 1385 | Other references</h3> |
dbaron@6470 | 1386 | <!--informative--> |
dbaron@6470 | 1387 | |
dbaron@6470 | 1388 | <h2 class="no-num" id="index"> |
dbaron@6470 | 1389 | Index</h2> |
dbaron@6470 | 1390 | <!--index--> |
dbaron@6470 | 1391 | |
dbaron@6470 | 1392 | <h2 class="no-num" id="property-index"> |
dbaron@6470 | 1393 | Property index</h2> |
dbaron@6470 | 1394 | <!-- properties --> |
dbaron@6470 | 1395 | |
dbaron@6470 | 1396 | </body> |
dbaron@6470 | 1397 | </html> |
dbaron@6470 | 1398 | <!-- Keep this comment at the end of the file |
dbaron@6470 | 1399 | Local variables: |
dbaron@6470 | 1400 | mode: sgml |
dbaron@6470 | 1401 | sgml-declaration:"~/SGML/HTML4.decl" |
dbaron@6470 | 1402 | sgml-default-doctype-name:"html" |
dbaron@6470 | 1403 | sgml-minimize-attributes:t |
dbaron@6470 | 1404 | sgml-nofill-elements:("pre" "style" "br") |
dbaron@6470 | 1405 | sgml-live-element-indicator:t |
dbaron@6470 | 1406 | sgml-omittag:nil |
dbaron@6470 | 1407 | sgml-shorttag:nil |
dbaron@6470 | 1408 | sgml-namecase-general:t |
dbaron@6470 | 1409 | sgml-general-insert-case:lower |
dbaron@6470 | 1410 | sgml-always-quote-attributes:t |
dbaron@6470 | 1411 | sgml-indent-step:nil |
dbaron@6470 | 1412 | sgml-indent-data:t |
dbaron@6470 | 1413 | sgml-parent-document:nil |
dbaron@6470 | 1414 | sgml-exposed-tags:nil |
dbaron@6470 | 1415 | sgml-local-catalogs:nil |
dbaron@6470 | 1416 | sgml-local-ecat-files:nil |
dbaron@6470 | 1417 | End: |
dbaron@6470 | 1418 | --> |
dbaron@6470 | 1419 |