<!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." />
  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
  <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>
