# Advanced Multicol Use Cases

Challenge | Grid positioning | GCPM alt1 | GCPM alt2 | GCPM alt5
--- | --- | --- | --- | ---
#1 Float an image to the right in its containing block.
    img { float: right }
    img { float: right }
    img { float: right }
    img { float: right }
#2 Float an image to the bottom of its containing block, allowing other content on its side. |
    img {
      position:absolute;
      bottom:0;
      float-wrap:square; }
    img {
      float: bottom }
| not possible | Syntactically, this is possible:
    img {
      float: bottom
    }
However, the specification doesn't require UAs to implement vertical floating within the containing block.
#3 In paged media, float the image to the bottom of the page, without there being content on the side. |
    img {
      position:page;
      bottom:0;
      width:100%;
      float-wrap:square; }
    img {
      float: page bottom
      width: 100% }
    img {
      float: bottom
    }
    img {
      float: page bottom;
      width:
    }
#4 In paged media, float the image to the bottom right of the page with other content on its left side. |
    img {
      position: page;
      bottom:0;
      right:0;
      float-wrap:square; }
    img {
      float: page bottom right }
| not possible |
    img {
      float: page bottom right;
    }
#5 In paged media, float the table to the top of the next page. |
    table {
      float: top next page }
    table {
      float: next page }
(top of page is default) |
    table {
      float: top-next }
    table {
      float: next page top  }
#6 In paged media, float the image to the inside of its containing block. |
    object {
      position:absolute;
      inside:0;
      float-wrap:square; }
    object { float: inside }
    object { float: inside }
    object { float: inside }
#7 In paged media, float the image to the top of the page, on the outside. |
    object {
      position: page;
      top:0;
      outside:0;
      float-wrap:square;  }
    object {
      float: page top outside }
| not possible |
    object {
      float: page top outside;
    }
#8 In paged media, float the note to the next page if there isn't room on the current page. |
    div.note {
      float: next page unless-room }
    div.note {
      float: next page unless-room }
    div.note {
      float: top-unless-room }
    div.note {
      float: here, next page;
    }
#8b In paged media, float the note to the next column if there isn't room in the current column, while continuing to fill the current column | unknown |
    div.note {
      float: next column unless-room }
    div.note {
      float: column-top-next-unless-room
    }
    div.note {
      float: none, next column;
    }
#9 In paged media, hide the image if there isn't room enough on the page. |
    img {
      float: hide unless-room }
    img {
      float: hide unless-room }
| not possible |
    img {
      float: none, hide;
    }
#10 In a multicolumn layout, float an image to the left within the column, with other content flowing on the right. |
    img { float: left }
    img { float: left }
    img { float: left}
    img { float: left}
#11 In a multicolumn layout, float the note to the bottom of the current column with no other content on its sides. |
    div.note {
      position:column;
      bottom:0;
      left:0;
      width:1gr;
      float-wrap:square; }
    div.note { float: bottom column }
    div.note { float: column-bottom }
    div.note { float-vertical: bottom }
#12 In a multicolumn layout, float the image to the top right of the right-most column with text flowing on its left side: |
    img {
      position:absolute;
      top:0;
      right:0;
      float-wrap:square; }
    img {
      float: top right column }
| not possible
#13 In a multicolumn layout, float an image that naturally occurs in the left-most column to the top left of the right-most column with text flowing on its right side: |
    img {
      position:absolute;
      top:0;
      right:1gr;
      float-offset:100%;
      float-wrap:square; }
