| <!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 Test: Absolutely positioned, non-replaced elements, 'height' based on 'top' and 'bottom' positions</title> | 
 |         <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> | 
 |         <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-08-31 --> | 
 |         <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height" /> | 
 | 		<link rel="match" href="absolute-non-replaced-height-003-ref.xht" /> | 
 |  | 
 |         <meta name="assert" content="The 'auto' values on 'margin-top', 'margin-bottom' are set to '0' and the 'height' is the remaining space between the 'top' and 'bottom' positions, when 'height' is 'auto' and 'top' and 'bottom' are both not 'auto'." /> | 
 |         <style type="text/css"> | 
 |             #div1 | 
 |             { | 
 |                 border: solid black; | 
 |                 height: 3in; | 
 |                 position: relative; | 
 |                 width: 3in; | 
 |             } | 
 |             div div | 
 |             { | 
 |                 background: blue; | 
 |                 bottom: 1in; | 
 |                 height: auto; | 
 |                 margin-bottom: auto; | 
 |                 margin-top: auto; | 
 |                 position: absolute; | 
 |                 top: 1in; | 
 |                 width: 100%; | 
 |             } | 
 |  | 
 |             /* | 
 |  | 
 | 		 1in : top | 
 | 	+ | 
 | 		 auto (to solve): margin-top | 
 | 	+ | 
 | 		 0 : border-top-width | 
 | 	+ | 
 | 		 0 : padding-top | 
 | 	+ | 
 | 		 auto (to solve) : height | 
 | 	+ | 
 | 		 0 : padding-bottom | 
 | 	+ | 
 | 		 0 : border-bottom-width | 
 | 	+ | 
 | 		 auto (to solve): margin-bottom | 
 | 	+ | 
 | 		1in : bottom | 
 | 	============= | 
 | 		3in  : height of containing block | 
 |  | 
 |  | 
 | 	" | 
 | 	'height' is 'auto', 'top' and 'bottom' are not 'auto', | 
 | 	then 'auto' values for 'margin-top' and 'margin-bottom' are set to 0 | 
 | 	and solve for 'height' | 
 | 	" | 
 |  | 
 | 	so this brings: | 
 |  | 
 | 		 1in : top | 
 | 	+ | 
 | 		 0 (set): margin-top | 
 | 	+ | 
 | 		 0 : border-top-width | 
 | 	+ | 
 | 		 0 : padding-top | 
 | 	+ | 
 | 		 auto (to solve) : height | 
 | 	+ | 
 | 		 0 : padding-bottom | 
 | 	+ | 
 | 		 0 : border-bottom-width | 
 | 	+ | 
 | 		 0 (set): margin-bottom | 
 | 	+ | 
 | 		1in : bottom | 
 | 	============= | 
 | 		3in  : height of containing block | 
 |  | 
 | 		So, height must use 1in in order to balance the equation | 
 |  | 
 |             */ | 
 |         </style> | 
 |     </head> | 
 |     <body> | 
 |         <p>Test passes if a blue rectangle is <strong>vertically centered</strong> in an hollow black square.</p> | 
 |         <div id="div1"> | 
 |             <div></div> | 
 |         </div> | 
 |     </body> | 
 | </html> |