<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>CSS Multi-column Layout Test: column-rule and overflow inside (complex test)</title>
  <link rel="author" title="Opera Software ASA" href="http://www.opera.com/" />
  <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!--  2013-08-03  -->
  <link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-number-and-width-of-columns" title="3. The number and width of columns" />
  <link rel="match" href="multicol-count-computed-003-ref.xht" />
  <meta name="flags" content="ahem" />
  <meta name="assert" content="This test checks that if one of 2 adjacent column boxes (2nd and 3rd colum box in this test) does not have any content, then the column rule separating those should not be drawn. In this test, the 3rd colum box should have no inline content. This test also checks that inline content in the normal flow that extends into a column gap should not be clipped in the middle of the column gap. So, in this test, inline content in 1st column box should not be partially clipped and should overlap partially with the 1st column-rule." />
  <style type="text/css"><![CDATA[
  div
  {
  background: yellow;
  border: gray solid 1em;
  color: black;
  font: 1.25em/1 Ahem;
  orphans: 1;
  widows: 1;
  width: 13em;

  column-gap: 5em;
  column-rule-color: blue;
  column-rule-style: solid;
  column-rule-width: 1.5em;
  column-width: 1em;
  }

  /*
  (15)  if (column-width != auto) and (column-count = auto) then
  (16)    N := max(1, floor((available-width + column-gap) / (column-width + column-gap)));
  (17)    W := ((available-width + column-gap) / N) - column-gap;
  (18)  exit;

  N := max(1, floor((available-width + column-gap) / (column-width + column-gap)));
  N == max(1, floor((13em + 5em) / (1em + 5em)));
  N == max(1, floor(18em / 6em));
  N == max(1, floor(3));
  N == 3;

  So, the used column-count in this test is 3.

  W := ((available-width + column-gap) / N) - column-gap;
  W == ((13em + 5em) / 3) - 5em;
  W == ((18em) / 3) - 5em;
  W == (6em) - 5em;
  W == 1em;

  So, the used column-width in this test is 1em.
  */

  #pink {color: pink;}
  #orange {color: orange;}
  #purple {color: purple;}
  #gray {color: gray;}

  /*
  Since
  "
  content that extends outside column boxes visibly overflows and is not clipped to the column box
  "
  http://www.w3.org/TR/css3-multicol/#overflow-inside-multicol-elements
  this causes the right-half (0.5em) of the 'K' glyph to
  overlap with the right-half (0.75em) of the 1st blue column-rule.
  Same thing should happen to the 'N' glyph of 'ORAN'.

  Because no inline content should be rendered into the
  3rd column box, this causes the 2nd column rule not
  been rendered because
  "
  Column rules are only drawn between two columns that
  both have content.
  "
  http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules
  */
  ]]></style>
 </head>

 <body>

  <div>
	<span id="pink">PINK</span>
	<span id="orange">ORAN</span>
	<span id="purple">PURP</span>
	<span id="gray">GRAY</span>
  </div>

 </body>
</html>
