<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Snook.ca</title><link>http://snook.ca/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/snookca" /><description>Tips, Tricks and Bookmarks on Web Development.</description><language>en</language><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/snookca" /><feedburner:info uri="snookca" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>45.1800</geo:lat><geo:long>-75.5500</geo:long><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>Changing Display Resets Scroll Offset</title><link>http://feedproxy.google.com/~r/snookca/~3/Lc8dxUfzCG8/css-display-resets-scroll</link><author>jonathan@snook.ca (Jonathan Snook)</author><pubDate>Thu, 10 Jun 2010 14:49:49 PDT</pubDate><guid isPermaLink="false">http://snook.ca/archives/html_and_css/css-display-resets-scroll</guid><description>&lt;p&gt;In Chrome 5, Safari 4, Opera 10.53 and sometimes Firefox (although I was unable to reproduce it in this test case), changing the visibility of the
			element by toggling &lt;code&gt;display:none&lt;/code&gt; will cause the scroll offset to reset to zero. Toggling &lt;code&gt;visibility:hidden&lt;/code&gt; does 
			&lt;em&gt;not&lt;/em&gt; seem to trigger the same problem. &lt;/p&gt;
		&lt;p&gt;Scroll the container and then toggle the classes applied.&lt;/p&gt;
	&lt;style&gt;
		#a { position:relative; width:300px; height:100px; border:1px solid #333; overflow:auto; }
		.display { display:none; }
		.visibility { visibility:hidden; }
	&lt;/style&gt;

		&lt;input type="button" id="btnA" value="Toggle display:none"&gt;
		&lt;input type="button" id="btnB" value="Toggle visibility:hidden"&gt; &lt;div&gt;Class applied: &lt;span id="classApplied"&gt;&lt;/span&gt;&lt;/div&gt;
		&lt;div id="a"&gt; 
			&lt;div id="b"&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/div&gt;
		&lt;/div&gt;
        
	&lt;script&gt;
			var el = document.getElementById('a');
			var status = document.getElementById('classApplied');
			document.getElementById('btnA').onclick = function(){
				el.className = (el.className == 'display') ? '' : 'display';
				status.innerHTML = el.className;
			}
			document.getElementById('btnB').onclick = function(){
				el.className = (el.className == 'visibility') ? '' : 'visibility';
				status.innerHTML = el.className;
			}
	&lt;/script&gt;
    &lt;p&gt;I haven't tested this in Internet Explorer, yet. Feel free to report in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/snookca?a=Lc8dxUfzCG8:cHtCfmqaQUA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=Lc8dxUfzCG8:cHtCfmqaQUA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=Lc8dxUfzCG8:cHtCfmqaQUA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=Lc8dxUfzCG8:cHtCfmqaQUA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=Lc8dxUfzCG8:cHtCfmqaQUA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/snookca/~4/Lc8dxUfzCG8" height="1" width="1"/&gt;</description><feedburner:origLink>http://snook.ca/archives/html_and_css/css-display-resets-scroll</feedburner:origLink></item><item><title>Handling Active State for jQuery Animated Backgrounds</title><link>http://feedproxy.google.com/~r/snookca/~3/HBOTMmeIRI4/handling-active-state</link><author>jonathan@snook.ca (Jonathan Snook)</author><pubDate>Thu, 27 May 2010 00:24:44 PDT</pubDate><guid isPermaLink="false">http://snook.ca/archives/javascript/handling-active-state</guid><description>&lt;p&gt;Awhile back, I wrote an article on &lt;a href="http://snook.ca/archives/javascript/jquery-bg-image-animations/"&gt;how to animate background images with jQuery&lt;/a&gt; to create some nifty effects. One of the most common questions I receive on that article is, &amp;quot;How do I handle active states?&amp;quot; It is time to answer that question.&lt;/p&gt;
&lt;p&gt;There are two ways in which you can handle the active state:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Create a different animation for active elements; or&lt;/li&gt;
  &lt;li&gt;Change the background image to be animated.&lt;/li&gt;