| Not possible. If deemed necessary, this construct (where the overloading of 'left and 'right' has been replaced with 'right-'):
    img {
      float: top left right-column }
| not possible
#14 In a multicolumn layout, float the image to the top of the right-most column, setting the width of the image to be the width of the column box: |
    img {
      position:absolute;
      top:0;
      right:0;
      width:1gr;
      float-wrap:square; }
    img {
      float: top right column;
      width: 1gr }
| not possible
#15 In a multicolumn layout, float the image to the upper right corner of the multicolumn element, spanning two columns, setting the width of the image to be the width of both column boxes and the gap between them. |
    img {
      position:absolute;
      right:0;
      top:0;
      width:3gr;
      float-wrap:square; }
    img {
      float: top right column;
      width: 3gr }
| not possible
#16 In a multicolumn layout, float the note to the bottom of the multi-column element, spanning all columns. |
    div.note {
      position:absolute;
      bottom:0;
      width:100%;
      float-wrap:square; }
    div.note {
      float: bottom;
      column-span: all }
| not possible
#17 In a multicolumn layout in paged media, float the note to the bottom of the page, spanning all columns. |
    div.note {
      position:page;
      bottom:0;
      width:100%;
      float-wrap:square; }
    div.note {
      float: page bottom;
      column-span: all }
    div.note {
      float: bottom;
    }
#18 In a multi-column layout, float the note to the bottom of the left-most column: |
    div.note {
      position:absolute;
      bottom:0;
      left:0;
      width:1gr;
      float-wrap:square; }
    div.note {
      float: bottom left column }
| not possible
#19 In a multicolumn layout, put an image at the top of the next-to-rightmost column, setting the image width equal to the width of the column. |
    div.note {
      position:absolute;
      top:0;
      right:2gr;
      width:1gr;
      float-wrap:square; }
    img {
      float: top right column;
      float-offset: 2gr 0;
      width: 1gr }
| not possible
#20 In a three-column layout, put articles after each other in unbalanced columns. |
    newspaper {
      columns: 3;
      column-fill: auto }
    newspaper {
      columns: 3;
      column-fill: auto }
    newspaper {
      columns: 3;
      column-fill: auto }
#21 In a three-column layout, put articles after each other in balanced columns. |
    newspaper {
      columns: 3;
      column-fill: balance }
    newspaper {
      columns: 3;
      column-fill: balance }
    newspaper {
      columns: 3;
      column-fill: balance }
#22 In a three-column layout, make articles use exactly two balanced columns on the ending page (as The Economist does on occasion) | (not possible) can be done by reserving the last column with a float (empty or an ad)... | (not possible) | not possible
#23 In a three-column layout, make articles use exactly two balanced columns on the starting page. | ...another option is using named flows (with a container spanning 3 grid units) | (not possible) | not possible
#24 In a multicolumn layout, float an image to the upper right corner of the multicolumn element, spanning two columns, setting the width of the image to be the width of both column boxes and the gap between them. Further, the image has a caption that should be displayed below the image in the left column only. |
    img.large {
      position:absolute;
      right:0;
      top:0;
      width:3gr;
      float-wrap:square; }
    div.caption {
      position:absolute;
      top:0;
      right:2gr;
      width:1gr;
      float-wrap:square; }
    img.large {
      float: top right column;
      width: 3gr }
    div.caption {
      float: top right column;
      float-offset: 2gr
      width: 1gr }
| not possible
#25 In a multicolumn layout, float an image to the upper right corner of the multicolumn element, spanning two columns, setting the width of the image to be the width of both column boxes and the gap between them. Further, the image has a caption that should be displayed to the right of the image (i.e., outside of the content box of the multicol element). The top of the caption should be aligned with the top of the image. |
    img {
      position:absolute;
      top:0;
      right:0;
      width:3gr; }
    .caption {
      position:absolute;
      top:0;
      right:0;
      float-offset: 100%; }
    img {
      float: top right column;
      width: 3gr;
    }
    .caption {
      float: top right column;
      float-offset: -2gr
    }
| not possible
#26 As #25, except that the bottom of the caption is aligned with the middle of the image. This markup is presumed:
    <div class=multicol>
     ...
      <div class=figure>
        <img ...>
        <p class=caption>
      </div>
      ...
    </div>
    .figure {
      position:absolute;
      top:0;
      right:0;
      width:3gr; }
    .figure img {
      width:100%; }
    .figure .caption {
      position:absolute;
      top:0.5gr;
      right:0;
      float-offset: 100%; }
    .figure {
      float: top right column;
      width: 5gr;
      float-offset: -2gr
    }

    .figure img {
      display: table-cell;
      width: 3gr;
    }

    .figure .caption {
      display: table-cell;
      vertical-align: middle;
    }
| not possible
#27 As #25, except that the bottom of the caption is aligned with the bottom of the image. |
    .figure {
      position:absolute;
      top:0;
      right:0;
      width:3gr;
      float-wrap:square;}
    .figure img {
      width:100%; }
    .figure .caption {
      position:absolute;
      bottom:0;
      right:0;
      float-offset: 100%; }
| (As in the previous example, except that 'vertical-align' is set to 'bottom') | not possible
#28 In a multi-column layout, float an element (containing, say, a quote) to the second column, placing it 10em from the top of the column. The element should fill the width of the column. |
    quote {
      position:absolute;
      top:10em;
      left:2gr;
      width:1gr;
      float-wrap:square; }
    quote {
      float: top left column;
      float-offset: 2gr 10em;
      width: 1gr; }
| not possible
#29 as #28, except that the quote should be centered vertically in the column. |
    quote {
      position:absolute;
      top:0.5gr;
      left:2gr;
      width:1gr;
      float-offset:0 50%;
      float-wrap:square; }
    quote {
      float: top left column;
      float-offset: 2gr 50%;
      width: 1gr }
| not possible
#30 In a multi-column layout, float an element (containing, say, a quote) between the first and second column so that the element intrudes into the two neighboring columns. Horizontally, the element should be centered wrt the column gap which is 1em. Vertically, the quote should be in the middle. |
    blockquote {
      position:absolute;
      top:0.5gr;
      left:1.5gr;
      float-offset:50% 50%;
      float-wrap:square; }
    blockquote {
      float: top left column;
      float-offset: 1.5gr 50% }
| not possible
#31 In a four-column layout, the outside column should not have any normal content. Instead, images present in the content should be floated to this column, stacked underneath each other in the order they appear. This use case can also be thought of as a three-column layout with an outside margin equal to the width of one column, into which the images are floated. |
    html { grid-columns: * (1em *)[3]; }
    body {
      width: 5gr;
      columns: 3; }
    img {
      position:absolute;
      top:0;
      right:0;
      width:1gr;
      float-wrap:square; }
    @page :left { margin-left: 10em }
    @page :right { margin-right: 10em }
    body { columns: 3 }
    img { float: top outside page }
| unsure