<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<title>:first-child</title>
		
		<style type='text/css'>
		<!--

			body { background: #fff; color: 000; font-family: Arial, Helvetica, sans-serif; }
			pre { background: #fff; padding: 0.5em; }
			li { background: #aaa; padding: 1em; width: 80%; margin: 0 0 3em; }
			.test { display: block; padding: 0.75em; }
			.base, .defaultgreen { background-color: #090; }
			.defaultred { background-color: #900; }
			
			.defaultred :first-child {
				background-color: #090;
			}

			.defaultgreen :first-child {
				background-color: #900;
			}

			blockquote {
				margin: 0;
			}

		-->			
		</style>
	</head>

	<body>
		<p>This page is part of the <a href="http://www.css3.info">CSS3.info</a> <a href="http://www.css3.info/selectors-test/">CSS selectors test</a>. See more info on <a href="http://www.css3.info/preview/attribute-selectors.html">CSS3 selectors</a>.</p>
		
		<div class='base'></div>
	
		<ol>
			<li>
				<div class='defaultred'>
					<div class='test required'></div>
				</div>
				
				<pre>div :first-child {
}

&lt;div&gt;
   &lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</pre>

				<p>
					The CSS selector should match the inner div element, because it is the only child of the outer div element
				</p>
			</li>

			<li>
				<div class='defaultred'>
					<div class='test'></div>
					<blockquote></blockquote>
				</div>
				
				<pre>div :first-child {
}

&lt;div&gt; 
   &lt;div&gt;&lt;/div&gt;
   &lt;blockquote&gt;&lt;/blockquote&gt;
&lt;/div&gt;</pre>

				<p>
					The CSS selector should match the inner div element, because it is the first child of the outer div element
				</p>
			</li>

			<li>
				<div class='defaultred'>
					<!-- Just a comment -->
					<div class='test'></div>
				</div>
				
				<pre>div :first-child {
}

&lt;div&gt; 
   &lt;!-- Just a comment --&gt;
   &lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</pre>

				<p>
					The CSS selector should match the inner div element, because it is the first child of the outer div element
					Comments are not elements, so they should not be considered when determining the first child.
				</p>
			</li>

			<li>
				<div class='defaultred'>
					.
					<div class='test'></div>
				</div>
				
				<pre>div :first-child {
}

&lt;div&gt; 
   How about regular text...
   &lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</pre>

				<p>
					The CSS selector should match the inner div element, because it is the first child of the outer div element.
					Regular text is not an element, so it should not be considered when determining the first child.
				</p>
			</li>

			<li>
				<div class='defaultgreen'>
					<blockquote></blockquote>
					<div class='test default required'></div>
				</div>
				
				<pre>div :first-child {
}

&lt;div&gt; 
   &lt;blockquote&gt;&lt;/blockquote&gt;
   &lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</pre>

				<p>
					The CSS selector should not match the inner div element, because it is the second child of the outer div element
				</p>
			</li>

			<li>
				<div class='defaultred'>
					<div id='insertBefore1'></div>
				</div>

				<script type="text/javascript">
				<!--

					var ib = document.getElementById('insertBefore1');
					var el = document.createElement("div");
					el.className = 'test';
					ib.parentNode.insertBefore(el, ib);

				
				//-->
				</script>
				
				<pre>div :first-child {
}

&lt;div&gt;
   &lt;div id='insertBefore'&gt;&lt;/div&gt;
&lt;/div&gt;

var ib = document.getElementById('insertBefore');
ib.parentElement.insertBefore(document.createElement("div"), ib);</pre>

				<p>
					The CSS selector should match the div element that is inserted by the Javascript code. 
				</p>
			</li>

			<li>
				<div class='defaultgreen'>
					<div id='insertBefore2' class='test default'></div>
				</div>

				<script type="text/javascript">
				<!--

					var ib = document.getElementById('insertBefore2');
					ib.parentNode.insertBefore(document.createElement("div"), ib);
				
				//-->
				</script>
				
				<pre>div :first-child {
}

&lt;div&gt;
   &lt;div id='insertBefore'&gt;&lt;/div&gt;
&lt;/div&gt;

var ib = document.getElementById('insertBefore');
ib.parentElement.insertBefore(document.createElement("div"), ib);</pre>

				<p>
					The original div element should not be a match for the :first-child selector.
				</p>
			</li>
		</ol>
	</body>
</html>
