<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code Couch &#187; CSS</title>
	<atom:link href="http://www.codecouch.com/category/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codecouch.com</link>
	<description>The ramblings of two code monkeys</description>
	<lastBuildDate>Mon, 09 Jan 2012 21:11:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Detecting orientation changes in mobile Safari on iOS, and other supported browsers</title>
		<link>http://www.codecouch.com/2011/11/detecting-orientation-changes-in-mobile-safari-on-ios-and-other-supported-browsers/</link>
		<comments>http://www.codecouch.com/2011/11/detecting-orientation-changes-in-mobile-safari-on-ios-and-other-supported-browsers/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 22:58:24 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=320</guid>
		<description><![CDATA[I&#8217;ve been writing a tool for the iPad recently, and found a need to detect when its orientation had changed (whether from landscape to portrait or vice versa). If I were writing this post years ago, I&#8217;d probably advise that the best way of detecting this change would be to have a timer run a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been writing a tool for the iPad recently, and found a need to detect when its orientation had changed (whether from landscape to portrait or vice versa).</p>
<p>If I were writing this post years ago, I&#8217;d probably advise that the best way of detecting this change would be to have a timer run a function every half a second or so, with that function detecting the width of the window. I&#8217;m happy to report that times have changed since 2007, when <a href="http://www.evotech.net/blog/2007/07/web-development-for-the-iphone/" title="this blog post">this blog post</a> was written.</p>
<p>These days, things are a lot easier and less clunky: you can listen for the <code>orientationchange</code> event which is fired on iOS devices whenever they change orientation. Having said that, it appears that Safari running on any iPhone doesn&#8217;t fire the 180 degree event and does not rotate the screen when in that orientation (I tested on my 3g, 4, and 4S models). Safari on my iPad fires it for all four positions (0, 90, 180, 270 degrees).</p>
<p>Enough waffle, here is Apple&#8217;s sample code taken from the <a href="http://developer.apple.com/library/IOs/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html" title="Handling Orientation Events">Handling Orientation Events</a> section of their Safari Web Content Guide:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Orientation test&lt;/title&gt;
    <span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
        <span class="kw2">function</span> updateOrientation<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw2">var</span> displayStr <span class="sy0">=</span> <span class="st0">'Orientation: '</span><span class="sy0">;</span>
&nbsp;
            <span class="kw1">switch</span><span class="br0">&#40;</span>window.<span class="me1">orientation</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="kw1">case</span> <span class="nu0">0</span><span class="sy0">:</span>
                    displayStr <span class="sy0">+=</span> <span class="st0">'Portrait'</span><span class="sy0">;</span>
                    <span class="kw1">break</span><span class="sy0">;</span>
&nbsp;
                <span class="kw1">case</span> <span class="sy0">-</span><span class="nu0">90</span><span class="sy0">:</span>
                    displayStr <span class="sy0">+=</span> <span class="st0">'Landscape (right, screen turned clockwise)'</span><span class="sy0">;</span>
                    <span class="kw1">break</span><span class="sy0">;</span>
&nbsp;
                <span class="kw1">case</span> <span class="nu0">90</span><span class="sy0">:</span>
                    displayStr <span class="sy0">+=</span> <span class="st0">'Landscape (left, screen turned counterclockwise)'</span><span class="sy0">;</span>
                    <span class="kw1">break</span><span class="sy0">;</span>
&nbsp;
                <span class="kw1">case</span> <span class="nu0">180</span><span class="sy0">:</span>
                    displayStr <span class="sy0">+=</span> <span class="st0">'Portrait (upside-down portrait)'</span><span class="sy0">;</span>
                    <span class="kw1">break</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
&nbsp;
            document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'output'</span><span class="br0">&#41;</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> displayStr<span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span>
&lt;/head&gt;
&nbsp;
&lt;body onorientationchange=&quot;updateOrientation();&quot;&gt;
    &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div></div>

<p>There are two things I would change about this code (other than the XHTML 1.0 Strict DOCTYPE, which I&#8217;ve already changed for the much more memorable HTML5 DOCTYPE). The first is the attachment of the event handler as an attribute on the <code>&lt;body&gt;</code> element &#8211; I&#8217;d attach an event listener (it&#8217;s much cleaner IMHO). The second issue both irks and puzzles me: the orientation has to be read from the <code>window</code> object instead of being passed in with the event data. Why is this? I can&#8217;t think of another case where data associated with an event not made available through the event data in some form or other. So why not with this event type?</p>
		<div  class="headingPod headingLevel2 headingLevel2Pink">
			<div class="img">
				<div class="verticalCentreOuter">
					<div class="verticalCentreMiddle">
						<div class="verticalCentreInner">
							<h2>Reducing the amount of code needed</h2>
						</div>
					</div>
				</div>
			</div>
		</div>
<p>I&#8217;m not a fan of switch statements. Don&#8217;t get me wrong, I&#8217;ll use them when they are appropriate, but I don&#8217;t believe this is such an occasion. All I wanted to do was determine whether my iPad was in landscape or portrait orientation; I really didn&#8217;t care whether the home button was to the left or to the right. After puzzling it over for a few minutes, I realised I could apply the same bitwise AND trick used to determine odd / even numbers (n &#038; 1), using the value 2 instead of 1.</p>
<p>For those of you unfamiliar with bitwise operators, the <a href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators" title="Bitwise Operators page at MDN">Bitwise Operators page at MDN</a> is a good all-round read covering a bit of everything, and <a href="http://bateru.com/news/2011/03/javascript-binary-operations-the-easy-way/" title="JavaScript Binary Operations – the easy way">JavaScript Binary Operations – the easy way</a> is definitely worth a read as well. Anyway, here is my take on how it could be done, followed by an explanation of how it works:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Orientation test&lt;/title&gt;
    <span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
        window.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'orientationchange'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'output'</span><span class="br0">&#41;</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> <span class="st0">'Orientation: '</span> <span class="sy0">+</span> <span class="br0">&#91;</span><span class="st0">'Portrait'</span><span class="sy0">,,</span><span class="st0">'Landscape'</span><span class="br0">&#93;</span><span class="br0">&#91;</span>window.<span class="me1">orientation</span> <span class="sy0">&amp;</span> <span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span><span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span>
&lt;/head&gt;
&nbsp;
&lt;body&gt;
    &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div></div>

<p>I&#8217;m not going to go into detail about addEventListener in this article, as event handling is already very well documented. All I need to say on the subject is that if you prefer to use the method shown in Apple&#8217;s sample code to attach the event handler from my code, everything should still work correctly.</p>
		<div  class="headingPod headingLevel2 headingLevel2Orange">
			<div class="img">
				<div class="verticalCentreOuter">
					<div class="verticalCentreMiddle">
						<div class="verticalCentreInner">
							<h2>So how does it work?</h2>
						</div>
					</div>
				</div>
			</div>
		</div>
<p>The window object has a read-only property named orientation that holds one of four numbers: 0, -90, 90, or 180. As you might have deduced, these values are the angle of rotation in degrees, from the default upright portrait position.</p>
<p>To better understand how my code works, let&#8217;s take a look at the binary representations of the 5 numbers (I&#8217;m limiting the number of bits to 16 for brevity. In reality, they are operated on as 32-bit numbers):</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="text">Decimal    Binary
&nbsp;
   0       0000000000000000
  90       0000000001011010
 180       0000000010110100
 -90       1111111110100110
   2       0000000000000010</pre></div></div></div>

<p>As with the topic of event handling, the topic of bitwise logic and bitwise operations deserves much more in-depth coverage than I want to go into, so I&#8217;ll keep this brief: the result of a bitwise AND operation between any two bits will be 1 if and <strong>only</strong> if both operands are 1. In all other cases (0/0, 0/1, 1/0), the result will be 0. Here are the results for all for orientation values after the logical AND:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="text">                   Portrait           Landscape            Portrait           Landscape
&nbsp;
(Decimal)                 0                  90                 180                 -90
Binary     0000000000000000    0000000001011010    0000000010110100    1111111110100110
&amp; 2        0000000000000010    0000000000000010    0000000000000010    0000000000000010
Result     0000000000000000    0000000000000010    0000000000000000    0000000000000010
(Decimal)                 0                   2                   0                   2</pre></div></div></div>

<p>Hopefully my very brief explanation makes sense. In a nutshell, the results of the bitwise AND operations are as follows:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="text">  0 &amp; 2 == 0
180 &amp; 2 == 0
 90 &amp; 2 == 2
-90 &amp; 2 == 2</pre></div></div></div>

		<div  class="headingPod headingLevel2 headingLevel2Blue">
			<div class="img">
				<div class="verticalCentreOuter">
					<div class="verticalCentreMiddle">
						<div class="verticalCentreInner">
							<h2>What to do with the result of the bitwise operation</h2>
						</div>
					</div>
				</div>
			</div>
		</div>
<p>If you need to know only whether the device is in landscape mode or not, or portrait mode or not, then you can simply return the result of the bitwise operation and use that in any tests. Remember, 0 equates to false and 2 equates to true, as does 1, or 42, or 109.6, etc. If you really need it as a boolean, the simplest way is to perform two logical NOT operations by using !!, e.g:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Orientation test&lt;/title&gt;
    <span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
        window.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'orientationchange'</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
            <span class="co1">// You can test like this (on the values 0 and 2):</span>
&nbsp;
            <span class="kw1">if</span> <span class="br0">&#40;</span>window.<span class="me1">orientation</span> <span class="sy0">&amp;</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="co1">// Do something if in landscape mode</span>
            <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
                <span class="co1">// Do something if in portrait mode</span>
            <span class="br0">&#125;</span>
&nbsp;
&nbsp;
            <span class="co1">// Or, if you really need to have boolean values, then logical NOT the result of the bitwise AND twice</span>
            <span class="co1">// The first NOT converts it to a boolean of the opposite state, the second restores its state</span>
&nbsp;
            <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!!</span><span class="br0">&#40;</span>window.<span class="me1">orientation</span> <span class="sy0">&amp;</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="co1">// Do something if in landscape mode</span>
            <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
                <span class="co1">// Do something if in portrait mode</span>
            <span class="br0">&#125;</span>
&nbsp;
        <span class="br0">&#125;</span><span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span>
&lt;/head&gt;
&nbsp;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div></div>

		<div  class="headingPod headingLevel2 headingLevel2Yellow">
			<div class="img">
				<div class="verticalCentreOuter">
					<div class="verticalCentreMiddle">
						<div class="verticalCentreInner">
							<h2>What about the weird array syntax? What do the double commas mean?</h2>
						</div>
					</div>
				</div>
			</div>
		</div>
<p>There&#8217;s nothing special about the double-comma syntax used in the array; it simply means that I&#8217;ve chosen not to define one element of the array (or to put it another way, I&#8217;ve chosen to skip over that position). Therefore, the element at that position in the array will be undefined. The array will still have a length of 3, and it still holds 3 values &#8211; it just so happens that one of these is the value undefined. Element 0 will be the string &#8216;Portrait&#8217;, element 1 will be undefined, and element 2 will be the string &#8216;Landscape&#8217;:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript"><span class="kw2">var</span> arr <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st0">'Portrait'</span><span class="sy0">,,</span><span class="st0">'Landscape'</span><span class="br0">&#93;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>arr<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>         <span class="co1">// 'Portrait'</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>arr<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>         <span class="co1">// undefined</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>arr<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>         <span class="co1">// 'Landscape'</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>arr.<span class="me1">length</span><span class="br0">&#41;</span><span class="sy0">;</span>     <span class="co1">// 3</span></pre></div></div></div>

<p>So, the bitwise AND returns either 0 or 2, and I&#8217;ve got an array with data at elements 0 and 2. If it hasn&#8217;t done so yet, the penny should now be well and truly dropping: the result of the bitwise AND is being used to select one of the two array elements containing data &#8211; data that gives us the orientation.</p>
<p>Here&#8217;s an example of how this might be used in a real situation: The device orientation is added as an attribute to the <code>&lt;body&gt;</code> element, and this is used by the CSS to ensure that content (in this case, an image) is always displayed at the same position on the screen, no matter what the orientation, or where the status bar is. This avoids the problem of having to resize the content &#8211; which can become tricky, depending on the content. Note: this example was designed for the resolution and aspect ratio of the iPad screen. While the image does rotate on an iPhone, it doesn&#8217;t fit nicely. As the code I&#8217;m writing is not designed to be run on an iPhone (the small screen makes it impractical), I haven&#8217;t spent any time getting these examples to look perfect on an iPhone. However, it should be good enough to get the idea across <img src='http://www.codecouch.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>There are two things I&#8217;d like to point out about this example: In addition to the orientationchange event, the attribute on the <code>&lt;body&gt;</code> is being updated once the page has loaded so the device doesn&#8217;t have to be rotated to ensure everything is sized correctly. The second point is the issue of the empty CSS rule <code>body[orient="landscape"] {}</code>. On my iPad running iOS 4.3.3, if I do not include this line, the code fails to size the image as expected &#8211; even though the rule contains no styling, and thus should make no difference. Unfortunately, I don&#8217;t have an iPad 2 to test it on. If anyone would like to donate one to me, I&#8217;d be only too happy to accept it <img src='http://www.codecouch.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>If anyone can tell me why this might be happening, or how to fix it without having to frig my code in a manner I thought I&#8217;d seen the last of with IE6 (correction: that was until I found that Safari/iOS will not fire touchstart events on anchors containing semi-opaque PNGs&#8230; Apple must have got the IE6 devs going cheap. <a href="https://devforums.apple.com/thread/132122" title="Read more on the PNG bug">Read more on the PNG bug</a>).</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0&quot; /&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Orientation test&lt;/title&gt;
    <span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
        <span class="kw2">function</span> updateOrientation<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            document.<span class="me1">body</span>.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">'orient'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st0">'portrait'</span><span class="sy0">,,</span><span class="st0">'landscape'</span><span class="br0">&#93;</span><span class="br0">&#91;</span>window.<span class="me1">orientation</span> <span class="sy0">&amp;</span> <span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            window.<span class="me1">scrollTo</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span><span class="sy0">;</span>
        window.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'orientationchange'</span><span class="sy0">,</span> updateOrientation<span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
        window.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'load'</span><span class="sy0">,</span> updateOrientation<span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span>
&nbsp;
    &lt;style type=&quot;text/css&quot;&gt;
        html, body {
            margin: 0px;
            padding: 0px;
        }
        body {
            text-align: center;
        }
        body[orient=&quot;landscape&quot;] {}
        body[orient=&quot;landscape&quot;] img {
            width: 890px;
            height: 690px;
        }
        body[orient=&quot;portrait&quot;] img {
            -webkit-transform: rotate3d(0, 0, 1, -90deg) translate3d(-90px, -22px, 0px);
            width: 890px;
            height: 690px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&nbsp;
&lt;body&gt;
    &lt;img src=&quot;http://oi39.tinypic.com/2l97b41.jpg&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div></div>

		<div  class="headingPod headingLevel2 headingLevel2Green">
			<div class="img">
				<div class="verticalCentreOuter">
					<div class="verticalCentreMiddle">
						<div class="verticalCentreInner">
							<h2>A quick note on decimal / binary conversion</h2>
						</div>
					</div>
				</div>
			</div>
		</div>
<p>You can easily convert from decimal to binary in JavaScript by passing 2 as the radix (base) into the toString() method available on every Number instance, and from binary back to decimal by passing 2 as the radix to parseInt. There are some caveats, but for positive integer numbers, you should find these two methods are reliable:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="nu0">6</span>..<span class="me1">toString</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>            <span class="co1">// '110'</span>
<span class="kw3">alert</span><span class="br0">&#40;</span><span class="nu0">42</span>..<span class="me1">toString</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>           <span class="co1">// '101010'</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span><span class="st0">'110'</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>        <span class="co1">// 6</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>parseInt<span class="br0">&#40;</span><span class="st0">'101010'</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>     <span class="co1">// 42</span></pre></div></div></div>

<p>I mentioned a few caveats. These are that you will not be able to use the same methods to convert to and from floating point numbers, and negative numbers will need another step or two. As you may have already discovered, the toString representation of -90 in binary is nothing like the number I used:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="text">The -90 I used (16-bit)    1111111110100110
The -90 I used (8-bit)             10100110
-90..toString(2)                   -1011010</pre></div></div></div>

<p>The representation I used is the <a href="http://en.wikipedia.org/wiki/Two's_complement" title="Two's complement page at Wikipedia">two&#8217;s complement</a> of the positive number (90, in this case). Here&#8217;s the quick-and-dirty method I mentioned to give me the correct negative binary representation, which does require specifying a number of bits. For -90/90, an 8-bit number is fine, but I&#8217;ll show the 16-bit version as well:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="javascript"><span class="kw2">var</span> bitCount <span class="sy0">=</span> <span class="nu0">8</span><span class="sy0">;</span>                                                        <span class="co1">// 8 bit version</span>
<span class="kw2">var</span> negativeNum <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">90</span><span class="sy0">;</span>                                                   <span class="co1">// Negative number to use</span>
<span class="kw2">var</span> combosForBitCount <span class="sy0">=</span> Math.<span class="me1">pow</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy0">,</span> bitCount<span class="br0">&#41;</span><span class="sy0">;</span>                           <span class="co1">// 2 ** 8 == 256</span>
<span class="co1">// Here's the conversion to binary and back to decimal</span>
<span class="kw2">var</span> negativeBinary <span class="sy0">=</span> <span class="br0">&#40;</span>combosForBitCount <span class="sy0">+</span> negativeNum<span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>      <span class="co1">// 10100110</span>
<span class="kw2">var</span> negativeDecimal <span class="sy0">=</span> parseInt<span class="br0">&#40;</span>negativeBinary<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">-</span> combosForBitCount<span class="sy0">;</span>   <span class="co1">// -90</span>
&nbsp;
<span class="kw2">var</span> bitCount <span class="sy0">=</span> <span class="nu0">16</span><span class="sy0">;</span>                                                       <span class="co1">// 16 bit version</span>
<span class="kw2">var</span> negativeNum <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">90</span><span class="sy0">;</span>                                                   <span class="co1">// Negative number to use</span>
<span class="kw2">var</span> combosForBitCount <span class="sy0">=</span> Math.<span class="me1">pow</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy0">,</span> bitCount<span class="br0">&#41;</span><span class="sy0">;</span>                           <span class="co1">// 2 ** 16 == 65536</span>
<span class="co1">// Here's the conversion to binary and back to decimal</span>
<span class="kw2">var</span> negativeBinary <span class="sy0">=</span> <span class="br0">&#40;</span>combosForBitCount <span class="sy0">+</span> negativeNum<span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span>      <span class="co1">// 1111111110100110</span>
<span class="kw2">var</span> negativeDecimal <span class="sy0">=</span> parseInt<span class="br0">&#40;</span>negativeBinary<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">-</span> combosForBitCount<span class="sy0">;</span>   <span class="co1">// -90</span></pre></div></div></div>

<p>It&#8217;s probably worth mentioning that there are multiple ways of converting negative binary numbers, and the method I&#8217;ve given above shouldn&#8217;t be used without ensuring that it is providing valid results. I really only included it so you could see how I obtained the binary value for -90. If you haven&#8217;t lost the will to live just yet, I&#8217;d read through the <a href="http://celtickane.com/projects/computer-science-primer/binary-numbers/" title="Binary Numbers page at Celtic Kane Online">Binary Numbers page at Celtic Kane Online</a> and the <a href="http://en.wikipedia.org/wiki/Signed_number_representations" title="Wikipedia article on Signed number representations">Wikipedia article on Signed number representations</a>.</p>
<p>The floating point issue is easy to understand: parseInt can&#8217;t be used to convert a floating point number (the clue is in its name), and parseFloat doesn&#8217;t take a radix. Converting to and from floating point binary numbers, while not overly tricky, isn&#8217;t something I will go into here. I can recommend <a href="http://www.amazon.co.uk/gp/product/0070379904/ref=as_li_tf_tl?ie=UTF8&#038;tag=codcou-21&#038;linkCode=as2&#038;camp=1634&#038;creative=6738&#038;creativeASIN=0070379904">Essential Computer Mathematics by Seymour Lipschutz (Schaum&#8217;s Outline Series)</a><img src="http://www.assoc-amazon.co.uk/e/ir?t=codcou-21&#038;l=as2&#038;o=2&#038;a=0070379904" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> as a fantastic all-round read (I still refer to my 1982 copy today, and have even taught the occasional class with the book as my only aid). 40+ million students can&#8217;t be wrong!</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Detecting+orientation+changes+in+mobile+Safari+on+iOS%2C+and+other+supported+browsers+http%3A%2F%2Fis.gd%2Fm71c8i" title="Post to Twitter"><img class="nothumb" src="http://www.codecouch.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2011/11/detecting-orientation-changes-in-mobile-safari-on-ios-and-other-supported-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How do you vertically centre content using CSS?</title>
		<link>http://www.codecouch.com/2008/10/how-do-you-vertically-centre-content-using-css/</link>
		<comments>http://www.codecouch.com/2008/10/how-do-you-vertically-centre-content-using-css/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 13:12:07 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=201</guid>
		<description><![CDATA[Find out how to do vertical centring (vertical alignment) of content using just CSS (and some div elements).]]></description>
			<content:encoded><![CDATA[<p>How do you vertical centre some content using CSS (and some extra div elements)? This is the same simple layout that used to be achieved using a table and valign attribute. This solution doesn&#8217;t require a table at all (but it does require some extra div elements &#8211; as per the markup below).</p>
<p>With the following markup:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict"><span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;verticalCenteringOuter&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;moduleA&quot;</span>&gt;</span>
	<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;verticalCenteringMiddle&quot;</span>&gt;</span>
		<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;verticalCenteringInner&quot;</span>&gt;</span>
			<span class="sc2">&lt;<span class="kw2">b</span>&gt;</span>Some vertical aligned content here<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">b</span>&gt;</span>
		<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
	<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span></pre></div></div></div>

<p>Using the following CSS:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">&lt;style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
<span class="re0">#moduleA</span> <span class="br0">&#123;</span>
	<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">300px</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.verticalCenteringOuter</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> table<span class="sy0">;</span>
	<span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.verticalCenteringMiddle</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">table-cell</span><span class="sy0">;</span>
	<span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&lt;/style<span class="sy0">&gt;</span>
&nbsp;
&lt;!--<span class="br0">&#91;</span>if IE<span class="br0">&#93;</span><span class="sy0">&gt;</span>
&lt;style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
<span class="re1">.verticalCenteringOuter</span> <span class="br0">&#123;</span>
	<span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.verticalCenteringMiddle</span> <span class="br0">&#123;</span>
	<span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span>
	<span class="kw1">top</span><span class="sy0">:</span> <span class="re3">50%</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.verticalCenteringInner</span> <span class="br0">&#123;</span>
	<span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span>
	<span class="kw1">top</span><span class="sy0">:</span> <span class="re3">-50%</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&lt;/style<span class="sy0">&gt;</span>
&lt;!<span class="br0">&#91;</span>endif<span class="br0">&#93;</span>--<span class="sy0">&gt;</span></pre></div></div></div>

<p>Full credit on this to <a href="http://www.jakpsatweb.cz/css/css-vertical-center-solution.html">Yuhů (www.jakpsatweb.cz)</a>. Thanks for the inspiration on this one.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=How+do+you+vertically+centre+content+using+CSS%3F+http%3A%2F%2Fis.gd%2FJHvmfA" title="Post to Twitter"><img class="nothumb" src="http://www.codecouch.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/how-do-you-vertically-centre-content-using-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to create rollovers without using Javascript</title>
		<link>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/</link>
		<comments>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 13:11:10 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=174</guid>
		<description><![CDATA[Using just CSS, you can do simple (and more complex) rollovers... no javascript required. This post shows how to apply this technique to your own pages with ease - whether it's a colour change or a more complex image swap.]]></description>
			<content:encoded><![CDATA[<p>You can make use of the <b>:hover</b> pseudo class on the anchor tag to change the anchor&#8217;s style attributes. Typically you see this on sites that underline anchors when you mouse over them (when you hover over them). The CSS code to do this simple underlining can look like this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">a <span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="br0">&#125;</span>
a<span class="re2">:hover </span><span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">underline</span><span class="sy0">;</span> <span class="br0">&#125;</span></pre></div></div></div>

<p>We could extend this to change the background and forground colour of the link to make it appear a little more &#8220;box-like&#8221; using something like this CSS code:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#000000</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover </span><span class="br0">&#123;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#000000</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>If you wanted to have a background image on the anchor, then you could change the background-image when you hovered over the anchor. The CSS code might look like this:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#000000</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">img/anchor_off.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover </span><span class="br0">&#123;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">img/anchor_hovered.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#000000</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>This technique does suffer from a flaw, however. You will invariably see a flickering as you roll over the anchor for the first time due to the browser having to request the second image (assuming the file isn&#8217;t already in the browser cache).</p>
<p>This problem can be fixed by using the same image for both the normal and hover state of the anchor &#8211; just reposition the background image on hover. This is presented very well over at <a href="http://www.alistapart.com/articles/sprites/">A List Apart</a> where Dave Shea introduces the concept of CSS Sprites. The image below (195px wide, 30px high in size) shows how you might set this up:</p>
<p><img src="http://www.codecouch.com/wp-content/uploads/2008/10/cssbuttonbackground.gif" alt="" title="Anchor background sprites" width="195" height="30" /></p>
<p>The image above shows both states of the anchor&#8230; the initial state at the &#8220;left top&#8221; and the hovered state &#8220;100px&#8221; from the left of the image. The following CSS code shows how you can reposition the background image to show a different image on hover &#8211; without the flicker:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">a <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">10px</span><span class="sy0">;</span>
	<span class="kw1">width</span><span class="sy0">:</span> <span class="re3">95px</span><span class="sy0">;</span>
	<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">30px</span><span class="sy0">;</span>
	<span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
	<span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#000000</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">img/anchor_background.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> <span class="kw1">left</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFFFFF</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
a<span class="re2">:hover </span><span class="br0">&#123;</span>
	<span class="kw1">background-position</span><span class="sy0">:</span> <span class="re3">100px</span> <span class="kw1">top</span><span class="sy0">;</span>
	<span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#CCCCCC</span><span class="sy0">;</span>
	<span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#000000</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div>

<p>You may have to deal with all the anchor pseudo classes to get the effect consistent in all browsers, and be sure to define them in the correct order&#8230; :link, :visited, :hover, :active.</p>
<p>Finally, Internet Explorer only supports pseudo classes on the anchor element. All other browsers support pseudo classes on all elements. You could use this technique on non-anchor elements, but would be forced to introduce some javascript to support Internet Explorer. A good working example of this is the popular <a href="http://www.alistapart.com/articles/dropdowns">Suckerfish dropdowns</a> CSS menu solution that uses :hover on the list item element and attaches some javascript for Internet Explorer.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=How+to+create+rollovers+without+using+Javascript+http%3A%2F%2Fis.gd%2Fzhhlo0" title="Post to Twitter"><img class="nothumb" src="http://www.codecouch.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/create-rollovers-without-using-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to use “clearfix” CSS to clear floats without markup</title>
		<link>http://www.codecouch.com/2008/10/how-to-use-clearfix-css-to-clear-floats-without-markup/</link>
		<comments>http://www.codecouch.com/2008/10/how-to-use-clearfix-css-to-clear-floats-without-markup/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 21:43:19 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML/XHTML]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=165</guid>
		<description><![CDATA[Here we extended the normal rules for clearfix and provide a complete CSS solution to clearing floated elements (ensuring that a parent element inherits it's floated child element's height). A complete clearfix redux.]]></description>
			<content:encoded><![CDATA[<p>When an element is floated, it is taken out of the normal flow of the document. As a result, the element takes up no height (in the normal flow) &#8211; and any wrapping parent element will not automatically resize to accommodate the height of the floated element. Here is some sample HTML that shows this in it&#8217;s simple form:</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict">...
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;parent&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;background-color:#F00;&quot;</span>&gt;</span>
	<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;child&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;float: left;&quot;</span>&gt;</span>Floated element<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
...</pre></div></div></div>

<p>Given the child element is floated, it doesn&#8217;t affect the height of the parent element &#8211; and so the parent element remains with no height (and the red background colour is never shown).</p>
<p>The <a href="http://www.w3.org/TR/CSS2/visuren.html#floats">W3 describe floating an element</a> and the use of a &#8220;clearing element&#8221; (a block level element with the <b>clear</b> CSS property set). This is not acceptable for all layouts. It would be nicer if all this could be carried out using CSS &#8211; providing a separation of content and layout into the bargain.</p>
<p>Rather than attempt to merely re-word much of what is already online, you can read about how the CSS for this works in more detail at <a href="http://www.positioniseverything.net/easyclearing.html">Position is Everything</a>. Whilst their implementation is slightly different to the one presented below, their description is excellent (and they are credited with bringing together all the threads to make this solution usable).</p>
<p>The <b>clearfix</b> solution below is our current &#8220;best practise&#8221; effort to date. We have switched from using the typical &#8220;.&#8221; to using a space &#8221; &#8221; in the <b>content</b> rule due to <a href="http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack/">reports of some layout issues in Firefox</a>.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">&lt;style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
<span class="re1">.clearfix</span><span class="re2">:after </span><span class="br0">&#123;</span>
	<span class="kw1">clear</span><span class="sy0">:</span> <span class="kw2">both</span><span class="sy0">;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
	<span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot; &quot;</span><span class="sy0">;</span>
	<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span>
	<span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.clearfix</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="coMULTI">/* Hide these rules from IE-mac \*/</span>
<span class="sy0">*</span> html <span class="re1">.clearfix</span> <span class="br0">&#123;</span>
	<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">1%</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="re1">.clearfix</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
li<span class="re1">.clearfix</span> <span class="br0">&#123;</span>
	<span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">list-item</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="coMULTI">/* End hide from IE-mac */</span>
&lt;/style<span class="sy0">&gt;</span></pre></div></div></div>

<p>We extended the normal rules to include setting the correct display (list-item) for use on list items (as a direct result of some problems with floated lists). If you don&#8217;t care about IE-mac support (don&#8217;t forget that <a href="http://www.codecouch.com/2005/12/microsoft-finally-retires-ie-5-for-the-mac/">Microsoft finally retired IE 5 for the Mac</a>) then you can avoid using the &#8220;commented backslash hack&#8221; all together.</p>
<p>Going back to our original HTML code, we can place the <b>clearfix</b> class on the parent element to ensure that it inherits the height of it&#8217;s floating child elements (and the red background will now show):</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="html4strict">...
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clearfix&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;parent&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;background-color:#F00;&quot;</span>&gt;</span>
	<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;child&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;float: left;&quot;</span>&gt;</span>Floated element<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
...</pre></div></div></div>

<p>You can read more about the <b>clearfix</b> solution all over the place, including:</p>
<ul>
<li><a href="http://www.positioniseverything.net/easyclearing.html">Position is Everything</a></li>
<li><a href="http://www.456bereastreet.com/archive/200603/new_clearing_method_needed_for_ie7/">456 Berea Street</a></li>
<li><a href="http://www.sitepoint.com/blogs/2005/02/26/simple-clearing-of-floats/">Sitepoint</a></li>
</ul>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=How+to+use+%E2%80%9Cclearfix%E2%80%9D+CSS+to+clear+floats+without+markup+http%3A%2F%2Fis.gd%2FVKtPYo" title="Post to Twitter"><img class="nothumb" src="http://www.codecouch.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2008/10/how-to-use-clearfix-css-to-clear-floats-without-markup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get consistent font sizes across all browsers</title>
		<link>http://www.codecouch.com/2007/04/how-to-get-consistent-font-sizes-across-all-browsers/</link>
		<comments>http://www.codecouch.com/2007/04/how-to-get-consistent-font-sizes-across-all-browsers/#comments</comments>
		<pubDate>Wed, 18 Apr 2007 12:58:17 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://www.codecouch.com/?p=136</guid>
		<description><![CDATA[Whether you specify your element's font size in pixels, points or ems, you can be confident that text will look the same across browsers on Mac and Windows with this simple set of CSS rules.]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> This article was written back in the days of IE6. Some of the information may no longer be relevant.</p>
<p>Here is an un-sourced quote that I picked up from the internet:</p>
<blockquote><p>Macs render text at a screen resolution of 72 pixels per inch (ppi) &#8230; Windows renders type at a notional screen resolution of 96 ppi&#8230; the difference between 96 ppi and 72 ppi (24 pixels) makes the fonts on a Web page look 33 percent larger when viewed on a Windows machine.</p>
</blockquote>
<p>To compensate, there are some very simple CSS rules that you can use to essentially &#8220;reset&#8221; the text size to be consistent across both Mac and Windows.</p>

<div class="wp_syntax_outer"><div class="wp_syntax"><div class="wp_syntax_inner"><pre class="css">&lt;style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
   html<span class="sy0">&gt;</span>body <span class="br0">&#123;</span> <span class="kw1">font-size</span><span class="sy0">:</span> <span class="re3">16px</span><span class="sy0">;</span> <span class="br0">&#125;</span>
   body <span class="br0">&#123;</span> <span class="kw1">font-size</span><span class="sy0">:</span> <span class="re3">100%</span><span class="sy0">;</span> <span class="br0">&#125;</span>
&lt;/style<span class="sy0">&gt;</span>
&nbsp;
&lt;!--<span class="br0">&#91;</span>if IE <span class="nu0">7</span><span class="br0">&#93;</span><span class="sy0">&gt;</span>
&lt;style type<span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span><span class="sy0">&gt;</span>
   html<span class="sy0">&gt;</span>body <span class="br0">&#123;</span> <span class="kw1">font-size</span><span class="sy0">:</span> <span class="re3">100%</span><span class="sy0">;</span> <span class="br0">&#125;</span>
&lt;/style<span class="sy0">&gt;</span>
&lt;!<span class="br0">&#91;</span>endif<span class="br0">&#93;</span>--<span class="sy0">&gt;</span></pre></div></div></div>

<p>Initially the <b>html&gt;body</b> definition is applied to all browsers that understand the child selector CSS. This will result in setting the font-size on Opera, Firefox, Netscape, IE7, Safari (and other &#8220;modern&#8221; browsers). It will not be applied to older versions of IE &#8211; they will ignore this definition.</p>
<p>Next, the <b>body</b> definition is set for all browsers that didn&#8217;t understand the initial definition. Because this definition has lower specificity than the initial definition, it is ignored by the likes of Opera, Firefox, Netscape, IE7 and Safari&#8230; but older versions of IE will get this font-size definition.</p>
<p>Finally a conditional comment (which is specific to Windows IE) delivers an override to the initial style by setting the font-size back from a fixed pixel value to a scaleable value for all &#8220;new&#8221; versions of IE&#8230; specifically IE7. It needs to be <b>html&gt;body</b> to ensure it doesn&#8217;t have a lower specificity than the initial definition.</p>
<p>Now, whether you specify your element&#8217;s font size in pixels, points or ems, you can be confident that text will look the same across browsers on Mac and Windows.</p>
<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=How+to+get+consistent+font+sizes+across+all+browsers+http%3A%2F%2Fis.gd%2FMoRy6d" title="Post to Twitter"><img class="nothumb" src="http://www.codecouch.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://www.codecouch.com/2007/04/how-to-get-consistent-font-sizes-across-all-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