&lt;/ol&gt; 
&lt;h2&gt;The HTML &lt;/h2&gt;
&lt;p&gt;The HTML for this is exactly the same as before except an active class would be applied to the &lt;code&gt;LI&lt;/code&gt;. You can add the active class to the link, if you wish. You just need to update the code below accordingly.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li &lt;strong&gt;class=&amp;quot;active&amp;quot;&lt;/strong&gt;&amp;gt;&amp;lt;a href=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&amp;hellip;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Different Animation for Active Elements &lt;/h2&gt;
&lt;p&gt;This should hopefully be very straightforward: just create two sets of animation. One will animate on any element that is &lt;em&gt;not&lt;/em&gt; with an active class and another will animate on any element that &lt;em&gt;does&lt;/em&gt; have an active class.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$('#nav li:not(.active) a')&amp;hellip;
$('#nav li.active a')&amp;hellip;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The rest of the code will be tailored to handle the animation however you wish.&lt;/p&gt;
&lt;h2&gt;Change the Background Image&lt;/h2&gt;
&lt;p&gt;This is by far the more optimized of the two solutions as the amount of additional JavaScript required is absolutely zero but is based on the assumption that the animation will be exactly the same. &lt;/p&gt;
&lt;p&gt;All that needs to be done is to have the background image set to something else for the active state.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#a a { background:url(bg.jpg) repeat -20px 35px; }
#a .active a { background-image:url(bg-active.jpg); } &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And that's it!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/snookca?a=HBOTMmeIRI4:BH_1LAkdDQI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=HBOTMmeIRI4:BH_1LAkdDQI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=HBOTMmeIRI4:BH_1LAkdDQI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=HBOTMmeIRI4:BH_1LAkdDQI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=HBOTMmeIRI4:BH_1LAkdDQI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/snookca/~4/HBOTMmeIRI4" height="1" width="1"/&gt;</description><feedburner:origLink>http://snook.ca/archives/javascript/handling-active-state</feedburner:origLink></item><item><title>Filling in the Gaps</title><link>http://feedproxy.google.com/~r/snookca/~3/S2TNTwhzBEA/filling-in-the-gaps</link><author>jonathan@snook.ca (Jonathan Snook)</author><pubDate>Mon, 17 May 2010 00:38:22 PDT</pubDate><guid isPermaLink="false">http://snook.ca/archives/opinion/filling-in-the-gaps</guid><description>&lt;p&gt;HTML started  as a very simple language. By many accounts, it's still very simple. You create some text and you wrap some tags around it. The tags provide a small measure of meaning and allow user agents&amp;mdash;aka browsers&amp;mdash;to present the content in a meaningful way. &lt;/p&gt;
&lt;p&gt;In the early days of the web, browser developers quickly added features that helped web developers build more exciting sites and applications. Tables, font tags, and images gave us a decent amount of flexibility to create the sites  we wanted. We even had this fancy thing called &amp;quot;JavaScript&amp;quot; that allowed us to interact with the page in basic ways.&lt;/p&gt;
&lt;h2&gt;One Plugin to Rule Them All&lt;/h2&gt;
&lt;p&gt;One notable addition was the embed tag (and the applet and object tag after that). It's notable because it recognized that browsers could not do everything. From this sprung forth slow and cumbersome Java applets, Shockwave 3D, Real Audio streaming and more panaroma plugins than you could shake an animated trailing cursor at. Adobe Flash, n&amp;eacute;e Macromedia Flash, was born in this era.&lt;/p&gt;
&lt;p&gt;At this point, one of the largest problems for web developers was ensuring that site visitors had the necessary plugin installed. Otherwise, it required users to download it, install it, and restart their browser. Requiring this complicated process just to view your web site meant that fewer people would take the time to complete the task.&lt;/p&gt;
&lt;p&gt;Impressively, the Flash player began to be bundled with browsers. Flash, above all else, became nearlyubiquitous with statistics showing the Flash Player being &lt;a href="http://www.adobe.com/products/player_census/flashplayer/"&gt;available on 99% of all Internet-enabled desktops&lt;/a&gt;. As a web developer, you now had technology that you could rely on almost as much as HTML but with a lot more power.  At the turn of the millenium, even CSS was still gaining traction. &lt;/p&gt;
&lt;p&gt;It's important to note that Macromedia (and Adobe) did not rest on its laurels. They continued to fill the gaps of what the browser could provide us. Between then and now they've managed to  offer  useful features such as cross-domain requests, local storage, binary sockets, multi-file uploads, and shared objects. On the animation front, there are 3D effects, inverse kinetics, and pixel bending. On the streaming side, there is support for multiple codecs, full-screen playback, and dynamic streaming. Flash also allows for screen, audio, and webcam capturing, as well as peer-to-peer connections. &lt;/p&gt;
&lt;p&gt;Yet, Flash has turned into an annoyance for many consumers. Garish advertising is strewn everywhere; large, slow and confusing animated site intros are unnecessary glitz; deep-linking to content is often impossible; and normal browser features like keyboard navigation aren't available. &lt;/p&gt;
&lt;p&gt;Flash's downfall, however, has more to do with those wielding its power&amp;mdash;the web developers and designers who misuse it&amp;mdash;and less to do with the technology itself. &lt;/p&gt;
&lt;h2&gt;Shifting to the Browser: is HTML5 the saviour?&lt;/h2&gt;
&lt;em&gt;First, a small apology: I'm lumping a bunch of technologies under the umbrella of HTML5 for succinctness. I hope this isn't too confusing.&lt;/em&gt;
&lt;p&gt;These days, browser developers are moving quickly to add new features; many&amp;mdash;but certainly not all&amp;mdash;of which compete with Flash. There is canvas, SVG, CSS-based animations, web sockets, local storage, multi-file uploads, and native video and audio.&lt;/p&gt;
&lt;p&gt;These new features do negate some of the need to use Flash; however, I'm reluctant to think that these few features will be the death of Flash. There are simply too many use cases out there for which HTML5 does not serve. &lt;a href="http://blog.hulu.com/2010/05/13/pardon-our-dust/"&gt;Hulu's reluctance to embrace  HTML5&lt;/a&gt; is very much case in point. &lt;a href="http://chatroulette.com/"&gt;Chat Roulette&lt;/a&gt; would be another. Or &lt;a href="http://tinychat.com/"&gt;tinychat&lt;/a&gt;. Or &lt;a href="http://www.adobe.com/products/acrobatconnectpro/"&gt;Adobe Connect&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;HTML5 just doesn't have the same breadth of features as Flash. That's not to say browsers won't get there someday. It's just not there, yet.&lt;/p&gt;
&lt;h2&gt;What of the mobile web?&lt;/h2&gt;
&lt;p&gt;The biggest question these days is, &amp;quot;what about the mobile web?&amp;quot; Or more specifically, &amp;quot;what about the iPhone or the iPad?&amp;quot; (Or Android, but &lt;a href="http://www.adobe.com/devnet/devices/articles/htchero.html"&gt;it looks like they're going to have Flash soon enough&lt;/a&gt;.) &lt;/p&gt;
&lt;p&gt;For the most part, I have not missed  Flash. Sites have provided non-Flash alternatives or I have been able to rely on native applications to fill the void&amp;mdash;such as with games or other applications more likely to be found in a native desktop application than on the web. &lt;/p&gt;
&lt;p&gt;Apple certainly isn't hurting right now by pushing developers onto their native development platform. When you look at the current use cases for the mobile web, many of the features in Flash just aren't as necessary.&lt;/p&gt;
&lt;p&gt;Yet, these devices are designed to render the web as if it was a desktop browser. Many sites are unfortunately created for the desktop with Flash as an expectation&amp;mdash;they expect Flash to be ubiquitous for they were made in a world that predates the iPhone or the iPad. My dentist's web site is all Flash and unviewable on the iPad or iPhone. My massage therapist's web site is all Flash and unviewable on the iPad or iPhone.&lt;/p&gt;
&lt;p&gt;Apple runs the risk that the Flash platform&amp;mdash;combined with the right mobile device and proper access to the underlying hardware&amp;mdash;could provide  incentive for developers (and consumers) to shift their focus,  time, and  money to platforms other than the iPhone or iPad. Build once, run everywhere (or at least, as many places as possible) while also  supporting what already exists on the web.&lt;/p&gt;
&lt;h2&gt;Our duty&lt;/h2&gt;
&lt;p&gt;As web developers, we should choose the best tools and technology for the job. To do otherwise&amp;mdash;out of ignorance or some duty to &amp;quot;web standards&amp;quot;&amp;mdash;is a disservice to the clients and customers we serve.&lt;/p&gt;
&lt;p&gt;Right now, HTML5 is slowly becoming a viable alternative to Flash for a greater variety of situations. However, Flash will continue to fill in the gaps for years to come because it continues to solve problems that web developers have and that can't be solved with any other client-side technology.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/snookca?a=S2TNTwhzBEA:ZcRZb_KK1EA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=S2TNTwhzBEA:ZcRZb_KK1EA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=S2TNTwhzBEA:ZcRZb_KK1EA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=S2TNTwhzBEA:ZcRZb_KK1EA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=S2TNTwhzBEA:ZcRZb_KK1EA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/snookca/~4/S2TNTwhzBEA" height="1" width="1"/&gt;</description><feedburner:origLink>http://snook.ca/archives/opinion/filling-in-the-gaps</feedburner:origLink></item><item><title>Vendors using Competing Prefixes</title><link>http://feedproxy.google.com/~r/snookca/~3/6s7VXOlFzH4/vendor-prefixes-competing</link><author>jonathan@snook.ca (Jonathan Snook)</author><pubDate>Tue, 11 May 2010 07:39:00 PDT</pubDate><guid isPermaLink="false">http://snook.ca/archives/html_and_css/vendor-prefixes-competing</guid><description>&lt;p&gt;IE Mobile for Windows Phone 7 has decided to implement support for &lt;code&gt;-webkit-text-size-adjust&lt;/code&gt;. They'll also be adding their own duplicate vendor-specific prefix, &lt;code&gt;-ms-text-size-adjust&lt;/code&gt;. That's right, Microsoft will be adding support for another vendor's non-standard implementation.&lt;/p&gt;
&lt;p&gt;Is this good or bad? The general consensus on Twitter would indicate that this is a bad thing but while there is a scenario where this could go terribly wrong, I haven't found a real world example to back it up.&lt;/p&gt;
&lt;p&gt;So why is this a bad thing?&lt;/p&gt;
&lt;h2&gt;Vendor-prefixed implementations may change &lt;/h2&gt;
&lt;p&gt;The point of a vendor prefix is to avoid a situation where an implementation changes before becoming a standard, thereby breaking all sites that come before it. This is a good thing. A vendor can continue to revise the syntax under a prefixed property without breaking things when they finally do become standard and implementations drop the vendor prefix. &lt;/p&gt;
&lt;p&gt;If a competing vendor implements a vendor prefix, they run the risk that changes to the competing browser will then break their implementation. For example, if Webkit changes how &lt;code&gt;-webkit-text-size-adjust&lt;/code&gt; works then Microsoft will be in a tough situation because their implementation will break. The problem is, any developer who implemented &lt;code&gt;-webkit-text-side-adjust&lt;/code&gt; before the change will also find their implementations broken in newer versions of the browser. &lt;/p&gt;
&lt;p&gt;Has there been a situation where a browser has changed the syntax on a vendor-prefixed property that has broken previous implementations? I can't think of any but feel free to chime in on the comments.&lt;/p&gt;
&lt;p&gt;Of note, browsers have implemented syntax changes on non-prefixed properties like background that &lt;em&gt;have&lt;/em&gt; broken previous implementations. Multiple backgrounds, for example, break on browsers that don't support it, requiring the background property to be specified twice. (The situation is exacerbated by the fact that vendor-prefixed properties in multiple backgrounds will be ignored in other browsers, requiring  backgrounds to be specified three or four separate times to support all current browsers.)&lt;/p&gt;
&lt;h2&gt;Mimicking another vendor's prefix is like using no prefix at all&lt;/h2&gt;
&lt;p&gt;This argument is a misdirection and not the case at all. If every browser implemented a single vendor's prefixed property then the property would become standard and the prefix would be dropped. For example, imagine &lt;code&gt;-moz-opacity&lt;/code&gt; was implemented by all browsers before becoming standard. The property becomes &lt;code&gt;opacity&lt;/code&gt; and we all move on. I'd prefer this over &lt;code&gt;-webkit-opacity&lt;/code&gt;, &lt;code&gt;-moz-opacity&lt;/code&gt;, &lt;code&gt;-o-opacity&lt;/code&gt; and &lt;code&gt;opacity&lt;/code&gt; all having to be set.&lt;/p&gt;
&lt;p&gt;It's perfectly possible for all browsers to agree on an implementation using a prefixed property before re-implementing it with a non-prefixed standards-based property. The simpler the syntax, the easier it is to expect that the implementation won't change. The &lt;code&gt;-webkit-text-size-adjust&lt;/code&gt; property is a perfect example of this. It's very simple and extremely unlikely that the implementation will change. &lt;/p&gt;
&lt;h2&gt;Implementations may change but syntax won't&lt;/h2&gt;
&lt;p&gt;Sometimes browsers don't get the implementation correct. Border radius is a prime example of this. Firefox 2, for example, had a problem with their implementation that caused the rounding to be unbalanced. (I recall Happy Cog having an issue with this when working on the WordPress admin a couple years back; I can't find the article, though.) Had another browser implemented it like Firefox, the implementations would no longer match.&lt;/p&gt;
&lt;p&gt;This situation is a little different because of expectations. In this case, the implementation had a bug. This wasn't a style preference or syntax issue. It was a bug in how a particular edge case was rendered. &lt;/p&gt;
&lt;p&gt;Border-radius implementations across all browsers still don't match the specification in a lot of edge cases (&lt;a href="http://blogs.msdn.com/ie/archive/2010/03/19/the-css-corner-about-css-corners.aspx"&gt;something that IE9 is looking to address&lt;/a&gt;; my apologies if Opera has already done this in 10.5). &lt;/p&gt;
&lt;p&gt;This is a grey area and I can see good points and bad points against this. The question is whether a feature is implemented by a web developer based on the expectation set forth by these edge cases. For example, if I &lt;a href="http://snook.ca/archives/html_and_css/safari-transparent-borders"&gt;expected all browsers to overlap border corners to compound transparency values&lt;/a&gt; then I'd be terribly disappointed when this started to get fixed in subsequent implementations.&lt;/p&gt;
&lt;p&gt;In this last case, how does one browser mimicking the implementation of another change this situation? I'm not sure it does.&lt;/p&gt;
&lt;h2&gt;It's like -beta prefixes and that's bad&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;-beta&lt;/code&gt; prefix had been bandied about on the W3C style list where browser developers and the public at large discuss CSS implementations. The problem with the &lt;code&gt;-beta&lt;/code&gt; prefix is that it prevents versioning of a particular feature. Right now, vendor prefixes essentially act as a versioning process. One browser implements it using Syntax A. That's version 1. Other browsers ponder it and implement it using Syntax B. That's version 2. The vendor prefixes for each browser acts as the versioning system.&lt;/p&gt;
&lt;p&gt;In the case of something like CSS gradients, browsers have implemented different vendor prefixes: &lt;code&gt;-webkit-gradient&lt;/code&gt; versus &lt;code&gt;-moz-linear-gradient&lt;/code&gt; and &lt;code&gt;-moz-radial-gradient&lt;/code&gt;. The syntax may be different but so is the property name which essentially means that they are two separate implementations. Microsoft could theoretically implement both syntaxes and still not break anything.&lt;/p&gt;
&lt;h2&gt;Theoretically and hypothetically speaking&lt;/h2&gt;
&lt;p&gt;We often argue based on extremes to prove a point but the practicality of the matter is that this particular implementation of the &lt;code&gt;-webkit-text-size-adjust&lt;/code&gt; property in IE Mobile isn't really a big deal and is unlikely to affect developers to any extent.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/snookca?a=6s7VXOlFzH4:14p95t4NCto:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=6s7VXOlFzH4:14p95t4NCto:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=6s7VXOlFzH4:14p95t4NCto:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/snookca?a=6s7VXOlFzH4:14p95t4NCto:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/snookca?i=6s7VXOlFzH4:14p95t4NCto:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/snookca/~4/6s7VXOlFzH4" height="1" width="1"/&gt;</description><feedburner:origLink>http://snook.ca/archives/html_and_css/vendor-prefixes-competing</feedburner:origLink></item></channel></rss>
