css3-multicol/Overview.src.html

Thu, 07 Feb 2013 22:43:19 -0800

author
L. David Baron <dbaron@dbaron.org>
date
Thu, 07 Feb 2013 22:43:19 -0800
changeset 7398
34298d3d5627
parent 6240
c685227b6e8a
permissions
-rw-r--r--

[css3-multicol] Add "Animatable:" lines to propdef tables.

This is as resolved in Tucson face-to-face at
2013-02-04 11:40:47 -0700, and edited by me per discussion starting at
2013-02-05 11:11:38 -0700.

howcome@1002 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
howcome@722 2 <html lang="en">
howcome@722 3 <head>
howcome@1405 4 <title>CSS Multi-column Layout Module</title>
howcome@722 5
howcome@834 6 <link rel="stylesheet" type="text/css" href="../default.css">
howcome@1281 7
howcome@1290 8 <link href="http://www.w3.org/StyleSheets/TR/W3C-[STATUS].css" rel=stylesheet type="text/css">
howcome@834 9
howcome@722 10 <style type="text/css">
howcome@722 11 .cols { width: 500px; height: 200px; background: #fff; position: relative; border: solid 5px blue; margin: 0.5em 2em 1em 0; font: bold 14px/19px Arial, sans-serif }
howcome@722 12 .cols p { padding: 3px; margin: 0 }
howcome@722 13 .col { position: absolute; left: 0px; top: 0; z-index: 6; width: 170px }
howcome@722 14 .gap { position: absolute; background: green; width: 5px; bottom: 0px; top: 0px; border: 10px solid yellow; border-top-width: 0; border-bottom-width: 0; }
howcome@722 15 .rep { position: absolute; top: 45px; background: black; height: 110px; width: 100px; color: white; z-index: 4 }
howcome@1158 16
howcome@1160 17 table.breaks { border-collapse: collapse; margin: 1em 0 }
howcome@1158 18 table.breaks td, table.breaks th { border: thin solid black; padding: 0.1em 0.2em }
howcome@2086 19
howcome@2086 20 div.example:before { width: 9em }
howcome@722 21 </style>
howcome@722 22
howcome@722 23 </head>
howcome@722 24 <body>
howcome@722 25
howcome@722 26 <div class="head">
howcome@722 27
howcome@722 28 <!--logo-->
howcome@722 29
howcome@1091 30
howcome@1410 31 <h1>CSS Multi-column Layout Module</h1>
howcome@722 32
howcome@722 33 <h2 class="no-num no-toc" id="w3c-working">[LONGSTATUS] [DATE]</h2>
howcome@722 34
howcome@722 35 <dl>
howcome@722 36 <dt>This version:</dt>
bert@1295 37 <dd>
bert@1576 38 <!--<a href="http://www.w3.org/TR/[YEAR]/CR-[SHORTNAME]-[CDATE]">[VERSION]</a>-->
bert@1295 39 <a href="http://dev.w3.org/csswg/css3-multicol/">http://dev.w3.org/csswg/css3-multicol/</a>
howcome@722 40
howcome@722 41 <dt>Latest version:
howcome@722 42
howcome@722 43 <dd><a href="http://www.w3.org/TR/css3-multicol">
howcome@722 44 http://www.w3.org/TR/css3-multicol</a>
howcome@722 45
howcome@722 46 <dt>Previous version:
howcome@722 47
bert@2633 48 <dd><a href="http://www.w3.org/TR/2009/CR-css3-multicol-20091217/">http://www.w3.org/TR/2009/CR-css3-multicol-20091217/</a>
howcome@722 49
howcome@722 50 <dt>Editors:
howcome@722 51
howcome@722 52 <dd>H&aring;kon Wium Lie, Opera Software, howcome@opera.com
howcome@722 53 </dl>
howcome@722 54
howcome@722 55 <!--begin-copyright-->
howcome@722 56 <p>[If you keep the &lt;!--comment-->, the copyright will be included
howcome@722 57 here automatically]</p>
howcome@722 58 <!--end-copyright-->
howcome@722 59
howcome@722 60 <hr title="Separator for header">
howcome@722 61 </div>
howcome@722 62
howcome@722 63
howcome@722 64 <h2 class="no-num no-toc" id=abstract>Abstract</h2>
howcome@722 65
howcome@1561 66 <p>This specification describes multi-column layouts in CSS, a style
howcome@1561 67 sheet language for the web. Using functionality described in the
howcome@1561 68 specification, content can be flowed into multiple columns with a gap
howcome@1561 69 and a rule between them.
howcome@722 70
howcome@722 71 <h2 class="no-num no-toc">Status of this document</h2>
howcome@722 72
howcome@722 73 <!--begin-status-->
howcome@722 74 <p>[If you keep the &lt;!--comment-->, the status boilerplate will be
howcome@722 75 included here automatically.]</p>
howcome@722 76 <!--end-status-->
howcome@722 77
howcome@722 78 <p>This document has been a Working Draft in the CSS Working Group for
howcome@722 79 several years. Multi-column layouts are traditionally used in print.
howcome@722 80 On screen, multi-column layouts have been considered experimental, and
howcome@722 81 implementation and use experience was deemed necessary in order to
howcome@722 82 proceed. Several implementations have occurred over the past years, and
bert@2633 83 this specification incorporates useful feedback from implementors as well as
howcome@722 84 authors and users.
howcome@722 85
bert@2633 86 <p>The specification was updated in April 2011 to correct a
bert@2633 87 contradiction between the text and the pseudo-algorithm in
bert@2633 88 section&nbsp;3.4. The pseudo-algorithm was corrected and also made
bert@2633 89 easier to read. The wording of a few other sections was improved in
howcome@4198 90 places, without changes to the functionality. In January, 2012, some
howcome@4198 91 examples and the description of the 'column-fill' property was
howcome@4198 92 revised.
bert@2633 93
bert@1576 94 <p>This document will remain Candidate Recommendation at least until
bert@2633 95 12 May 2011. See the <a href="#cr-exit-criteria">CR exit
bert@1576 96 criteria.</a>
howcome@1279 97
howcome@1279 98
howcome@975 99 <h2 class="no-num no-toc"><a name="contents">Table of contents</a></h2>
howcome@722 100
howcome@722 101 <!--begin-toc-->
howcome@722 102 <p>[If you keep the &lt;!--comment--> the table of contents will be
howcome@722 103 included here automatically.]</p>
howcome@722 104 <!--end-toc-->
howcome@722 105
howcome@722 106
howcome@722 107 <h2>Introduction</h2>
howcome@722 108
howcome@722 109 <p>(This section is not normative.)
howcome@722 110
howcome@722 111 <p>This module describes multi-column layout in CSS. By using
howcome@722 112 functionality described in this document, style sheets can declare
howcome@722 113 that the content of an element is to be laid out in multiple
howcome@722 114 columns.
howcome@722 115
howcome@722 116 <p>On the Web, tables have also been used to describe multi-column
howcome@722 117 layouts. The main benefit of using CSS-based columns is flexibility;
howcome@722 118 content can flow from one column to another, and the number of columns
howcome@975 119 can vary depending on the size of the viewport. Removing presentation
howcome@975 120 table markup from documents allows them to more easily be presented on
howcome@975 121 various output devices including speech synthesizers and small mobile
howcome@975 122 devices.
howcome@722 123
howcome@722 124 <p>Multi-column layouts are easy to describe in CSS. Here is a simple example:
howcome@722 125
howcome@722 126 <div class=example>
howcome@722 127 <pre>body { column-width: 12em }</pre>
howcome@722 128
howcome@722 129 <p>In this example, the <code class=html>body</code> element is
howcome@722 130 set to have columns at least ''12em'' wide. The exact number of
howcome@722 131 columns will depend on the available space.
howcome@722 132
howcome@722 133 </div>
howcome@722 134
howcome@722 135 <p>The number of columns can also be set explicitly in the style sheet:
howcome@722 136
howcome@722 137 <div class=example>
howcome@722 138 <pre>body { column-count: 2 }</pre>
howcome@975 139
howcome@975 140 <p>In this case, the number of columns is fixed and the column widths
howcome@975 141 will vary depending on the available width.
howcome@975 142
howcome@722 143 </div>
howcome@722 144
howcome@977 145 <p>The shorthand 'columns' property can be used to set either,
howcome@977 146 or both, properties in one declaration.
howcome@722 147
howcome@722 148 <div class=example>
howcome@1836 149
howcome@2081 150 <p>In these examples, the number of columns, the width of columns, and
howcome@2081 151 both the number and width are set, respectively:
howcome@975 152
howcome@975 153 <pre>
howcome@975 154 body { columns: 2 }
howcome@975 155 body { columns: 12em }
howcome@975 156 body { columns: 2 12em }
howcome@975 157 </pre>
howcome@975 158
howcome@2081 159 <p>However, as described below, setting both the width and number of
howcome@2081 160 columns rarely makes sense.
howcome@2081 161
howcome@722 162 </div>
howcome@722 163
howcome@722 164 <p>Another group of properties introduced in this module describe
howcome@975 165 gaps and rules between columns.
howcome@722 166
howcome@722 167 <div class=example>
howcome@722 168 <pre>
howcome@722 169 body {
howcome@722 170 column-gap: 1em;
howcome@722 171 column-rule: thin solid black;
howcome@722 172 }
howcome@722 173 </pre>
howcome@722 174
howcome@722 175 <p>The first declaration in the example above sets the gap between two
howcome@722 176 adjacent columns to be 1em. Column gaps are similar to padding areas.
howcome@722 177 In the middle of the gap there will be a rule which is described by
howcome@975 178 the 'column-rule' property.
howcome@975 179 </div>
howcome@975 180
howcome@975 181 <p>The values of the 'column-rule' property are similar to those of
howcome@1405 182 the CSS border properties. Like 'border', 'column-rule' is a
howcome@1405 183 shorthand property.
howcome@722 184
howcome@722 185 <div class=example>
howcome@980 186 <p>In this example, the shorthand 'column-rule' declaration from the
howcome@980 187 above example has been expanded:
howcome@975 188
howcome@722 189 <pre>
howcome@722 190 body {
howcome@722 191 column-gap: 1em;
howcome@722 192 column-rule-width: thin;
howcome@722 193 column-rule-style: solid;
howcome@722 194 column-rule-color: black;
howcome@722 195 }
howcome@722 196 </pre>
howcome@722 197 </div>
howcome@722 198
howcome@722 199
howcome@1405 200 <p>The 'column-fill' and 'column-span' properties give style sheets a
howcome@1405 201 wider range of visual expressions in multi-column layouts.
howcome@722 202
howcome@722 203 <div class=example>
howcome@977 204 <p>In this example, columns are set to be balanced, i.e., to have
howcome@977 205 approximately the same length. Also, <code>h2</code> elements are set
howcome@977 206 to span across all columns.
howcome@979 207
howcome@722 208 <pre>
howcome@722 209 div { column-fill: balance }
howcome@722 210 h2 { column-span: all }
howcome@722 211 </pre>
howcome@722 212 </div>
howcome@722 213
howcome@1405 214 <p>This specification introduces ten new properties, all of which
howcome@722 215 are used in the examples above.
howcome@722 216
howcome@1405 217 <p>To indicate where column breaks should (or should not) appear, new
howcome@1405 218 keyword values are introduced.
howcome@1405 219
howcome@1405 220 <div class=example>
howcome@1405 221
howcome@1405 222 <p>In this example, <code>h1</code> elements will always have a column
howcome@1405 223 break before them, but the formatter will try to avoid column breaks
howcome@1405 224 inside and after the element.
howcome@1405 225
howcome@1405 226 <pre>
howcome@1405 227 h1 {
howcome@1405 228 break-before: column;
howcome@1405 229 break-inside: avoid-column;
howcome@1405 230 break-after: avoid-column;
howcome@1405 231 }
howcome@1405 232 </pre>
howcome@1405 233
bert@1574 234 <!--<p>The properties and values used in this example are formally defined in [!CSS3PAGE]].-->
howcome@1405 235
howcome@1405 236 </div>
howcome@1405 237
howcome@722 238 <p>If all column properties have their initial value, the layout of
howcome@722 239 an element will be identical to a multi-column layout with only one
howcome@722 240 column.
howcome@722 241
howcome@722 242 <h2>The multi-column model</h2>
howcome@722 243
howcome@998 244 <p>A <dfn>multi-column element</dfn> (or <em>multicol element</em>
howcome@996 245 for short) is an element whose 'column-width' or 'column-count'
howcome@1420 246 property is not ''auto'' and therefore acts as a container for
howcome@996 247 multi-column layout.
howcome@996 248
howcome@722 249 <p>In the traditional CSS box model, the content of an element is
howcome@722 250 flowed into the content box of the corresponding element. Multi-column
howcome@722 251 layout introduces a new type of container between the content box and
howcome@996 252 the content, namely the <dfn>column box</dfn> (or <em>column</em> for
howcome@996 253 short). The content of a multicol element is flowed into its column
howcome@996 254 boxes.
howcome@722 255
howcome@996 256 <p>Column boxes in a multi-column element are arranged
howcome@998 257 into <em>rows</em>. Like table cells, the column boxes in a row are
howcome@996 258 ordered in the inline direction of the multicol element. The
howcome@998 259 <em>column width</em> is the length of the column box in the inline
howcome@998 260 direction. The <em>column height</em> is the length of the column box
howcome@2081 261 in the block direction. All column boxes in a row have the same column width, and all
howcome@2081 262 column boxes in a row have the same column height. Within each row in the multi-column element,
howcome@1426 263 adjacent column boxes are separated by a <em>column gap</em>, which
howcome@1426 264 may contain a <em>column rule</em>. All column gaps in the same row
howcome@1714 265 are equal. All column rules in the same row are also equal, if they
howcome@1714 266 appear; column rules only appear between columns that both have
howcome@1426 267 content.
howcome@722 268
howcome@996 269 <p>In the simplest case a multicol element will contain only one row
howcome@996 270 of columns, and the height of each column will be equivalent to the
howcome@996 271 used height of the multi-column element's content box. If the
howcome@2121 272 multi-column element is paginated, the height of each row is
howcome@2121 273 constrained by the page and the content continues in a new row of
howcome@1048 274 column boxes on the next page; a column box never splits across pages.
howcome@1048 275 The same effect occurs when a <em>spanning element</em> divides the
howcome@1048 276 multi-column element: the columns before the spanning element are
howcome@1048 277 balanced and shortened to fit their content. Content after the
howcome@1048 278 spanning element then flows into a new row of column boxes.
howcome@722 279
howcome@722 280 <p>It is not possible to set properties/values on column boxes. For
howcome@722 281 example, the background of a certain column box cannot be set and a
howcome@722 282 column box has no concept of padding, margin or borders.
howcome@722 283
howcome@722 284 <p class="note">Future specifications may add additional
howcome@722 285 functionality. For example, columns of different widths and different
howcome@722 286 backgrounds may be supported.</p>
howcome@722 287
howcome@722 288
howcome@722 289 <div class="example">
howcome@722 290
howcome@722 291 <p>Column gaps (yellow) and column rules (green) are shown in this
howcome@722 292 sample rendition of a multi-column element with padding (blue). The
howcome@722 293 blue and yellow is present for illustrational purposes only. In actual
howcome@2121 294 implementations these areas will be determined by the background.
howcome@722 295
howcome@722 296 <div class=cols>
howcome@722 297
howcome@722 298 <div class="col" style="">
howcome@722 299
howcome@722 300 <p>
howcome@722 301 Ab cde fgh i jkl. Mno<br>
howcome@722 302 pqr stu vw xyz. A bc<br>
howcome@722 303 def g hij klm nopqrs<br>
howcome@722 304 tuv wxy z. Abc de fg<br>
howcome@722 305 hi jklmno. Pqrstu vw<br>
howcome@722 306 x yz. Abc def ghi jkl.<br>
howcome@722 307 M nop qrst uv wx yz.<br>
howcome@722 308
howcome@722 309 Ab cde fgh i jkl. Mno<br>
howcome@722 310 pqr stu vw xyz. A bc<br>
howcome@722 311 def g hij klm nopqrs
howcome@722 312
howcome@722 313 </div>
howcome@722 314
howcome@722 315 <div class="col" style="left: 175px">
howcome@722 316 <p>
howcome@722 317 tuv wxy z. Abc de fg<br>
howcome@722 318 hi jklmno. Pqrstu vw<br>
howcome@722 319 x yz. Abc def ghi jkl.<br>
howcome@722 320 M nop qrst uv wx yz.<br>
howcome@722 321
howcome@722 322 Ab cde fgh i jkl. Mno<br>
howcome@722 323 pqr stu vw xyz. A bc<br>
howcome@722 324 def g hij klm nopqrs<br>
howcome@722 325 tuv wxy z. Abc de fg<br>
howcome@722 326 hi jklmno. Pqrstu vw<br>
howcome@722 327 x yz. Abc def ghi jkl.<br>
howcome@722 328
howcome@722 329
howcome@722 330 </div>
howcome@722 331
howcome@722 332
howcome@722 333 <div class="col" style="left: 350px">
howcome@722 334 <p>
howcome@722 335 M nop qrst uv wx yz.<br>
howcome@722 336
howcome@722 337 Ab cde fgh i jkl. Mno<br>
howcome@722 338 pqr stu vw xyz. A bc<br>
howcome@722 339 def g hij klm nopqrs<br>
howcome@722 340 tuv wxy z. Abc de fg<br>
howcome@722 341 hi jklmno. Pqrstu vw<br>
howcome@722 342 x yz. Abc def ghi jkl.<br>
howcome@722 343
howcome@722 344 M nop qrst uv wx yz.<br>
howcome@722 345 Ab cde fgh i jkl. Mno<br>
howcome@722 346 Pqr stu vw xyz.
howcome@722 347 </div>
howcome@722 348
howcome@722 349 <div class=gap style="left: 150px"></div>
howcome@722 350 <div class=gap style="left: 325px"></div>
howcome@722 351 </div>
howcome@722 352
howcome@722 353 <p>To illustrate the effects of the various properties described in
howcome@722 354 this specification, variations on a sample document will be used. Here
howcome@722 355 is the source code of the sample document:
howcome@722 356
howcome@722 357 <pre class="html">
howcome@722 358 &lt;html>
howcome@1405 359 &lt;style type="text/css">
howcome@722 360 div {
howcome@722 361 column-width: 15em;
howcome@722 362 column-gap: 2em; /* shown in yellow */
howcome@722 363 column-rule: 4px solid green;
howcome@722 364 padding: 5px; /* shown in blue */
howcome@722 365 }
howcome@1405 366 p { margin: 0; padding: 0 }
howcome@722 367 img { display: none }
howcome@722 368 &lt;/style>
howcome@722 369 &lt;body>
howcome@722 370 &lt;div>
howcome@1405 371 &lt;p&gt;Ab cde fgh i jkl. Mno
howcome@722 372 pqr stu vw xyz. A bc
howcome@722 373 &lt;img src=...>
howcome@722 374 def g hij
howcome@722 375 ...
howcome@722 376 &lt;/div>
howcome@722 377 &lt;/body>
howcome@722 378 &lt;/html>
howcome@722 379 </pre>
howcome@722 380
howcome@722 381 <p>The nonsensical text in the example is the English alphabet which
howcome@722 382 shows how text flows from one column to another. To simplify the
howcome@722 383 visualization, the textual content of the different examples vary
howcome@722 384 slightly.
howcome@722 385 </div>
howcome@722 386
howcome@1042 387
howcome@4198 388 <p>Column boxes are block container boxes. That
howcome@1042 389 is, column boxes behave like block-level, table cell, and inline-block
howcome@1046 390 boxes as per CSS 2.1, section 10.1, item 2 [[!CSS21]]. However, column
howcome@4200 391 boxes do not establish block container boxes for elements with ''position:
howcome@4200 392 fixed'' or ''position: absolute''.
howcome@1042 393
howcome@1042 394
howcome@1042 395 <div class=example>
howcome@1042 396
howcome@1042 397 <p>In this example, the width of the image is set with these rules:
howcome@1042 398
howcome@1042 399 <pre class=css>
howcome@1042 400 img { display: block; width: 100% }
howcome@1042 401 </pre>
howcome@1042 402
howcome@1042 403 <p>Given that the width is calculated relative to the column box, the
howcome@1042 404 image will be as wide as the column box:
howcome@1042 405
howcome@1042 406 <div class=cols>
howcome@1042 407
howcome@1042 408 <p>Ab cde fgh i jkl. Mno<br>
howcome@1042 409 pqr stu vw xyz. A bc<br>
howcome@1042 410
howcome@1042 411 <br><br><br><br><br><br>
howcome@1042 412
howcome@1042 413 def g hij klm nopqrs<br>
howcome@1042 414 tuv wxy z. Abc de fg<br>
howcome@1042 415
howcome@1042 416
howcome@1042 417
howcome@1042 418 <div class="col" style="left: 175px">
howcome@1042 419 <p>hi jklmno. Pqrstu vw<br>
howcome@1042 420 x yz. Abc def ghi jkl.<br>
howcome@1042 421 M nop qrst uv wx yz.<br>
howcome@1042 422
howcome@1042 423 Ab cde fgh i jkl. Mno<br>
howcome@1042 424 pqr stu vw xyz. A bc<br>
howcome@1042 425 def g hij klm nopqrs<br>
howcome@1042 426 tuv wxy z. Abc de fg<br>
howcome@1042 427 hi jklmno. Pqrstu vw<br>
howcome@1042 428 x yz. Abc def ghi jkl.<br>
howcome@1042 429 M nop qrst uv wx yz.<br>
howcome@1042 430
howcome@1042 431 </div>
howcome@1042 432
howcome@1042 433 <div class="col" style="left: 350px">
howcome@1042 434 <p>
howcome@1042 435 Ab cde fgh i jkl. Mno<br>
howcome@1042 436 pqr stu vw xyz. A bc<br>
howcome@1042 437 def g hij klm nopqrs<br>
howcome@1042 438 tuv wxy z. Abc de fg<br>
howcome@1042 439 hi jklmno. Pqrstu vw<br>
howcome@1042 440 x yz. Abc def ghi jkl.<br>
howcome@1042 441
howcome@1042 442 M nop qrst uv wx yz.<br>
howcome@1042 443
howcome@1042 444 Ab cde fgh i jkl. Mno<br>
howcome@1042 445 pqr stu vw xyz.
howcome@1042 446
howcome@1042 447 </div>
howcome@1042 448
howcome@1042 449
howcome@1042 450 <div class=rep style="width: 150px"></div>
howcome@1042 451 <div class=gap style="left: 150px"></div>
howcome@1042 452 <div class=gap style="left: 325px"></div>
howcome@1042 453 </div>
howcome@1042 454
howcome@1042 455 </div>
howcome@1042 456
howcome@1042 457
howcome@722 458 <p>Floats that appear inside multi-column layouts are positioned with
howcome@722 459 regard to the column box where the float appears.
howcome@722 460
howcome@722 461 <div class="example">
howcome@722 462
howcome@722 463 <p>In this example, this CSS fragment describes the presentation of the image:
howcome@722 464
howcome@722 465 <pre class="css">
howcome@722 466 img { display: block; float: right }
howcome@722 467 </pre>
howcome@722 468
howcome@722 469 <div class=cols>
howcome@722 470
howcome@722 471 <div class="col" style="">
howcome@722 472
howcome@722 473 <p>
howcome@722 474 Ab cde fgh i jkl. Mno<br>
howcome@722 475 pqr stu vw xyz. A bc<br>
howcome@722 476 def g<br>
howcome@722 477 hij klm<br>
howcome@722 478 nopq<br>
howcome@722 479 rs tuv<br>
howcome@722 480 wxy x<br>
howcome@722 481 yz. Ab <br>
howcome@722 482 cde fgh i jkl. Mno<br>
howcome@722 483 pqr stu vw xyz. A bc
howcome@722 484
howcome@722 485 </div>
howcome@722 486
howcome@722 487 <div class="col" style="left: 175px">
howcome@722 488 <p>
howcome@722 489 def g hij klm nopqrs<br>
howcome@722 490 tuv wxy z. Abc de fg<br>
howcome@722 491 hi jklmno. Pqrstu vw<br>
howcome@722 492 x yz. Abc def ghi jkl.<br>
howcome@722 493 M nop qrst uv wx yz.<br>
howcome@722 494
howcome@722 495 Ab cde fgh i jkl. Mno<br>
howcome@722 496 pqr stu vw xyz. A bc<br>
howcome@722 497 def g hij klm nopqrs<br>
howcome@722 498 tuv wxy z. Abc de fg<br>
howcome@722 499 hi jklmno. Pqrstu vw<br>
howcome@722 500
howcome@722 501
howcome@722 502
howcome@722 503 </div>
howcome@722 504
howcome@722 505
howcome@722 506 <div class="col" style="left: 350px">
howcome@722 507 <p>
howcome@722 508 x yz. Abc def ghi jkl.<br>
howcome@722 509 M nop qrst uv wx yz.<br>
howcome@722 510
howcome@722 511 Ab cde fgh i jkl. Mno<br>
howcome@722 512 pqr stu vw xyz. A bc<br>
howcome@722 513 def g hij klm nopqrs<br>
howcome@722 514 tuv wxy z. Abc de fg<br>
howcome@722 515 hi jklmno. Pqrstu vw<br>
howcome@722 516 x yz. Abc def ghi jkl.<br>
howcome@722 517
howcome@722 518 M nop qrst uv wx yz.<br>
howcome@722 519
howcome@722 520 </div>
howcome@722 521
howcome@722 522 <div class=rep style="left: 50px"></div>
howcome@722 523
howcome@722 524 <div class=gap style="left: 150px"></div>
howcome@722 525 <div class=gap style="left: 325px"></div>
howcome@722 526 </div>
howcome@722 527
howcome@722 528 <p>The black box represents the image.
howcome@722 529
howcome@722 530 </div>
howcome@722 531
howcome@1048 532 <p>A multi-column element establishes a new block formatting context,
howcome@1405 533 as per CSS 2.1 section 9.4.1.
howcome@1063 534
howcome@1405 535 <div class="example">
howcome@1426 536 <p>A top margin set on the first child element of a multicol element will not collapse with the margins of the multicol element.
howcome@1405 537 </div>
howcome@722 538
howcome@722 539 <p>Nested multi-column elements are allowed, but there may be
howcome@722 540 implementation-specific limits.
howcome@722 541
howcome@722 542
howcome@722 543 <h2>The number and width of columns</h2>
howcome@722 544
howcome@722 545 <p>Finding the number and width of columns is fundamental when
howcome@722 546 laying out multi-column content. When the block direction
howcome@722 547 is unconstrained and no column breaks are added through style sheets,
howcome@722 548 these two properties determine the outcome:
howcome@722 549
howcome@722 550 <ul>
howcome@722 551 <li>'column-count'
howcome@722 552 <li>'column-width'
howcome@722 553 </ul>
howcome@722 554
howcome@722 555 <p>A third property, 'columns', is a shorthand property which sets both
howcome@722 556 'column-width' and 'column-count'.
howcome@722 557
howcome@722 558
howcome@722 559 <h3 id='cw'>'column-width'</h3>
howcome@722 560
howcome@722 561 <table class=propdef>
howcome@722 562 <tr>
howcome@722 563 <td><em>Name:</em>
howcome@722 564 <td><dfn>column-width</dfn>
howcome@722 565 <tr>
howcome@722 566 <td><em>Value:</em>
howcome@722 567 <td>&lt;length&gt; | auto
howcome@722 568 <tr>
howcome@722 569 <td><em>Initial:</em>
howcome@722 570 <td>auto
howcome@722 571 <tr>
howcome@722 572 <td><em>Applies to:</em>
howcome@992 573 <td>non-replaced block-level elements (except table elements), table cells, and inline-block elements
howcome@722 574 <tr>
howcome@722 575 <td><em>Inherited:</em>
howcome@722 576 <td>no
howcome@722 577 <tr>
howcome@722 578 <td><em>Percentages:</em>
howcome@722 579 <td>N/A
howcome@722 580 <tr>
howcome@722 581 <td><em>Media:</em>
howcome@722 582 <td>visual
howcome@722 583 <tr>
howcome@722 584 <td><em>Computed&nbsp;value:</em>
howcome@2386 585 <td>the absolute length, zero or larger
dbaron@7398 586 <tr>
dbaron@7398 587 <td><em>Animatable:</em>
dbaron@7398 588 <td>as <a href="http://dev.w3.org/csswg/css3-transitions/#animtype-length">length</a>
howcome@722 589 </table>
howcome@722 590
howcome@722 591 <p>This property describes the width of columns in multicol elements.
howcome@722 592
howcome@722 593 <dl>
howcome@722 594
howcome@722 595 <dt>auto
howcome@722 596
howcome@722 597 <dd>means that the column width will be determined by other properties
howcome@722 598 (e.g., 'column-count', if it has a non-auto value).
howcome@722 599
howcome@722 600 <dt>&lt;length>
howcome@722 601
howcome@722 602 <dd>describes the optimal column width. The actual column width may be
howcome@722 603 wider (to fill the available space), or narrower (only if the
howcome@2386 604 available space is smaller than the specified column width). Specified values
howcome@722 605 must be greater than 0.
howcome@722 606
howcome@722 607 </dl>
howcome@722 608
howcome@722 609
howcome@722 610
howcome@722 611 <div class=example>
howcome@722 612 <p>For example, consider this style sheet:</p>
howcome@722 613 <pre>
howcome@722 614 div {
howcome@722 615 width: 100px;
howcome@722 616 column-width: 45px;
howcome@722 617 column-gap: 0;
howcome@722 618 column-rule: none;
howcome@722 619 }
howcome@722 620 </pre>
howcome@722 621
howcome@722 622 <p>There is room for two 45px wide columns inside the 100px wide element. In
howcome@722 623 order to fill the available space the actual column width will be
howcome@722 624 increased to 50px.</p>
howcome@722 625
howcome@722 626 </div>
howcome@722 627
howcome@722 628 <div class=example>
howcome@722 629 <p>Also, consider this style sheet:</p>
howcome@722 630
howcome@722 631 <pre>
howcome@722 632 div {
howcome@722 633 width: 40px;
howcome@722 634 column-width: 45px;
howcome@722 635 column-gap: 0;
howcome@722 636 column-rule: none;
howcome@722 637 }
howcome@722 638 </pre>
howcome@722 639
howcome@722 640 <p>The available space is smaller than the specified column width and
howcome@722 641 the actual column width will therefore be decreased.</p>
howcome@722 642
howcome@722 643 </div>
howcome@722 644
howcome@722 645 <p>To ensure that 'column-width' can be used with vertical text,
howcome@722 646 column width means the length of the line boxes inside the columns.
howcome@722 647
howcome@722 648 <p class=note>The reason for making 'column-width' somewhat flexible
howcome@722 649 is to achieve scalable designs that can fit many screen sizes. To set
howcome@722 650 an exact column width, all length values (in horizontal text these
howcome@1420 651 are: 'width', 'column-width', 'column-gap', and 'column-rule-width')
howcome@722 652 must be specified.</p>
howcome@722 653
howcome@722 654
howcome@722 655 <h3 id='cc'>'column-count'</h3>
howcome@722 656
howcome@722 657 <table class=propdef>
howcome@722 658 <tr>
howcome@722 659 <td><em>Name:</em>
howcome@722 660 <td><dfn>column-count</dfn>
howcome@722 661 <tr>
howcome@722 662 <td><em>Value:</em>
howcome@722 663 <td>&lt;integer&gt; | auto
howcome@722 664 <tr>
howcome@722 665 <td><em>Initial:</em>
howcome@722 666 <td>auto
howcome@722 667 <tr>
howcome@722 668 <td><em>Applies to:</em>
howcome@992 669 <td>non-replaced block-level elements (except table elements), table cells, and inline-block elements
howcome@722 670 <tr>
howcome@722 671 <td><em>Inherited:</em>
howcome@722 672 <td>no
howcome@722 673 <tr>
howcome@722 674 <td><em>Percentages:</em>
howcome@722 675 <td>N/A
howcome@722 676 <tr>
howcome@722 677 <td><em>Media:</em>
howcome@722 678 <td>visual
howcome@722 679 <tr>
howcome@722 680 <td><em>Computed&nbsp;value:</em>
howcome@722 681 <td>specified value
dbaron@7398 682 <tr>
dbaron@7398 683 <td><em>Animatable:</em>
dbaron@7398 684 <td>as <a href="http://dev.w3.org/csswg/css3-transitions/#animtype-integer">integer</a>
howcome@722 685 </table>
howcome@722 686
howcome@722 687 <p>This property describes the number of columns of a multicol element.
howcome@722 688
howcome@722 689 <dl>
howcome@722 690
howcome@722 691 <dt>auto
howcome@722 692
howcome@722 693 <dd>means that the number of columns will be determined by other properties
howcome@722 694 (e.g., 'column-width', if it has a non-auto value).
howcome@722 695
howcome@722 696 <dt>&lt;integer>
howcome@722 697
howcome@722 698 <dd>describes the optimal number of columns into which the content of
howcome@722 699 the element will be flowed. Values must be greater than 0. If both
howcome@722 700 'column-width' and 'column-count' have non-auto values, the integer
howcome@722 701 value describes the maximum number of columns.
howcome@722 702
howcome@722 703 </dl>
howcome@722 704
howcome@722 705
howcome@722 706 <div class=example>
howcome@722 707 <p>Example:</p>
howcome@722 708 <pre>body { column-count: 3 }</pre>
howcome@722 709 </div>
howcome@722 710
howcome@722 711
howcome@722 712 <h3>'columns'</h3>
howcome@722 713
howcome@722 714 <table class=propdef>
howcome@722 715 <tr>
howcome@722 716 <td><em>Name:</em>
howcome@722 717 <td><dfn>columns</dfn>
howcome@722 718 <tr>
howcome@722 719 <td><em>Value:</em>
bert@2627 720 <td><a href='#cw'>&lt;'column-width'></a> || <a href='#cc'>&lt;'column-count'></a>
howcome@722 721 <tr>
howcome@722 722 <td><em>Initial:</em>
howcome@722 723 <td>see individual properties
howcome@722 724 <tr>
howcome@722 725 <td><em>Applies to:</em>
howcome@992 726 <td>non-replaced block-level elements (except table elements), table cells, and inline-block elements
howcome@722 727 <tr>
howcome@722 728 <td><em>Inherited:</em>
howcome@722 729 <td>no
howcome@722 730 <tr>
howcome@722 731 <td><em>Percentages:</em>
howcome@722 732 <td>N/A
howcome@722 733 <tr>
howcome@722 734 <td><em>Media:</em>
howcome@722 735 <td>visual
howcome@722 736 <tr>
howcome@722 737 <td><em>Computed&nbsp;value:</em>
howcome@722 738 <td>see individual properties
dbaron@7398 739 <tr>
dbaron@7398 740 <td><em>Animatable:</em>
dbaron@7398 741 <td>see individual properties
howcome@722 742 </table>
howcome@722 743
howcome@722 744 <p>This is a shorthand property for setting 'column-width' and
howcome@984 745 'column-count'. Omitted values are set to their initial values.
howcome@722 746
howcome@984 747 <div class="example">
howcome@986 748 <p>Here are some valid declarations using the 'columns' property:
howcome@984 749 <pre>
howcome@984 750 columns: 12em; /* column-width: 12em; column-count: auto */
howcome@984 751 columns: auto 12em; /* column-width: 12em; column-count: auto */
howcome@984 752 columns: 2; /* column-width: auto; column-count: 2 */
howcome@984 753 columns: 2 auto; /* column-width: auto; column-count: 2 */
howcome@984 754 columns: auto; /* column-width: auto; column-count: auto */
howcome@984 755 columns: auto auto; /* column-width: auto; column-count: auto */
howcome@984 756 </pre>
howcome@984 757 </div>
howcome@722 758
howcome@722 759 <h3>Pseudo-algorithm</h3>
howcome@722 760
howcome@722 761 <P>The pseudo-algorithm below determines the used values for
howcome@722 762 'column-count' (N) and 'column-width' (W). There are two other
howcome@722 763 variables in the pseudo-algorithm:
howcome@722 764
howcome@722 765 <ul>
howcome@722 766
howcome@1040 767 <li><code>available-width</code>: if the used width of the
howcome@722 768 multi-column element has not been determined when the 'column-count'
howcome@1038 769 and 'column-width' must be determined (e.g., if it is floating with a
howcome@1036 770 'width' of 'auto' as per CSS 2.1 section 10.3.5) this variable is
howcome@1040 771 <code>unknown</code>, otherwise it is the same as the used width of
howcome@1040 772 the multi-column element. In vertical text, the used height replaces used width in this calculation.
howcome@722 773
howcome@722 774 <li><code>shrink-to-fit</code>: this variable represents the result of
howcome@722 775 a <em>shrink-to-fit</em> computation. CSS does not define the exact
howcome@722 776 algorithm.
howcome@722 777
howcome@722 778 </ul>
howcome@722 779
howcome@722 780 <p>Two assumptions are being made by the pseudo-algorithm:
howcome@722 781
howcome@722 782 <ul>
howcome@722 783 <li>that the block direction is unconstrained
howcome@722 784 <li>that no column breaks are added through style sheets
howcome@722 785 </ul>
howcome@722 786
howcome@722 787 <p>The <code>floor()</code> function rounds a number to the next smaller integer.
howcome@722 788
howcome@2530 789 <!--
howcome@722 790 <pre>
howcome@1186 791 (01) if ((column-width = auto) and (column-count = auto)) or
howcome@1186 792 (02) ((available-width = unknown) and (column-count = auto)) then
howcome@1186 793 (03) exit; /* no columns */
howcome@1186 794 (04) fi
howcome@1186 795 (05)
howcome@1186 796 (06) if (available-width = unknown) and (column-count != auto) and (column-width != auto) then
howcome@2491 797 (07) N := column-count;
howcome@1186 798 (08) W := column-width;
howcome@1186 799 (09) exit;
howcome@1186 800 (10) fi
howcome@1186 801 (11)
howcome@1186 802 (12) if (available-width = unknown) then
howcome@1186 803 (13) available-width := shrink-to-fit;
howcome@1186 804 (14) fi
howcome@1186 805 (15)
howcome@1186 806 (16) if (column-width = auto) then
howcome@2489 807 (18) N := column-count;
howcome@2489 808 (19) W := max(0, (available-width - ((N - 1) * column-gap))/N);
howcome@1186 809 (27) elsif (column-count = auto) then
howcome@1186 810 (28) if (column-width >= available-width) then
howcome@1186 811 (29) N := 1
howcome@1215 812 (30) W := available-width;
howcome@1186 813 (31) else
howcome@1186 814 (32) N := floor((available-width + column-gap) / (column-width + column-gap));
howcome@1186 815 (33) W := ((available-width + column-gap) / N) - column-gap;
howcome@1186 816 (34) fi
howcome@1215 817 (35) elsif (column-width >= available-width) then
howcome@1215 818 (36) N := 1
howcome@1215 819 (37) W := available-width;
howcome@1215 820 (38) else
howcome@2489 821 (39) N := min(column-count, floor((available-width + column-gap) / (column-width + column-gap)))
howcome@1215 822 (40) W := ((available-width + column-gap) / N) - column-gap;
howcome@1215 823 (41) fi
howcome@722 824 </pre>
howcome@722 825
howcome@2495 826 <p><span class=issue>Alternative encoding of pseudo-algorithm:
howcome@2530 827 -->
howcome@2491 828
howcome@2491 829 <pre>
howcome@2493 830 (01) if ((column-width = auto) and (column-count = auto)) then
howcome@2530 831 (02) exit; /* not a multicol element */
howcome@2493 832
howcome@2530 833 (03) if ((available-width = unknown) and (column-count = auto)) then
howcome@2530 834 (04) exit; /* no columns */
howcome@2493 835
howcome@2530 836 (05) if (available-width = unknown) and (column-count != auto) and (column-width != auto) then
howcome@2530 837 (06) N := column-count;
howcome@2530 838 (07) W := column-width;
howcome@2530 839 (08) exit;
howcome@2491 840
howcome@2530 841 (09) if (available-width = unknown) then
howcome@2530 842 (10) available-width := shrink-to-fit;
howcome@2491 843
howcome@2530 844 (11) if (column-width = auto) and (column-count != auto) then
howcome@2530 845 (12) N := column-count;
howcome@2530 846 (13) W := max(0, (available-width - ((N - 1) * column-gap)) / N);
howcome@2530 847 (14) exit;
howcome@2491 848
howcome@2530 849 (15) if (column-width != auto) and (column-count = auto) then
howcome@2530 850 (16) N := max(1, floor((available-width + column-gap) / (column-width + column-gap)));
howcome@2530 851 (17) W := ((available-width + column-gap) / N) - column-gap;
howcome@2530 852 (18) exit;
howcome@2491 853
howcome@2530 854 (19) if (column-width != auto) and (column-count != auto) then
howcome@2530 855 (20) N := min(column-count, floor((available-width + column-gap) / (column-width + column-gap)))
howcome@2851 856 (21) N := max(1, N);
howcome@2851 857 (22) W := ((available-width + column-gap) / N) - column-gap;
howcome@2851 858 (23) exit
howcome@2491 859 </pre>
howcome@2491 860
howcome@722 861
howcome@1040 862 <p>In paged media, user agents may perform this calculation on a
howcome@1040 863 per-page basis.
howcome@1040 864
howcome@722 865 <p class=note>Note that, in most cases, only one of 'column-width' and
howcome@722 866 'column-count' affect the layout. If 'column-width' has a value other
howcome@2530 867 than ''auto'', 'column-count' indicates the maximum number of columns.
howcome@2530 868 However, both 'column-width' and 'column-count' are honored when the
howcome@2530 869 width of the element has not been determined. This can, e.g., be the
howcome@2530 870 case for table cells and floats.
howcome@2530 871
howcome@722 872
howcome@722 873
howcome@722 874 <h3>Stacking context</h3>
howcome@722 875
howcome@722 876 <p>All column boxes in a multi-column element are in the same stacking
howcome@722 877 context and the drawing order of their contents is as specified in
howcome@4200 878 CSS 2.1. Column boxes do not establish new stacking contexts.
howcome@722 879
howcome@722 880
howcome@722 881 <h2>Column gaps and rules</h2>
howcome@722 882
howcome@1426 883 <p>Column gaps and rules are placed between columns in the same
howcome@1426 884 multicol element. The length of the column gaps and column rules
howcome@722 885 is equal to the length of the columns. Column gaps take up space. That
howcome@722 886 is, column gaps will push apart content in adjacent columns (within
howcome@1426 887 the same multicol element).
howcome@722 888
howcome@1465 889 <p>A column rule is drawn in the middle of the column gap with the
howcome@1465 890 endpoints at opposing content edges of the multicol element. Column
howcome@1465 891 rules do not take up space. That is, the presence or thickness of a
howcome@1465 892 column rule will not alter the placement of anything else. If a column
howcome@4197 893 rule is wider than its gap, the adjacent column boxes will overlap the
howcome@4197 894 rule, and the rule may possibly extend outside the box of the multicol
howcome@2081 895 element. Column rules are painted just above the background of the
howcome@4197 896 multicol element. Column rules are only drawn between two columns that
howcome@4197 897 both have content.
howcome@722 898
howcome@722 899 <h3>'column-gap'</h3>
howcome@722 900
howcome@722 901 <table class=propdef>
howcome@722 902 <tr>
howcome@722 903 <td><em>Name:</em>
howcome@722 904 <td><dfn>column-gap</dfn>
howcome@722 905 <tr>
howcome@722 906 <td><em>Value:</em>
howcome@722 907 <td>&lt;length&gt; | normal
howcome@722 908 <tr>
howcome@722 909 <td><em>Initial:</em>
howcome@722 910 <td>normal
howcome@722 911 <tr>
howcome@722 912 <td><em>Applies to:</em>
howcome@992 913 <td>multicol elements
howcome@722 914 <tr>
howcome@722 915 <td><em>Inherited:</em>
howcome@722 916 <td>no
howcome@722 917 <tr>
howcome@722 918 <td><em>Percentages:</em>
howcome@722 919 <td>N/A
howcome@722 920 <tr>
howcome@722 921 <td><em>Media:</em>
howcome@722 922 <td>visual
howcome@722 923 <tr>
howcome@722 924 <td><em>Computed&nbsp;value:</em>
howcome@1002 925 <td>absolute length or 'normal'
dbaron@7398 926 <tr>
dbaron@7398 927 <td><em>Animatable:</em>
dbaron@7398 928 <td>as <a href="http://dev.w3.org/csswg/css3-transitions/#animtype-length">length</a>
howcome@722 929 </table>
howcome@722 930
howcome@722 931
howcome@1420 932 <p>The 'column-gap' property sets the gap between columns. If there is
howcome@1420 933 a column rule between columns, it will appear in the middle of the
howcome@1420 934 gap.
howcome@722 935
howcome@722 936 <p>The ''normal'' value is UA-specific. A value of ''1em'' is suggested.
howcome@722 937
howcome@722 938 <p>Column gaps cannot be negative.
howcome@722 939
howcome@722 940 <h3 id='crc'>'column-rule-color'</h3>
howcome@722 941
howcome@722 942 <table class=propdef>
howcome@722 943 <tr>
howcome@722 944 <td><em>Name:</em>
howcome@722 945 <td><dfn>column-rule-color</dfn>
howcome@722 946 <tr>
howcome@722 947 <td><em>Value:</em>
howcome@722 948 <td>&lt;color&gt;
howcome@722 949 <tr>
howcome@722 950 <td><em>Initial:</em>
howcome@6240 951 <td><a href="http://www.w3.org/TR/css3-color/#currentcolor">currentColor</a>
howcome@6240 952 <!-- <td>same as for 'color' property [[!CSS21]]-->
howcome@722 953 <tr>
howcome@722 954 <td><em>Applies to:</em>
howcome@992 955 <td>multicol elements
howcome@722 956 <tr>
howcome@722 957 <td><em>Inherited:</em>
howcome@722 958 <td>no
howcome@722 959 <tr>
howcome@722 960 <td><em>Percentages:</em>
howcome@722 961 <td>N/A
howcome@722 962 <tr>
howcome@722 963 <td><em>Media:</em>
howcome@722 964 <td>visual
howcome@722 965 <tr>
howcome@722 966 <td><em>Computed&nbsp;value:</em>
howcome@1405 967 <td>the same as the computed value for the 'color' property [[!CSS21]]
dbaron@7398 968 <tr>
dbaron@7398 969 <td><em>Animatable:</em>
dbaron@7398 970 <td>as <a href="http://dev.w3.org/csswg/css3-transitions/#animtype-color">color</a>
howcome@722 971 </table>
howcome@722 972
howcome@722 973 <p>This property sets the color of the column rule. The &lt;color&gt;
howcome@1405 974 values are defined in [[!CSS21]].
howcome@722 975
howcome@722 976 <h3 id='crs'>'column-rule-style'</h3>
howcome@722 977
howcome@722 978 <table class=propdef>
howcome@722 979 <tr>
howcome@722 980 <td><em>Name:</em>
howcome@722 981 <td><dfn>column-rule-style</dfn>
howcome@722 982 <tr>
howcome@722 983 <td><em>Value:</em>
howcome@2092 984 <td><a href="http://www.w3.org/TR/CSS2/tables.html#table-border-styles">&lt;border-style&gt;</a>
howcome@2092 985
howcome@2092 986 <!--http://www.w3.org/TR/CSS21/box.html#value-def-border-style-->
howcome@2092 987
howcome@722 988 <tr>
howcome@722 989 <td><em>Initial:</em>
howcome@722 990 <td>none
howcome@722 991 <tr>
howcome@722 992 <td><em>Applies to:</em>
howcome@992 993 <td>multicol elements
howcome@722 994 <tr>
howcome@722 995 <td><em>Inherited:</em>
howcome@722 996 <td>no
howcome@722 997 <tr>
howcome@722 998 <td><em>Percentages:</em>
howcome@722 999 <td>N/A
howcome@722 1000 <tr>
howcome@722 1001 <td><em>Media:</em>
howcome@722 1002 <td>visual
howcome@722 1003 <tr>
howcome@722 1004 <td><em>Computed&nbsp;value:</em>
howcome@722 1005 <td>specified value
dbaron@7398 1006 <tr>
dbaron@7398 1007 <td><em>Animatable:</em>
dbaron@7398 1008 <td>no
howcome@722 1009 </table>
howcome@722 1010
howcome@2092 1011 <p>The 'column-rule-style' property sets the style of the rule between columns of an element. The &lt;border-style&gt; values are defined in [[!CSS21]] and the values are interpreted as in the <a href="http://www.w3.org/TR/CSS2/tables.html#collapsing-borders">the collapsing border model</a>.
howcome@722 1012
howcome@1418 1013 <p>The 'none' value forces the computed value of <span class="property">'column-rule-width'</span> to be '0'.
howcome@722 1014
howcome@722 1015
howcome@722 1016 <h3 id='crw'>'column-rule-width'</h3>
howcome@722 1017
howcome@722 1018 <table class=propdef>
howcome@722 1019 <tr>
howcome@722 1020 <td><em>Name:</em>
howcome@722 1021 <td><dfn>column-rule-width</dfn>
howcome@722 1022 <tr>
howcome@722 1023 <td><em>Value:</em>
howcome@1714 1024 <td><a href="http://www.w3.org/TR/CSS21/box.html#value-def-border-width">&lt;border-width&gt;</a>
howcome@722 1025 <tr>
howcome@722 1026 <td><em>Initial:</em>
howcome@722 1027 <td>medium
howcome@722 1028 <tr>
howcome@722 1029 <td><em>Applies to:</em>
howcome@992 1030 <td>multicol elements
howcome@722 1031 <tr>
howcome@722 1032 <td><em>Inherited:</em>
howcome@722 1033 <td>no
howcome@722 1034 <tr>
howcome@722 1035 <td><em>Percentages:</em>
howcome@722 1036 <td>N/A
howcome@722 1037 <tr>
howcome@722 1038 <td><em>Media:</em>
howcome@722 1039 <td>visual
howcome@722 1040 <tr>
howcome@722 1041 <td><em>Computed&nbsp;value:</em>
howcome@722 1042 <td>absolute length; '0' if the column rule style is 'none' or 'hidden'
dbaron@7398 1043 <tr>
dbaron@7398 1044 <td><em>Animatable:</em>
dbaron@7398 1045 <td>as <a href="http://dev.w3.org/csswg/css3-transitions/#animtype-length">length</a>
howcome@722 1046 </table>
howcome@722 1047
howcome@722 1048 <p>This property sets the width of the rule between columns. Negative values are not allowed.
howcome@722 1049
howcome@722 1050
howcome@722 1051 <h3>'column-rule'</h3>
howcome@722 1052
howcome@722 1053 <table class=propdef>
howcome@722 1054 <tr>
howcome@722 1055 <td><em>Name:</em>
howcome@722 1056 <td><dfn>column-rule</dfn>
howcome@722 1057 <tr>
howcome@722 1058 <td><em>Value:</em>
howcome@1714 1059 <td><a href='#crw'>&lt;'column-rule-width'&gt;</a> || <a href='#crs'>&lt;'column-rule-style'&gt;</a> || [ <a href='#crc'>&lt;'column-rule-color'&gt;</a> | transparent ]
howcome@722 1060 <tr>
howcome@722 1061 <td><em>Initial:</em>
howcome@722 1062 <td>see individual properties
howcome@722 1063 <tr>
howcome@722 1064 <td><em>Applies to:</em>
howcome@992 1065 <td>multicol elements
howcome@722 1066 <tr>
howcome@722 1067 <td><em>Inherited:</em>
howcome@722 1068 <td>no
howcome@722 1069 <tr>
howcome@722 1070 <td><em>Percentages:</em>
howcome@722 1071 <td>N/A
howcome@722 1072 <tr>
howcome@722 1073 <td><em>Media:</em>
howcome@722 1074 <td>visual
howcome@722 1075 <tr>
howcome@722 1076 <td><em>Computed&nbsp;value:</em>
howcome@722 1077 <td>see individual properties
dbaron@7398 1078 <tr>
dbaron@7398 1079 <td><em>Animatable:</em>
dbaron@7398 1080 <td>see individual properties
howcome@722 1081 </table>
howcome@722 1082
howcome@1420 1083 <p>This property is a shorthand for setting
howcome@722 1084 'column-rule-width', 'column-rule-style', and 'column-rule-color' at
howcome@1002 1085 the same place in the style sheet. Omitted values are set to their
howcome@1002 1086 initial values.
howcome@722 1087
howcome@1426 1088 <div class=example>
howcome@1426 1089
howcome@1426 1090 <p>In this example, the column rule and the column gap have the same
howcome@1426 1091 width. Therefore, they will occupy exactly the same space.
howcome@1426 1092
howcome@1426 1093 <pre>
howcome@1426 1094 body {
howcome@1426 1095 column-gap: 1em;
howcome@1426 1096 column-rule-width: 1em;
howcome@1426 1097 column-rule-style: solid;
howcome@1426 1098 column-rule-color: black;
howcome@1426 1099 }
howcome@1426 1100 </pre>
howcome@1426 1101 </div>
howcome@1426 1102
howcome@1426 1103
howcome@1426 1104 <div class=example>
howcome@1495 1105 <p>If a tall image is moved to a column on the next page to find room
howcome@1495 1106 for it, its natural column may be left empty. If so, the column is is
howcome@1495 1107 still considered to have content for the purpose of deciding if the
howcome@1495 1108 column rule should be drawn.
howcome@1426 1109 </div>
howcome@1426 1110
howcome@722 1111
howcome@722 1112
howcome@722 1113 <h2>Column breaks</h2>
howcome@722 1114
howcome@722 1115 <p>When content is laid out in multiple columns, the user agent must
howcome@722 1116 determine where column breaks are placed. The problem of breaking
howcome@4198 1117 content into columns is similar to breaking content into pages, which
howcome@4198 1118 is described in CSS 2.1, section 13.3.3 [[!CSS21]].
howcome@722 1119
howcome@1156 1120 <p>Three new properties are introduced to allow column breaks to be
howcome@1405 1121 described in the same properties as page breaks: 'break-before',
howcome@1405 1122 'break-after', and 'break-inside'. These properties take the same
howcome@1405 1123 values as 'page-break-before', 'page-break-after', and
bert@1576 1124 'page-break-inside' [[!CSS21]]. In addition, some new keyword values
howcome@1405 1125 are added.
howcome@1156 1126
howcome@1714 1127
howcome@1714 1128 <h3>'break-before', 'break-after', 'break-inside'</h3>
howcome@1714 1129
howcome@1405 1130 <table class=propdef>
howcome@1405 1131 <tr>
howcome@1405 1132 <td><em>Name:</em>
howcome@1405 1133 <td><dfn>break-before</dfn>
howcome@1405 1134 <tr>
howcome@1405 1135 <td><em>Value:</em>
howcome@1405 1136 <td>auto | always | avoid | left | right | page | column | avoid-page | avoid-column
howcome@1405 1137 <tr>
howcome@1405 1138 <td><em>Initial:</em>
howcome@1405 1139 <td>auto
howcome@1405 1140 <tr>
howcome@1405 1141 <td><em>Applies to:</em>
howcome@1405 1142 <td>block-level elements
howcome@1405 1143 <tr>
howcome@1405 1144 <td><em>Inherited:</em>
howcome@1405 1145 <td>no
howcome@1405 1146 <tr>
howcome@1405 1147 <td><em>Percentages:</em>
howcome@1405 1148 <td>N/A
howcome@1405 1149 <tr>
howcome@1405 1150 <td><em>Media:</em>
howcome@1405 1151 <td>paged
howcome@1405 1152 <tr>
howcome@1405 1153 <td><em>Computed&nbsp;value:</em>
howcome@1405 1154 <td>specified value
dbaron@7398 1155 <tr>
dbaron@7398 1156 <td><em>Animatable:</em>
dbaron@7398 1157 <td>no
howcome@1156 1158 </table>
howcome@1156 1159
howcome@1405 1160 <table class=propdef>
howcome@1405 1161 <tr>
howcome@1405 1162 <td><em>Name:</em>
howcome@1405 1163 <td><dfn>break-after</dfn>
howcome@1405 1164 <tr>
howcome@1405 1165 <td><em>Value:</em>
howcome@1405 1166 <td>auto | always | avoid | left | right | page | column | avoid-page | avoid-column
howcome@1405 1167 <tr>
howcome@1405 1168 <td><em>Initial:</em>
howcome@1405 1169 <td>auto
howcome@1405 1170 <tr>
howcome@1405 1171 <td><em>Applies to:</em>
howcome@1405 1172 <td>block-level elements
howcome@1405 1173 <tr>
howcome@1405 1174 <td><em>Inherited:</em>
howcome@1405 1175 <td>no
howcome@1405 1176 <tr>
howcome@1405 1177 <td><em>Percentages:</em>
howcome@1405 1178 <td>N/A
howcome@1405 1179 <tr>
howcome@1405 1180 <td><em>Media:</em>
howcome@1405 1181 <td>paged
howcome@1405 1182 <tr>
howcome@1405 1183 <td><em>Computed&nbsp;value:</em>
howcome@1405 1184 <td>specified value
dbaron@7398 1185 <tr>
dbaron@7398 1186 <td><em>Animatable:</em>
dbaron@7398 1187 <td>no
howcome@1156 1188 </table>
howcome@1156 1189
howcome@1239 1190
howcome@1156 1191
howcome@1405 1192 <table class=propdef>
howcome@1405 1193 <tr>
howcome@1405 1194 <td><em>Name:</em>
howcome@1405 1195 <td><dfn>break-inside</dfn>
howcome@1405 1196 <tr>
howcome@1405 1197 <td><em>Value:</em>
howcome@1405 1198 <td>auto | avoid | avoid-page | avoid-column
howcome@1405 1199 <tr>
howcome@1405 1200 <td><em>Initial:</em>
howcome@1405 1201 <td>auto
howcome@1405 1202 <tr>
howcome@1405 1203 <td><em>Applies to:</em>
howcome@1405 1204 <td>block-level elements
howcome@1405 1205 <tr>
howcome@1405 1206 <td><em>Inherited:</em>
howcome@1405 1207 <td>no
howcome@1405 1208 <tr>
howcome@1405 1209 <td><em>Percentages:</em>
howcome@1405 1210 <td>N/A
howcome@1405 1211 <tr>
howcome@1405 1212 <td><em>Media:</em>
howcome@1405 1213 <td>paged
howcome@1405 1214 <tr>
howcome@1405 1215 <td><em>Computed&nbsp;value:</em>
howcome@1405 1216 <td>specified value
dbaron@7398 1217 <tr>
dbaron@7398 1218 <td><em>Animatable:</em>
dbaron@7398 1219 <td>no
howcome@1405 1220 </table>
howcome@1405 1221
howcome@1405 1222
howcome@1714 1223 <p>These properties describe page/column break behavior before/after/inside the generated box. These values are normatively defined in [[!CSS21]]:
howcome@1405 1224
howcome@1405 1225 <dl>
howcome@1405 1226 <dt>auto
howcome@1405 1227 <dd>Neither force nor forbid a page/column break before (after, inside) the generated box.
howcome@1405 1228 <dt>always
howcome@1405 1229 <dd>Always force a page break before (after) the generated box.
howcome@1405 1230 <dt>avoid
howcome@1405 1231 <dd>Avoid a page/column break before (after, inside) the generated box.
howcome@1405 1232 <dt>left
howcome@1405 1233 <dd>Force one or two page breaks before (after) the generated box so that the next page is formatted as a left page.
howcome@1405 1234 <dt>right
howcome@1405 1235 <dd>Force one or two page breaks before (after) the generated box so that the next page is formatted as a right page.
howcome@1405 1236 </dl>
howcome@1405 1237
howcome@1405 1238 <p>This specification adds the following new values:
howcome@1405 1239
howcome@1405 1240 <dl>
howcome@1405 1241 <dt>page
howcome@1405 1242 <dd>Always force a page break before (after) the generated box.
howcome@1405 1243 <dt>column
howcome@1405 1244 <dd>Always force a column break before (after) the generated box.
howcome@1405 1245 <dt>avoid-page
howcome@1405 1246 <dd>Avoid a page break before (after, inside) the generated box.
howcome@1405 1247 <dt>avoid-column
howcome@1405 1248 <dd>Avoid a column break before (after, inside) the generated box.
howcome@1405 1249 </dl>
howcome@1405 1250
howcome@1416 1251 <p>When a page or column break splits a box, the box's margins,
howcome@1416 1252 borders, and padding have no visual effect where the split occurs.
howcome@1416 1253 However, the margin immediately after a forced page/column break will
howcome@1426 1254 be preserved. A forced page/column break is a break that does not occur
howcome@1416 1255 naturally.
howcome@1416 1256
howcome@1416 1257 <p class=note>In the future, new properties may describe alternate
howcome@1416 1258 ways to handle margins, borders and padding around page/column breaks.
howcome@1405 1259
howcome@1156 1260 <div class="example">
howcome@1156 1261
howcome@1156 1262 <p>In this example, forced column breaks appear before <code>h2</code>
howcome@1156 1263 elements and after <code>img</code> elements:
howcome@1156 1264
howcome@1156 1265 <pre>
howcome@1426 1266 .multicol { column-width: 8em }
howcome@1405 1267 .multicol h2 { break-before: column; margin-top: 2em }
howcome@1156 1268 .multicol img { break-after: column }
howcome@1156 1269 </pre>
howcome@1156 1270
howcome@1405 1271 <p>The top margin of <code>h2</code> elements will be preserved since the column break is forced.
howcome@1405 1272
howcome@1156 1273 </div>
howcome@1156 1274
howcome@1156 1275 <div class="example">
howcome@1405 1276
howcome@1405 1277 <p>In this example, the formatter will try avoid column breaks inside <code>p</code> elements:
howcome@1405 1278
howcome@1156 1279 <pre>
howcome@1405 1280 p { break-inside: avoid-column }
howcome@1156 1281 </pre>
howcome@1156 1282 </div>
howcome@1156 1283
howcome@1048 1284
howcome@722 1285
howcome@722 1286 <h2>Spanning columns</h2>
howcome@722 1287
howcome@722 1288 <p>The 'column-span' property makes it possible for an element to span
howcome@722 1289 across several columns.
howcome@722 1290
howcome@722 1291
howcome@722 1292 <h3>'column-span'</h3>
howcome@722 1293
howcome@722 1294 <table class=propdef>
howcome@722 1295 <tr>
howcome@722 1296 <td><em>Name:</em>
howcome@722 1297 <td><dfn>column-span</dfn>
howcome@722 1298 <tr>
howcome@722 1299 <td><em>Value:</em>
howcome@2121 1300 <td>none | all
howcome@722 1301 <tr>
howcome@722 1302 <td><em>Initial:</em>
howcome@2121 1303 <td>none
howcome@722 1304 <tr>
howcome@722 1305 <td><em>Applies to:</em>
howcome@4197 1306 <td>in-flow block-level elements
howcome@722 1307 <tr>
howcome@722 1308 <td><em>Inherited:</em>
howcome@722 1309 <td>no
howcome@722 1310 <tr>
howcome@722 1311 <td><em>Percentages:</em>
howcome@722 1312 <td>N/A
howcome@722 1313 <tr>
howcome@722 1314 <td><em>Media:</em>
howcome@722 1315 <td>visual
howcome@722 1316 <tr>
howcome@722 1317 <td><em>Computed&nbsp;value:</em>
howcome@4197 1318 <td>specified value
dbaron@7398 1319 <tr>
dbaron@7398 1320 <td><em>Animatable:</em>
dbaron@7398 1321 <td>no
howcome@722 1322 </table>
howcome@722 1323
howcome@722 1324 <p>This property describes how many columns an element spans across. Values are:
howcome@722 1325
howcome@722 1326 <dl>
howcome@722 1327
howcome@2121 1328 <dt>none
howcome@2123 1329
howcome@722 1330 <dd>The element does not span multiple columns.
howcome@722 1331
howcome@722 1332 <dt>all
howcome@722 1333
howcome@4197 1334 <dd>The element spans across all columns of the nearest multicol
howcome@4197 1335 ancestor in the same block formatting context. The element spans
howcome@4197 1336 across all columns. Content in the normal flow that appears before the
howcome@4197 1337 element is automatically balanced across all columns before the
howcome@4197 1338 element appears. The element establishes a new block formatting
howcome@4197 1339 context.
howcome@722 1340
howcome@722 1341 </dl>
howcome@722 1342
howcome@722 1343 <p>An element that spans more than one column is called a
howcome@4197 1344 <dfn>spanning element</dfn> and the box it creates is called a <dfn>spanner</dfn>.
howcome@722 1345
howcome@2121 1346 <!--
howcome@2086 1347 <p>This property has no effect on elements that do not fit entirely
howcome@2081 1348 within the multicol element. Also, if a setting on this property pushes the
howcome@2081 1349 element outside a multicol element, this property will have no effect.
howcome@2121 1350 -->
howcome@2081 1351
howcome@722 1352 <div class="example">
howcome@722 1353
howcome@722 1354 <p>In this example, an <code>h2</code> element has been added to the
howcome@4197 1355 sample document after the sixth sentence (i.e., after the word "jkl."). This styling applies:
howcome@722 1356
howcome@722 1357 <pre class="css">
howcome@722 1358 h2 { column-span: all; background: silver }
howcome@722 1359 img { display: none }
howcome@722 1360 </pre>
howcome@722 1361
howcome@722 1362 <p>By setting 'column-span' to ''all'', all content that appear before
howcome@722 1363 the <code>h2</code> element is shown before the <code>h2</code>
howcome@722 1364 element.
howcome@722 1365
howcome@722 1366 <div class=cols>
howcome@722 1367
howcome@722 1368 <p>Ab cde fgh i jkl. Mno<br>
howcome@722 1369 pqr stu vw xyz. A bc<br>
howcome@722 1370
howcome@722 1371 <br><br>
howcome@722 1372
howcome@722 1373 M nop qrst uv wx yz.<br>
howcome@722 1374 Ab cde fgh i jkl. Mno<br>
howcome@722 1375 pqr stu vw xyz. A bc<br>
howcome@722 1376 def g hij klm nopqrs<br>
howcome@722 1377 tuv wxy z. Abc de fg<br>
howcome@722 1378 hi jklmno. Pqrstu vw<br>
howcome@722 1379
howcome@722 1380
howcome@722 1381
howcome@722 1382 <div class="col" style="left: 175px">
howcome@722 1383 <p>def g hij klm nopqrs<br>
howcome@722 1384 tuv wxy z. Abc de fg<br>
howcome@722 1385 <br><br>
howcome@722 1386 x yz. Abc def ghi jkl.<br>
howcome@722 1387 M nop qrst uv wx yz.<br>
howcome@722 1388 Ab cde fgh i jkl. Mno<br>
howcome@722 1389 pqr stu vw xyz. A bc<br>
howcome@722 1390 def g hij klm nopqrs<br>
howcome@722 1391 tuv wxy z. Abc de fg<br>
howcome@722 1392
howcome@722 1393
howcome@722 1394 </div>
howcome@722 1395
howcome@722 1396 <div class="col" style="left: 350px">
howcome@722 1397 <p>
howcome@722 1398 hi jklmno. Pqrstu vw<br>
howcome@722 1399 x yz. Abc def ghi jkl.<br>
howcome@722 1400 <br><br>
howcome@722 1401 hi jklmno. Pqrstu vw<br>
howcome@722 1402 x yz. Abc def ghi jkl.<br>
howcome@722 1403 M nop qrst uv wx yz.<br>
howcome@722 1404 Ab cde fgh i jkl. Mno<br>
howcome@722 1405 pqr stu vw xyz.
howcome@722 1406
howcome@722 1407 </div>
howcome@722 1408
howcome@722 1409
howcome@722 1410 <div class=rep style="width: 490px; height: 20px; background: silver; font-size: 1.5em; padding: 5px">An H2 element</div>
howcome@722 1411 <div class=gap style="left: 150px"></div>
howcome@722 1412 <div class=gap style="left: 325px"></div>
howcome@722 1413 </div>
howcome@722 1414 </div>
howcome@722 1415
howcome@722 1416
howcome@2121 1417 <p>A spanning element takes up more space than the element would take
howcome@2121 1418 up otherwise. When space is limited, it may be impossible to find room
howcome@2121 1419 for the spanning element. In these cases, user agents may treat the
howcome@2132 1420 element as if 'none' had been specified on this property.
howcome@2132 1421
howcome@2132 1422 <div class="example">
howcome@2132 1423
howcome@4197 1424 <p>In this example, the
howcome@2149 1425 H2 element appears later in the content, and the height of the
howcome@2149 1426 multicol element is constrained. Therefore, the H2 element appears in
howcome@2149 1427 the overflow and there is not room to make the element spanning.
howcome@2149 1428 As a result, the element appears as if 'column-span: none' was
howcome@2149 1429 specified.
howcome@2132 1430
howcome@2132 1431 <div class=cols style="height: 100px">
howcome@2132 1432
howcome@2132 1433 <div class="col" style="">
howcome@2132 1434 <p>
howcome@2132 1435 Ab cde fgh i jkl. Mno<br>
howcome@2132 1436 pqr stu vw xyz. A bc<br>
howcome@2132 1437 def g hij klm nopqrs<br>
howcome@2132 1438 tuv wxy z. Abc de fg<br>
howcome@2132 1439 hi jklmno. Pqrstu vw<br>
howcome@2132 1440 </div>
howcome@2132 1441
howcome@2132 1442 <div class="col" style="left: 175px">
howcome@2132 1443 <p>
howcome@2132 1444 x yz. Abc def ghi jkl.<br>
howcome@2132 1445 M nop qrst uv wx yz.<br>
howcome@2132 1446 Ab cde fgh i jkl. Mno<br>
howcome@2132 1447 pqr stu vw xyz. A bc<br>
howcome@2132 1448 def g hij klm nopqrs
howcome@2132 1449 </div>
howcome@2132 1450
howcome@2132 1451 <div class="col" style="left: 350px">
howcome@2132 1452 <p>
howcome@2132 1453 tuv wxy z. Abc de fg<br>
howcome@2132 1454 hi jklmno. Pqrstu vw<br>
howcome@2132 1455 x yz. Abc def ghi jkl.<br>
howcome@2132 1456 M nop qrst uv wx yz.<br>
howcome@2132 1457 Ab cde fgh i jkl. Mno<br>
howcome@2132 1458 </div>
howcome@2132 1459
howcome@2132 1460 <div class="col" style="left: 525px">
howcome@2153 1461 <p>pqr stu vw xyz.
howcome@2169 1462 <div class=rep style="width: 140px; height: 40px; background: silver; font-size: 1.5em; padding: 5px; margin: 0; position: static">An H2 element</div>
howcome@2161 1463 A bc def g hij klm
howcome@2161 1464 </div>
howcome@2161 1465
howcome@2165 1466
howcome@2161 1467 <div class="col" style="left: 700px">
howcome@2161 1468 nopqrs tuv wxy z.
howcome@2161 1469 </div>
howcome@2165 1470
howcome@2161 1471
howcome@2132 1472 <div class=gap style="left: 150px"></div>
howcome@2132 1473 <div class=gap style="left: 325px"></div>
howcome@2132 1474 <div class=gap style="left: 500px"></div>
howcome@2167 1475 <div class=gap style="left: 675px"></div>
howcome@2165 1476
howcome@2132 1477 </div>
howcome@2132 1478
howcome@2132 1479 </div>
howcome@2132 1480
howcome@2132 1481
howcome@2121 1482
howcome@2121 1483
howcome@4197 1484 <div class="example">
howcome@4197 1485
howcome@4197 1486 <p>This example is similar to the previous example, except that the H2 element appears naturally in the last column. Still, there is not enough room to make the element spanning.
howcome@4197 1487
howcome@4197 1488 <div class=cols style="height: 100px">
howcome@4197 1489
howcome@4197 1490 <div class="col" style="">
howcome@4197 1491 <p>
howcome@4197 1492 Ab cde fgh i jkl. Mno<br>
howcome@4197 1493 pqr stu vw xyz. A bc<br>
howcome@4197 1494 def g hij klm nopqrs<br>
howcome@4197 1495 tuv wxy z. Abc de fg<br>
howcome@4197 1496 hi jklmno. Pqrstu vw<br>
howcome@4197 1497 </div>
howcome@4197 1498
howcome@4197 1499 <div class="col" style="left: 175px">
howcome@4197 1500 <p>
howcome@4197 1501 x yz. Abc def ghi jkl.<br>
howcome@4197 1502 M nop qrst uv wx yz.<br>
howcome@4197 1503 Ab cde fgh i jkl. Mno<br>
howcome@4197 1504 pqr stu vw xyz. A bc<br>
howcome@4197 1505 def g hij klm nopqrs
howcome@4197 1506 </div>
howcome@4197 1507
howcome@4197 1508 <div class="col" style="left: 350px">
howcome@4197 1509 <p>
howcome@4197 1510 tuv wxy z. Abc de fg<br>
howcome@4197 1511 hi jklmno.
howcome@4197 1512 <div class=rep style="width: 140px; height: 40px; background: silver; font-size: 1.5em; padding: 5px; margin: 0; position: static">An H2 element</div>
howcome@4197 1513 </div>
howcome@4197 1514
howcome@4197 1515 <div class="col" style="left: 525px">
howcome@4197 1516 <p>A bc def g hij klm<br>
howcome@4197 1517 nop w rstu vw xyz.
howcome@4197 1518 </div>
howcome@4197 1519
howcome@4197 1520
howcome@4197 1521 <div class=gap style="left: 150px"></div>
howcome@4197 1522 <div class=gap style="left: 325px"></div>
howcome@4197 1523 <div class=gap style="left: 500px"></div>
howcome@4197 1524
howcome@4197 1525 </div>
howcome@4197 1526
howcome@4197 1527 </div>
howcome@4197 1528
howcome@4197 1529
howcome@4197 1530 <div class="example">
howcome@4197 1531
howcome@4197 1532 <p>In paged media spanning elements are honored on all pages. In this example, the first three paragraphs have column breaks after them. An spanning <code>H2</code> element appears after the fourth paragraph. This would appear on the first page:
howcome@4197 1533
howcome@4197 1534 <div class=cols style="height: 80px; border-bottom: none">
howcome@4197 1535
howcome@4197 1536 <div class="col" style="">
howcome@4197 1537
howcome@4197 1538 <p>
howcome@4197 1539 Ab cde fgh i jkl. Mno<br>
howcome@4197 1540 pqr stu vw xyz.
howcome@4197 1541 </div>
howcome@4197 1542
howcome@4197 1543 <div class="col" style="left: 175px">
howcome@4197 1544 <p>
howcome@4197 1545 Ab cde fgh i jkl. Mno<br>
howcome@4197 1546 pqr stu vw xyz. A bc<br>
howcome@4197 1547 def g hij klm nopqrs<br>
howcome@4197 1548 tuv wxy z.
howcome@4197 1549 </div>
howcome@4197 1550
howcome@4197 1551 <div class="col" style="left: 350px">
howcome@4197 1552 <p>
howcome@4197 1553 Ab cde fgh i jkl mno.<br>
howcome@4197 1554 Pq rstu vwxyz.
howcome@4197 1555 </div>
howcome@4197 1556
howcome@4197 1557
howcome@4197 1558 <div class=gap style="left: 150px"></div>
howcome@4197 1559 <div class=gap style="left: 325px"></div>
howcome@4197 1560 </div>
howcome@4197 1561
howcome@4197 1562 <p>This would appear on the second page:
howcome@4197 1563
howcome@4197 1564 <div class=cols style="height: 200px; border-top: none">
howcome@4197 1565
howcome@4197 1566
howcome@4197 1567 <p>Ab cde fgh i jkl. Mno<br>
howcome@4197 1568 pqr stu vw xyz. A bc<br>
howcome@4197 1569
howcome@4197 1570 <br><br>
howcome@4197 1571
howcome@4197 1572 M nop qrst uv wx yz.<br>
howcome@4197 1573 Ab cde fgh i jkl. Mno<br>
howcome@4197 1574 pqr stu vw xyz. A bc<br>
howcome@4197 1575 def g hij klm nopqrs<br>
howcome@4197 1576 tuv wxy z. Abc de fg<br>
howcome@4197 1577 hi jklmno. Pqrstu vw<br>
howcome@4197 1578
howcome@4197 1579
howcome@4197 1580
howcome@4197 1581 <div class="col" style="left: 175px">
howcome@4197 1582 <p>def g hij klm nopqrs<br>
howcome@4197 1583 tuv wxy z. Abc de fg<br>
howcome@4197 1584 <br><br>
howcome@4197 1585 x yz. Abc def ghi jkl.<br>
howcome@4197 1586 M nop qrst uv wx yz.<br>
howcome@4197 1587 Ab cde fgh i jkl. Mno<br>
howcome@4197 1588 pqr stu vw xyz. A bc<br>
howcome@4197 1589 def g hij klm nopqrs<br>
howcome@4197 1590 tuv wxy z. Abc de fg<br>
howcome@4197 1591
howcome@4197 1592
howcome@4197 1593 </div>
howcome@4197 1594
howcome@4197 1595 <div class="col" style="left: 350px">
howcome@4197 1596 <p>
howcome@4197 1597 hi jklmno. Pqrstu vw<br>
howcome@4197 1598 x yz. Abc def ghi jkl.<br>
howcome@4197 1599 <br><br>
howcome@4197 1600 hi jklmno. Pqrstu vw<br>
howcome@4197 1601 x yz. Abc def ghi jkl.<br>
howcome@4197 1602 M nop qrst uv wx yz.<br>
howcome@4197 1603 Ab cde fgh i jkl. Mno<br>
howcome@4197 1604 pqr stu vw xyz.
howcome@4197 1605
howcome@4197 1606 </div>
howcome@4197 1607
howcome@4197 1608
howcome@4197 1609 <div class=rep style="width: 490px; height: 20px; background: silver; font-size: 1.5em; padding: 5px">An H2 element</div>
howcome@4197 1610 <div class=gap style="left: 150px"></div>
howcome@4197 1611 <div class=gap style="left: 325px"></div>
howcome@4197 1612 </div>
howcome@4197 1613 </div>
howcome@4197 1614
howcome@4197 1615
howcome@4197 1616
howcome@722 1617
howcome@722 1618 <h2>Filling columns</h2>
howcome@722 1619
howcome@722 1620 <p>There are two strategies for filling columns: columns can either be
howcome@4197 1621 balanced, or not. If columns are balanced, user agents should try to
howcome@4197 1622 fill all columns in a row so that the columns appear to have the same
howcome@4197 1623 amount of content, while also trying to minimize the overflow content.
howcome@4197 1624 If columns are not balanced, they are filled sequentially; some
howcome@4197 1625 columns may end up partially filled, or with no content at all. In any
howcome@4197 1626 case, user agents must honor forced page breaks and should try to
howcome@4197 1627 honor 'widows', 'orphans' and other properties that may affect column
howcome@4197 1628 lengths.
howcome@722 1629
howcome@1714 1630 <h3 id='cf'>'column-fill'</h3>
howcome@1714 1631
howcome@722 1632 <table class=propdef>
howcome@722 1633 <tr>
howcome@722 1634 <td><em>Name:</em>
howcome@722 1635 <td><dfn>column-fill</dfn>
howcome@722 1636 <tr>
howcome@722 1637 <td><em>Value:</em>
howcome@722 1638 <td>auto | balance
howcome@722 1639 <tr>
howcome@722 1640 <td><em>Initial:</em>
howcome@722 1641 <td>balance
howcome@722 1642 <tr>
howcome@722 1643 <td><em>Applies to:</em>
howcome@2485 1644 <td>multicol elements
howcome@722 1645 <tr>
howcome@722 1646 <td><em>Inherited:</em>
howcome@722 1647 <td>no
howcome@722 1648 <tr>
howcome@722 1649 <td><em>Percentages:</em>
howcome@722 1650 <td>N/A
howcome@722 1651 <tr>
howcome@722 1652 <td><em>Media:</em>
howcome@986 1653 <td>see below
howcome@722 1654 <tr>
howcome@722 1655 <td><em>Computed&nbsp;value:</em>
howcome@4197 1656 <td>specified value
dbaron@7398 1657 <tr>
dbaron@7398 1658 <td><em>Animatable:</em>
dbaron@7398 1659 <td>no
howcome@722 1660 </table>
howcome@722 1661
howcome@722 1662 <p>The values are:
howcome@722 1663
howcome@722 1664 <dl>
howcome@722 1665 <dt>balance
howcome@722 1666 <dd>Balance content equally between columns, if possible.
howcome@722 1667 <dt>auto
howcome@722 1668 <dd>Fills columns sequentially.
howcome@722 1669 </dl>
howcome@722 1670
howcome@4197 1671 <!--
howcome@2485 1672 <p>In continuous media, this property will only be consulted if the
howcome@2485 1673 length of columns has been constrained. Otherwise, columns will
howcome@2485 1674 automatically be balanced.
howcome@4197 1675 -->
howcome@4197 1676
howcome@4197 1677 <p>In continuous media, this property does not have any effect in
howcome@2485 1678 overflow columns (see below).
howcome@2485 1679
howcome@4197 1680 <!--
howcome@2485 1681 <p>In paged media, this property will only have
howcome@2485 1682 effect on the last page the multicol element appears on.
howcome@4197 1683 -->
howcome@722 1684
howcome@2086 1685 <h2>Overflow</h2>
howcome@722 1686
howcome@1004 1687 <h3>Overflow inside multicol elements</h3>
howcome@1004 1688
howcome@1004 1689 <p>Content in the normal flow that extends into column gaps (e.g.,
howcome@1408 1690 long words or images) is clipped in the middle of the column gap.
howcome@1215 1691
howcome@1004 1692 <div class=example>
howcome@1004 1693
howcome@1408 1694 <p>In this example, the black image is wider than the column, and is
howcome@1408 1695 therefore clipped.
howcome@1004 1696
howcome@1004 1697 <div class=cols>
howcome@1408 1698 <p>Lorem ipsum dolor<br>sit amet. Nam at jus.
howcome@1408 1699 <br><br><br><br><br><br><br>
howcome@1408 1700 Sed imp er di et ris.<br>Cur abi tur et sapen.
howcome@1004 1701
howcome@1408 1702 <div style="position: absolute; left: 175px; top: 0; z-index: 6;">
howcome@1408 1703 <p>Lorem ipsum dolor<br>sit amet. Nam at jus.<br>
howcome@1408 1704 Sed imp er di et ris.<br>Cur abi tur et sapen.<br>
howcome@1408 1705 Vivamus a metus.<br> Aenean at risus<br> pharetra ante
howcome@1408 1706 luctu<br> feugiat quis enim.<br> Cum sociis natoque<br>
howcome@1408 1707 penatibus et magni.</div>
howcome@1004 1708
howcome@1408 1709 <div style="position: absolute; left: 350px; top: 0; z-index: 6;">
howcome@1408 1710 <p>Lorem ipsum dolor<br>sit amet. Nam at jus.<br>
howcome@1408 1711 Sed imp er di et ris.<br>Cur abi tur et sapen.<br>
howcome@1408 1712 Vivamus a metus.<br> Aenean at risus<br> pharetra ante
howcome@1408 1713 luctu<br> feugiat quis enim.<br> Cum sociis natoque<br>
howcome@1408 1714 penatibus et magni.</div>
howcome@1004 1715
howcome@1408 1716 <div class=rep style="width: 163px"></div>
howcome@1004 1717 <div class=gap style="left: 150px"></div>
howcome@1004 1718 <div class=gap style="left: 325px"></div>
howcome@1004 1719 </div>
howcome@1004 1720
howcome@1004 1721 </div>
howcome@1004 1722
howcome@1215 1723
howcome@2090 1724 <h3>Pagination and overflow outside multicol elements</h3>
howcome@1002 1725
howcome@2081 1726 <p>Content and column rules that extend outside column boxes at
howcome@2123 1727 the edges of the multi-column element are clipped according to the
howcome@722 1728 'overflow' property.
howcome@722 1729
howcome@1416 1730 <p>A multicol element can have more columns than it has room for due to:
howcome@722 1731
howcome@722 1732 <ul>
howcome@1002 1733
howcome@2081 1734 <li>a declaration that constrains the column height (e.g., using
howcome@2081 1735 'height' or 'max-height'). In this case, additional column boxes
howcome@2081 1736 are created in the inline direction
howcome@1416 1737
howcome@2081 1738 <li>the size of the page. In this case, additional column boxes are
howcome@2081 1739 moved to the next page(s).
howcome@2081 1740
howcome@2081 1741 <li>explicit column breaks. In this case, additional column boxes are
howcome@4197 1742 created in the inline direction for continuous media, and
howcome@2081 1743 additional column boxes are moved to the next page(s) for paged
howcome@4197 1744 media.
howcome@1416 1745
howcome@1002 1746 </ul>
howcome@1002 1747
howcome@4197 1748 <p>Columns that appear outside the multicol element in continuous media
howcome@2485 1749 are called <dfn>overflow columns</dfn>.
howcome@1002 1750
howcome@722 1751 <div class="example">
howcome@722 1752
howcome@722 1753 <p>In this example, the height of the multi-column element has been
howcome@722 1754 constrained to a maximum height. Also, the style sheet specifies that
howcome@722 1755 overflowing content should be visible:
howcome@722 1756
howcome@722 1757 <pre class=css>
howcome@722 1758 div {
howcome@722 1759 max-height: 5em;
howcome@722 1760 overflow: visible;
howcome@722 1761 }
howcome@722 1762 </pre>
howcome@722 1763
howcome@722 1764 <p>As a result, the number of columns is increased.
howcome@722 1765
howcome@722 1766 <div class=cols style="height: 100px">
howcome@722 1767
howcome@722 1768 <div class="col" style="">
howcome@722 1769
howcome@722 1770 <p>
howcome@722 1771 Ab cde fgh i jkl. Mno<br>
howcome@722 1772 pqr stu vw xyz. A bc<br>
howcome@722 1773 def g hij klm nopqrs<br>
howcome@722 1774 tuv wxy z. Abc de fg<br>
howcome@722 1775 hi jklmno. Pqrstu vw<br>
howcome@722 1776 </div>
howcome@722 1777
howcome@722 1778 <div class="col" style="left: 175px">
howcome@722 1779 <p>
howcome@722 1780 x yz. Abc def ghi jkl.<br>
howcome@722 1781 M nop qrst uv wx yz.<br>
howcome@722 1782 Ab cde fgh i jkl. Mno<br>
howcome@722 1783 pqr stu vw xyz. A bc<br>
howcome@722 1784 def g hij klm nopqrs
howcome@722 1785 </div>
howcome@722 1786
howcome@722 1787 <div class="col" style="left: 350px">
howcome@722 1788 <p>
howcome@722 1789 tuv wxy z. Abc de fg<br>
howcome@722 1790 hi jklmno. Pqrstu vw<br>
howcome@722 1791 x yz. Abc def ghi jkl.<br>
howcome@722 1792 M nop qrst uv wx yz.<br>
howcome@722 1793 Ab cde fgh i jkl. Mno<br>
howcome@722 1794 </div>
howcome@722 1795
howcome@722 1796 <div class="col" style="left: 525px">
howcome@722 1797 <p>
howcome@722 1798 pqr stu vw xyz. A bc<br>
howcome@722 1799 def g hij klm nopqrs<br>
howcome@722 1800 tuv wxy z. Abc de fg<br>
howcome@722 1801 hi jklmno. Pqrstu vw<br>
howcome@722 1802 x yz. Abc def ghi jkl.<br>
howcome@722 1803 </div>
howcome@722 1804
howcome@722 1805 <div class=gap style="left: 150px"></div>
howcome@722 1806 <div class=gap style="left: 325px"></div>
howcome@722 1807 <div class=gap style="left: 500px"></div>
howcome@722 1808 </div>
howcome@722 1809
howcome@722 1810 </div>
howcome@722 1811
howcome@4197 1812 <div class="example">
howcome@4197 1813
howcome@4197 1814 <p>In paged media, the overflow content goes into column on subsequent pages. Given the same content as in the previous example and a page box that only has room for five lines of formatted text, this would appear on the first page:
howcome@4197 1815
howcome@4197 1816 <div class=cols style="height: 100px; border-bottom: none">
howcome@4197 1817
howcome@4197 1818 <div class="col" style="">
howcome@4197 1819
howcome@4197 1820 <p>
howcome@4197 1821 Ab cde fgh i jkl. Mno<br>
howcome@4197 1822 pqr stu vw xyz. A bc<br>
howcome@4197 1823 def g hij klm nopqrs<br>
howcome@4197 1824 tuv wxy z. Abc de fg<br>
howcome@4197 1825 hi jklmno. Pqrstu vw<br>
howcome@4197 1826 </div>
howcome@4197 1827
howcome@4197 1828 <div class="col" style="left: 175px">
howcome@4197 1829 <p>
howcome@4197 1830 x yz. Abc def ghi jkl.<br>
howcome@4197 1831 M nop qrst uv wx yz.<br>
howcome@4197 1832 Ab cde fgh i jkl. Mno<br>
howcome@4197 1833 pqr stu vw xyz. A bc<br>
howcome@4197 1834 def g hij klm nopqrs
howcome@4197 1835 </div>
howcome@4197 1836
howcome@4197 1837 <div class="col" style="left: 350px">
howcome@4197 1838 <p>
howcome@4197 1839 tuv wxy z. Abc de fg<br>
howcome@4197 1840 hi jklmno. Pqrstu vw<br>
howcome@4197 1841 x yz. Abc def ghi jkl.<br>
howcome@4197 1842 M nop qrst uv wx yz.<br>
howcome@4197 1843 Ab cde fgh i jkl. Mno<br>
howcome@4197 1844 </div>
howcome@4197 1845
howcome@4197 1846
howcome@4197 1847 <div class=gap style="left: 150px"></div>
howcome@4197 1848 <div class=gap style="left: 325px"></div>
howcome@4197 1849 </div>
howcome@4197 1850
howcome@4197 1851 <p>Assuming column balancing, this would appear on the second page:
howcome@4197 1852
howcome@4197 1853 <div class=cols style="height: 45px; border-top: none">
howcome@4197 1854
howcome@4197 1855 <div class="col" style="">
howcome@4197 1856
howcome@4197 1857 <p>
howcome@4197 1858 pqr stu vw xyz. A bc<br>
howcome@4197 1859 def g hij klm nopqrs<br>
howcome@4197 1860 </div>
howcome@4197 1861
howcome@4197 1862 <div class="col" style="left: 175px">
howcome@4197 1863 <p>
howcome@4197 1864 tuv wxy z. Abc de fg<br>
howcome@4197 1865 hi jklmno. Pqrstu vw<br>
howcome@4197 1866 </div>
howcome@4197 1867
howcome@4197 1868 <div class="col" style="left: 350px">
howcome@4197 1869 <p>
howcome@4197 1870 x yz. Abc def ghi jkl.<br>
howcome@4197 1871 </div>
howcome@4197 1872
howcome@4197 1873
howcome@4197 1874 <div class=gap style="left: 150px"></div>
howcome@4197 1875 <div class=gap style="left: 325px"></div>
howcome@4197 1876 </div>
howcome@4197 1877
howcome@4197 1878
howcome@4197 1879 </div>
howcome@4197 1880
howcome@722 1881
howcome@722 1882 <div class="example">
howcome@722 1883
howcome@722 1884 <p>In this example, explicit column breaks are generated after paragraphs:
howcome@722 1885
howcome@722 1886 <pre class=css>
howcome@722 1887 p {
howcome@1414 1888 break-after: column;
howcome@722 1889 }
howcome@722 1890 </pre>
howcome@722 1891
howcome@2485 1892 <p>As a result, the number of columns increases and the extra columns
howcome@4201 1893 are added in the inline direction:
howcome@722 1894
howcome@722 1895 <div class=cols style="height: 100px">
howcome@722 1896
howcome@722 1897 <div class="col" style="">
howcome@722 1898
howcome@722 1899 <p>
howcome@722 1900 Ab cde fgh i jkl. Mno<br>
howcome@722 1901 pqr stu vw xyz.
howcome@722 1902 </div>
howcome@722 1903
howcome@722 1904 <div class="col" style="left: 175px">
howcome@722 1905 <p>
howcome@722 1906 Ab cde fgh i jkl. Mno<br>
howcome@722 1907 pqr stu vw xyz. A bc<br>
howcome@722 1908 def g hij klm nopqrs<br>
howcome@4197 1909 tuv wxyz. Abc defghi<br>
howcome@4197 1910 jklmno pqrstu vwxyz.
howcome@722 1911 </div>
howcome@722 1912
howcome@722 1913 <div class="col" style="left: 350px">
howcome@722 1914 <p>
howcome@722 1915 Ab cde fgh i jkl mno.<br>
howcome@722 1916 </div>
howcome@722 1917
howcome@722 1918 <div class="col" style="left: 525px">
howcome@722 1919 <p>
howcome@722 1920 Pqr stu vw xyz. A bc<br>
howcome@722 1921 def g hij klm nopqrs<br>
howcome@4201 1922 tuv wxy z.
howcome@722 1923 </div>
howcome@722 1924
howcome@722 1925 <div class=gap style="left: 150px"></div>
howcome@722 1926 <div class=gap style="left: 325px"></div>
howcome@722 1927 <div class=gap style="left: 500px"></div>
howcome@722 1928 </div>
howcome@722 1929
howcome@722 1930 </div>
howcome@722 1931
howcome@722 1932
howcome@722 1933 <div class="example">
howcome@722 1934
howcome@2485 1935 <p>In paged media, extra columns are shown on the next page. Given the
howcome@4197 1936 same code as the previous example, the last paragraph appears on the second page. This would appear on the first page:
howcome@4197 1937
howcome@4197 1938 <div class=cols style="height: 100px; border-bottom: none">
howcome@722 1939
howcome@722 1940 <div class="col" style="">
howcome@722 1941
howcome@722 1942 <p>
howcome@722 1943 Ab cde fgh i jkl. Mno<br>
howcome@722 1944 pqr stu vw xyz.
howcome@722 1945 </div>
howcome@722 1946
howcome@722 1947 <div class="col" style="left: 175px">
howcome@722 1948 <p>
howcome@722 1949 Ab cde fgh i jkl. Mno<br>
howcome@722 1950 pqr stu vw xyz. A bc<br>
howcome@722 1951 def g hij klm nopqrs<br>
howcome@4197 1952 tuv wxyz. Abc defghi<br>
howcome@4197 1953 jklmno pqrstu vwxyz.
howcome@722 1954 </div>
howcome@722 1955
howcome@722 1956 <div class="col" style="left: 350px">
howcome@722 1957 <p>
howcome@4197 1958 Ab cde fgh i jkl mno.<br>
howcome@722 1959 </div>
howcome@722 1960
howcome@722 1961
howcome@722 1962 <div class=gap style="left: 150px"></div>
howcome@722 1963 <div class=gap style="left: 325px"></div>
howcome@722 1964 </div>
howcome@722 1965
howcome@722 1966 <p>This would appear on the second page:
howcome@722 1967
howcome@4205 1968 <div class=cols style="height: 23px; border-top: none">
howcome@722 1969
howcome@722 1970 <div class="col" style="">
howcome@722 1971 <p>
howcome@4203 1972 Pqr stu vw xyz. A bc
howcome@4197 1973 </div>
howcome@4197 1974
howcome@4197 1975 <div class="col" style="left: 175px">
howcome@4197 1976 <p>
howcome@4203 1977 def g hij klm nopqrs
howcome@4197 1978 </div>
howcome@4197 1979
howcome@4197 1980 <div class="col" style="left: 350px">
howcome@4197 1981 <p>
howcome@4203 1982 tuv wxy z.
howcome@722 1983 </div>
howcome@722 1984
howcome@722 1985
howcome@722 1986 <div class=gap style="left: 150px"></div>
howcome@722 1987 <div class=gap style="left: 325px"></div>
howcome@722 1988 </div>
howcome@722 1989
howcome@4197 1990 Due to column balancing, the last paragraph is split across three columns.
howcome@4197 1991
howcome@1405 1992 </div>
howcome@722 1993
howcome@1405 1994
howcome@722 1995
howcome@4197 1996
howcome@4197 1997
howcome@4197 1998
howcome@4197 1999
howcome@722 2000 <h2>Conformance</h2>
howcome@722 2001
howcome@722 2002 <p>Conforming UAs must flow the content of an element into several
howcome@722 2003 columns according to this specification.
howcome@722 2004
howcome@986 2005 <p>The conformance requirements are expressed with a combination of
howcome@986 2006 descriptive assertions and RFC 2119 terminology. The key words "MUST",
howcome@986 2007 "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT",
howcome@986 2008 "RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this
howcome@986 2009 document are to be interpreted as described in RFC 2119.
howcome@986 2010 However, for readability, these words do not appear in all uppercase
howcome@986 2011 letters in this specification. All of the text of this specification is
howcome@986 2012 normative except sections explicitly marked as non-normative, examples,
howcome@986 2013 and notes. [[!RFC2119]]</p>
howcome@722 2014
howcome@722 2015
bert@1576 2016 <h3 id=cr-exit-criteria>CR exit criteria</h3>
howcome@1572 2017
howcome@1572 2018 <p>As described in the W3C process document, a <a
howcome@1572 2019 href="http://www.w3.org/2005/10/Process-20051014/tr.html#cfi">Candidate
howcome@1572 2020 Recommendation</a> (CR) is a specification that W3C recommends for use
howcome@1572 2021 on the Web. The next stage is <em>Recommendation</em>, when the
howcome@1572 2022 specification is sufficiently implemented.
howcome@1572 2023
howcome@1572 2024 <p>For this specification to be proposed as a W3C Recommendation, the
howcome@1572 2025 following conditions shall be met. There must be at least two
howcome@1572 2026 independent, interoperable implementations of each feature. Each
howcome@1572 2027 feature may be implemented by a different set of products, there is no
howcome@1572 2028 requirement that all features be implemented by a single product. For
howcome@1572 2029 the purposes of this criterion, we define the following terms:
howcome@1572 2030
howcome@1572 2031 <dl>
howcome@1572 2032 <dt>independent <dd>each implementation must be developed by a
howcome@1572 2033 different party and cannot share, reuse, or derive from code
howcome@1572 2034 used by another qualifying implementation. Sections of code that
howcome@1572 2035 have no bearing on the implementation of this specification are
howcome@1572 2036 exempt from this requirement.
howcome@1572 2037
howcome@1572 2038 <dt>interoperable <dd>passing the respective test case(s) in the
howcome@1572 2039 official CSS test suite, or, if the implementation is not a Web
howcome@1572 2040 browser, an equivalent test. Every relevant test in the test
howcome@1572 2041 suite should have an equivalent test created if such a user
howcome@1572 2042 agent (UA) is to be used to claim interoperability. In addition
howcome@1572 2043 if such a UA is to be used to claim interoperability, then there
howcome@1572 2044 must one or more additional UAs which can also pass those
howcome@1572 2045 equivalent tests in the same way for the purpose of
howcome@1572 2046 interoperability. The equivalent tests must be made publicly
howcome@1572 2047 available for the purposes of peer review.
howcome@1572 2048
howcome@1572 2049 <dt>implementation <dd>a user agent which:
howcome@1572 2050
howcome@1572 2051 <ol class="inline">
howcome@1572 2052 <li>implements the specification.
howcome@1572 2053
howcome@1572 2054 <li>is available to the general public. The implementation may
howcome@1572 2055 be a shipping product or other publicly available version
howcome@1572 2056 (i.e., beta version, preview release, or <em>nightly build</em>).
howcome@1572 2057 Non-shipping product releases must have implemented the
howcome@1572 2058 feature(s) for a period of at least one month in order to
howcome@1572 2059 demonstrate stability.
howcome@1572 2060
howcome@1572 2061 <li>is not experimental (i.e., a version specifically designed
howcome@1572 2062 to pass the test suite and is not intended for normal usage
howcome@1572 2063 going forward).
howcome@1572 2064 </ol>
howcome@1572 2065 </dl>
howcome@1572 2066
howcome@1572 2067 <p>A minimum of sixth months of the CR period must have elapsed. This
howcome@1572 2068 is to ensure that enough time is given for any remaining major errors
howcome@1572 2069 to be caught.
howcome@1572 2070
howcome@1572 2071 <p>Features will be dropped if two or more interoperable
howcome@1572 2072 implementations are not found by the end of the CR period.
howcome@1572 2073
howcome@1572 2074 <p>Features may/will also be dropped if adequate/sufficient (by
howcome@1572 2075 judgment of CSS WG) tests have not been produced for those feature(s)
howcome@1572 2076 by the end of the CR period.
howcome@1572 2077
howcome@1572 2078
howcome@1572 2079
howcome@1572 2080
howcome@722 2081 <h2 class=no-num id=acknowledgments>Acknowledgments</h2>
howcome@722 2082
howcome@722 2083 <p>This document is based on several older proposals and comments on
howcome@2088 2084 older proposals. Contributors include
howcome@2088 2085
howcome@2088 2086 Øyvind Stenhaug,
howcome@2088 2087 Sylvain Galineau,
howcome@2088 2088 Giovanni Campagna,
howcome@2088 2089 David Hyatt,
howcome@2088 2090 David Singer,
howcome@2088 2091 David Woolley,
howcome@2088 2092 Elika Etemad,
howcome@2088 2093 Bj&ouml;rn H&ouml;hrmann,
howcome@2088 2094 Joost de Valk,
howcome@2088 2095 Peter-Paul Koch,
howcome@2088 2096 Shelby Moore,
howcome@2088 2097 Till Halbach,
howcome@2088 2098 C&eacute;dric Savarese,
howcome@2088 2099 Andy Clarke,
howcome@2088 2100 Robert O'Callahan,
howcome@2088 2101 Markus Mielke,
howcome@2088 2102 Alex Mogilevsky,
howcome@2088 2103 Sergey Genkin,
howcome@2088 2104 Michael Day,
howcome@2088 2105 Melinda Grant,
howcome@2088 2106 Kevin Lawver,
howcome@4201 2107 Anton Prowse,
howcome@4201 2108 L. David Baron,
howcome@2088 2109 Bert Bos,
howcome@2088 2110 Dave Raggett,
howcome@2088 2111 Chris Wilson,
howcome@2088 2112 Robert Stevahn,
howcome@2088 2113 Peter Linss,
howcome@2088 2114 Chris Lilley,
howcome@2088 2115 Steve Zilles,
howcome@2088 2116 Tantek &Ccedil;elik,
howcome@2088 2117 Daniel Glazman and
howcome@2088 2118 Ian Hickson.</p>
howcome@722 2119
howcome@722 2120
howcome@722 2121 <h2 class=no-num id=references>References</h2>
howcome@722 2122
howcome@722 2123
howcome@722 2124 <h3 class="no-num" id="normative-references">Normative references</h3>
howcome@722 2125 <!--begin-normative-->
howcome@722 2126
howcome@722 2127 <p>[Here will be inserted the file "normative.inc"]</p>
howcome@722 2128 <!--end-normative-->
howcome@722 2129
howcome@722 2130 <h3 class="no-num" id="other-references">Other references</h3>
howcome@722 2131 <!--begin-informative-->
howcome@722 2132
howcome@722 2133
howcome@722 2134 <p>[Here will be inserted the file "informative.inc"]</p>
howcome@722 2135 <!--end-informative-->
howcome@722 2136
howcome@722 2137
howcome@722 2138 <h2 class="no-num" id="index">Index</h2>
howcome@722 2139 <!--index-->
howcome@722 2140
howcome@722 2141
howcome@722 2142 <h2 class="no-num" id="property-index">Property index</h2>
howcome@722 2143 <!-- properties -->
howcome@722 2144 </body>
howcome@722 2145 </html>
howcome@722 2146 <!-- Keep this comment at the end of the file
howcome@722 2147 Local variables:
howcome@722 2148 mode: sgml
howcome@722 2149 sgml-declaration:"~/SGML/HTML4.decl"
howcome@722 2150 sgml-default-doctype-name:"html"
howcome@722 2151 sgml-minimize-attributes:t
howcome@722 2152 sgml-nofill-elements:("pre" "style" "br")
howcome@722 2153 sgml-live-element-indicator:t
howcome@722 2154 sgml-omittag:nil
howcome@722 2155 sgml-shorttag:nil
howcome@722 2156 sgml-namecase-general:t
howcome@722 2157 sgml-general-insert-case:lower
howcome@722 2158 sgml-always-quote-attributes:t
howcome@722 2159 sgml-indent-step:nil
howcome@722 2160 sgml-indent-data:t
howcome@722 2161 sgml-parent-document:nil
howcome@722 2162 sgml-exposed-tags:nil
howcome@722 2163 sgml-local-catalogs:nil
howcome@722 2164 sgml-local-ecat-files:nil
howcome@722 2165 End:
howcome@722 2166 -->

mercurial