<?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/"
	>

<channel>
	<title>Adam.Kahtava.com / AdamDotCom &#187; Firefox</title>
	<atom:link href="http://adam.kahtava.com/journal/category/firefox/feed/" rel="self" type="application/rss+xml" />
	<link>http://adam.kahtava.com/journal</link>
	<description>A software development blog</description>
	<pubDate>Tue, 09 Mar 2010 17:00:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting a Job at Google: A Web Developer Fizzbuzz</title>
		<link>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/</link>
		<comments>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/#comments</comments>
		<pubDate>Sat, 24 May 2008 21:03:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Google Exercise]]></category>

		<category><![CDATA[IE]]></category>

		<category><![CDATA[Interview]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,8cfd415e-f895-4115-8713-5a879e1abb15.aspx</guid>
		<description><![CDATA[Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to [...]]]></description>
			<content:encoded><![CDATA[<p>Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to Java. Things went great, I moved on to the next step of the process - writing code (a JavaScript widget for Gmail) with a 2 day (weekend) hard deadline. At the time I was wearing JavaScript diapers, but tried the exercise anyways - I&#39;m still convinced the recruiter confused my Java / C# experience with JavaScript. Anyhow&#8230; </p>
<p> <b>The Google Web Developer Exercise:<br /> </b><br />
<blockquote style="border: 1px solid rgb(207, 207, 207); padding-left: 7px;">
<h3>Web Developer Exercise </h3>
<p> Attached are three states of a new contacts widget. This widget will be used across Google and may be anywhere on the page. Designers will also use this in mocks for usability tests. Create the HTML, CSS, and JavaScript for the widget as described in the image. Your solution must work in Firefox v1.5+ and IE v6+. Bonus points for a solution that degrades nicely on older browsers.</p>
<p> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise02.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise03.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise01.png">  </p></blockquote>
<p><b>After my first attempt, I concluded that: </b> <br /> 
<ol>
<li> My JavaScript knowledge was embarrassing  </li>
<li> <a href="http://en.wikipedia.org/wiki/Dynamic_language">Dynamic programming languages</a> like JavaScript using <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototypical inheritance</a> were awesome - as a monocultured .NET developer I had sorely been missing out</li>
<li> Framework Web Developers (ASP.NET, Ruby on Rails, and so on) aren&#39;t really Web Developers - we depend on a framework (an API) as a crutch, where the law of <a href="http://en.wikipedia.org/wiki/Leaky_abstraction">Leaky Abstractions</a> is very real, and often when it rears it&#39;s head we use our <a href="http://en.wikipedia.org/wiki/Golden_hammer">golden hammer</a> (our multipurpose language of choice), but there are better tools at hand </li>
<li> Web Developers claiming <i>n</i> years of experience need to at least know JavaScript, CSS, HTML / XHTML, a server-side language, and some XML / XSL - NOT just a single multipurpose language or framework </li>
<li> Innovation can only happen when you become <i>one</i> with the technologies surrounding your realm - for example: <a href="http://adaptivepath.com/ideas/essays/archives/000385.php">Jesse James Garrett</a> probably would not have publicized AJAX had he been an exclusive ASP.NET developer. Diversity is essential for innovation </li>
</ol>
<p> In retrospect this exercise is brilliant, it&#39;s a more complex derivation of a <a href="http://www.codinghorror.com/blog/archives/000781.html">Fizzbuzz exercise</a>, which effectively weeds out the knowledgeable candidates from the n00bs. JavaScript is notorious for being one of <a href="http://www.crockford.com/javascript/javascript.html">the world&#39;s most misunderstood language</a>, many developer (and the ASP.NET Framework) still use JavaScript techniques from the old days of Netscape. For example: <i>&lt;a onclick=&#8221;return false;&#8221; &#8230;</i>, or &lt;a <i>href=&#8221;Javascript: do something;&#8221; &#8230;</i> are common <a href="http://en.wikipedia.org/wiki/DOM_Events#DOM_Level_0">DOM Level 0</a> inline techniques that should be avoided. These techniques have been replaced, but finding developer that use these JavaScript techniques can be hard.</p>
<p> <b>By having a developer complete this exercise you effectively determine that the they understands these concepts:</b> <br /> 
<ul>
<li> Cross browser compatibilities and work arounds for both JavaScript and CSS - with a preference given to <a href="http://www.quirksmode.org/js/support.html">feature detection (object detection)</a> vs browser detection, an understanding of the different event handling models between browsers </li>
<li> An understanding of the separation of concerns - JavaScript, markup, and CSS should be separate files, or at least separated within the document </li>
<li> Event registration and listening - <a href="http://en.wikipedia.org/wiki/DOM_Events">DOM events</a>, the different browser event models, no inline level 0 event declarations, no pseudo JavaScript protocol inline declarations within markup </li>
<li> An understanding of <a href="http://en.wikipedia.org/wiki/Functional_languages">functional languages</a> - <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29">closures</a>, <a href="http://adam.kahtava.com/journal/2008/03/17/NamespacingYourJavaScript.aspx">namespaces</a>, <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambdas</a>, recursion where necessary </li>
<li> Node manipulation - creating, swapping, removing elements</li>
<li> Knowledge of <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">non-obtrusive JavaScript techniques</a> </li>
<li> Importance of modular / compartmentalization of CSS and JavaScript - defensive programming techniques that minimize the risk of interfering with other scripts and elements within the page, part of the non-obtrusive techniques, how to avoid global variables</li>
<li> An understanding on how to debug JavaScript from both IE (<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">link</a>) and Firefox (<a href="http://www.getfirebug.com/js.html">link</a>)</li>
<li> <a href="http://javascript.crockford.com/code.html">JavaScript code conventions</a> - naming conventions, statement conventions</li>
<li> CSS naming conventions</li>
<li> General DHTML / AJAX techniques - showing and hiding elements </li>
<li> A gauge on their attention to details and UI design intuition - what their gut tells them to do when things aren&#39;t spelled out</li>
</ul>
<p> <b>My latest crack at the Google Web Developer Exercise:</b>  <br /> <iframe src="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/" style="border-width: 0px; width: 320px; height: 300px; margin-left: 15px; float: left;"> </iframe> <br /> <i>You&#39;ll have to visit my site (view this blog post outside a RSS reader) to view the code in action.</p>
<p> </i>The code: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.js">GoogleExercise.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.css">GoogleExercise.css</a> </p>
<p> <i>Today I&#39;m wearing JavaScript training wheels - </i><i>feel free to comment on the code, I&#39;m always looking for improvements and suggestions. I did take a couple shortcuts on the CSS / UI side of things as I was focusing more on the functionality.</i>  </p>
<p> <i>Using one of the <a href="http://en.wikipedia.org/wiki/Ajax_Libraries">AJAX Libraries</a> (like <a href="http://jquery.com/">jQuery</a>) we could certainly do this exercise in significantly fewer lines of code.</p>
<p> </i>
<div style="clear: both;">Today I still think about <a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">Getting that job at Google</a>, Yahoo!, Amazon, or Microsoft. <a href="http://adam.kahtava.com/journal/2008/01/13/HowWellDoYouKnowJavaScript.aspx">How well do you know JavaScript?</a> </p></div>
<div style="border: 1px solid #ccccee; padding: 5px; background-color: #ffffdd;"><strong>Update:</strong> I redid the Google Exercise using jQuery and more semantics, you can find my latest version here: <a href="http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/">The Google Exercise Revisited: Semantic Markup with jQuery</a>.</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How Well Do You Know JavaScript?</title>
		<link>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 19:09:19 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[IE]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b8b02f0d-1ed8-445a-a698-28458ef98622.aspx</guid>
		<description><![CDATA[
JavaScript is probably the world&#8217;s most popular and misunderstood programming languages and for good reason.
When a developer claims to know JavaScript this generally equates to one or all of the following:

 &#8220;I know what JavaScript is, I can learn JavaScript in 30 minutes&#8220;
 &#8220;JavaScript is for kids, it&#8217;s a toy language, it&#8217;s easy&#8221;
 &#8220;I just [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://www.flickr.com/photos/matthiasorfield/368716706/"><img src="http://farm1.static.flickr.com/98/368716706_d8c474a12c_m.jpg" alt="" /></a></div>
<p>JavaScript is probably the world&#8217;s most popular and misunderstood programming languages and for good reason.<br />
When a developer claims to <em>know</em> JavaScript this generally equates to one or all of the following:</p>
<ul>
<li> <em>&#8220;I know what JavaScript is, </em><em>I can learn JavaScript in 30 minutes</em><em>&#8220;</em></li>
<li> <em>&#8220;JavaScript is for kids, it&#8217;s a toy language, it&#8217;s easy&#8221;</em></li>
<li> <em>&#8220;I just copy and paste my JavaScript snippets / scripts from the internet&#8221;</em></li>
<li> <em>&#8220;JavaScript is just another programming language like C++, C#, VB.NET, or Java&#8221;</em></li>
</ul>
<p>If thoughts similar to these have crossed your mind when sizing up your JavaScript knowledge, then you probably don&#8217;t know JavaScript.</p>
<p>I would argue that if you&#8217;ve never programmed in a <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming language</a> (like: <a href="http://en.wikipedia.org/wiki/LISP">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Scheme">Scheme</a>, <a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language">F#</a>), never read a <a href="http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/"><strong><span style="text-decoration: underline;"><em>GOOD</em></span></strong></a> book on JavaScript, or never watched a video on JavaScript, then you probably don&#8217;t understand JavaScript at all. JavaScript is starkly different than any other mainstream programming language.</p>
<p>When it comes to JavaScript, if you don&#8217;t understand the fundamentals then you&#8217;re only punishing yourself.</p>
<p><strong>Here are some things every JavaScript developer should probably understand:</strong></p>
<ul>
<li> <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, <a href="http://en.wikipedia.org/wiki/JavaScript#History_and_naming">Mocha</a>, <a href="http://en.wikipedia.org/wiki/Livescript">LiveScript</a>, <a href="http://en.wikipedia.org/wiki/JScript">JScript</a>, and <a href="http://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a> are all essentially the same.</li>
<li> JavaScript is a prototypically inherited (<a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototype-based programming</a>) language which is very different than the classically inherited (<a href="http://en.wikipedia.org/wiki/Class-based_programming">class-based programming</a>) languages like C++, Java, and most of the .NET languages - you know the difference between a prototype-based programming and class-based programming language.</li>
<li> JavaScript is a loosely typed language - you know the difference between <a href="http://en.wikipedia.org/wiki/Strongly-typed_programming_language">strongly-typed programming</a> languages and <a href="http://en.wikipedia.org/wiki/Weak_typing">weak-typed</a> or loosely typed languages.</li>
<li> JavaScript is a functional <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambda</a> language - you understand lambdas and that functions in JavaScript can be lambdas.</li>
<li> JavaScript functions can be defined inside functions, inside functions, inside functions, and so on - you can demonstrate this.</li>
<li> JavaScript uses function scope, has no curly brace <em>&#8216;{}&#8217;</em> block scope - you understand that this is common attribute of most functional programming languages.</li>
<li> JavaScript has no private, public, protected assessors, no classes, no enums, no structs - you understand that all these language features can be achieved through objects and function closures.</li>
<li> JavaScript is classless, but instead it uses objects as general containers.</li>
<li> JavaScript makes use of garbage collection.</li>
<li> JavaScript uses truthy and falsy values - you understand which values are truth and falsy.</li>
<li> JavaScript makes use of the <em>&#8216;nan&#8217;</em> (not a number) and <em>&#8216;undefined&#8217;</em> values - you understand the difference between these values.</li>
<li> JavaScript has pretty good debuggers - you understand how to debug JavaScript from both IE (<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">link</a>) and Firefox (<a href="http://www.getfirebug.com/js.html">link</a>).</li>
<li> You appreciate recursion, and understand that recursion is a useful technique in JavaScript.</li>
<li> You understand that JavaScript Namespaces should be used - you understand the importance of namespaces, and know how to create one (<a href="http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/">Namespacing Your JavaScript</a>).</li>
<li> You know how to avoid the <a href="http://www.dynamicsitesolutions.com/javascript/mistakes/">JavaScript pseudo-protocol</a> (<em>&lt;a href=&#8221;Javascript:alert(&#8217;hello&#8217;);&#8221;</em>), and appreciate avoiding it.</li>
<li> You know how to avoid embedding DOM Level 0 JavaScript events (<em>&lt;a onclick=&#8221;alert(&#8217;hello&#8217;);&#8221;</em>) in your mark-up / document structure, and appreciate this technique.</li>
<li> You know that JavaScript can make use of two different event models (<a href="http://www.quirksmode.org/js/events_order.html">event capturing and bubbling</a>), but we should only ever make use of bubbling.</li>
<li> You understand what <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> is and how it&#8217;s used.</li>
<li> You know how to keep you JavaScript, CSS, document structure separate, and appreciate non obtrusive JavaScript.</li>
</ul>
<p>If any of these points seem foreign, then it may be time to learn JavaScript. With all the hype and buzz around Web 2.0 and AJAX it could be a great way to augment your career while broadening your programming language vocabulary.</p>
<p><strong>Great resources for learning more about JavaScript:</strong></p>
<p>Videos:</p>
<ul>
<li> <em>The JavaScript Programming Language</em>: <a href="http://video.yahoo.com/video/play?vid=111593">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111594">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111595">Part 3</a>, <a href="http://video.yahoo.com/video/play?vid=111596">Part 4</a></li>
<li> <em>An Inconvenient API: The Theory of the DOM</em>: <a href="http://video.yahoo.com/video/play?vid=111582">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111583">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111584">Part 3</a></li>
<li> <em>Advanced JavaScript:</em> <a href="http://video.yahoo.com/video/play?vid=111585">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111586">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111587">Part 3</a></li>
<li> <em>JavaScript: The Good Stuff</em>: <a href="http://video.yahoo.com/video/play?vid=630959">Link</a></li>
<li> All these videos are available on the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a> - all the videos are great, watch them all!</li>
</ul>
<p>Books:</p>
<ul>
<li> <a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/1565923928/?tag=adamkahtavaap-20&amp;creativeASIN=1565923928">JavaScript: The Definitive Guide by David Flanagan</a></li>
<li> <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742?tag=adamkahtavaap-20&amp;creativeASIN=0596517742">JavaScript: The Good Parts by Douglas Crockford</a></li>
</ul>
<p>Links:</p>
<ul>
<li> <a href="http://developer.mozilla.org/en/docs/A_re-introduction_to_JavaScript">MDC: A re-introduction to JavaScript</a></li>
<li> <a href="http://javascript.crockford.com/code.html">Code Conventions for the JavaScript Programming Language</a></li>
<li> <a href="http://javascript.crockford.com/javascript.html">JavaScript: The World&#8217;s Most Misunderstood Programming Language</a></li>
<li> <a href="http://www.odetocode.com/Articles/473.aspx">What ASP.NET Developers Should Know About JavaScript</a></li>
<li> <a href="http://thinkingandmaking.com/entries/63">Best Practices: Implementing JavaScript for rich internet applications</a></li>
<li> <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">The seven rules of Unobtrusive JavaScript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My first Greasemonkey Script: Goodbye ASP.NET Forum Ads</title>
		<link>http://adam.kahtava.com/journal/2007/11/21/my-first-greasemonkey-script-goodbye-aspnet-forum-ads/</link>
		<comments>http://adam.kahtava.com/journal/2007/11/21/my-first-greasemonkey-script-goodbye-aspnet-forum-ads/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 03:12:58 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Firebug]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[greasemonkey]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,e81cbb41-be44-4c48-ac58-1b88c42bb95a.aspx</guid>
		<description><![CDATA[Greasemonkey is an add-on for Firefox. Through JavaScript it allows anyone the ability to dynamically modify a page as, or after it&#8217;s being rendered in the browser. This lets anyone trim the DOM, remove ads, and modify page in anyway they see fit (it also opens up some serious privacy concerns with XSS). Anyhow, I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Greasemonkey">Greasemonkey</a> is an add-on for Firefox. Through JavaScript it allows anyone the ability to dynamically modify a page as, or after it&#8217;s being rendered in the browser. This lets anyone trim the DOM, remove ads, and modify page in anyway they see fit (it also opens up some serious privacy concerns with <a href="http://en.wikipedia.org/wiki/Cross_site_scripting">XSS</a>). Anyhow, I spend a fair time on the <a href="http://forums.asp.net/139.aspx">ASP.NET forums</a>, but the advertisements have always made for a somewhat negative, but tolerable user experience.</p>
<p>Today I finally broke down and wrote my own Greasemonkey script - now formally known as <em>&#8220;The ASP.NET Forums Beautifier&#8221;</em> for lack of a better name.</p>
<p><strong>The Script Before and After: </strong></p>
<p><strong>Before - </strong>usually the ASP.NET Forums look like this:<br />
<img src="http://adam.kahtava.com/etcetera/greasemonkey/gm.forums.asp.net.before.small.png" alt="" /></p>
<p><strong>After</strong> - with my script running in Greasemonkey we get this:<br />
<img src="http://adam.kahtava.com/etcetera/greasemonkey/gm.forums.asp.net.after.small.png" alt="" /></p>
<p><em>note: the greasemonkey icon, and complete lack of fluff / advertisements on the second screenshot.</em></p>
<p>Creating this script was simpler than I expected. It was a matter of skimming through an article on <a href="http://www.cyberciti.biz/tips/how-to-write-greasemonkey-scripts.html">How to write Greasemonkey scripts</a>, using <a href="http://www.getfirebug.com/logging.html">Firebug&#8217;s JavaScript Console</a> and <a href="http://developer.mozilla.org/en/docs/JavaScript_Console">Firefox&#8217;s Error Console</a> to test my code (after all, Firefox is the new IDE, <a href="http://www.codinghorror.com/blog/archives/000780.html">Firefox as an IDE</a>), and an hour later, Viola! No more ads.</p>
<p>The <a href="http://yuiblog.com/">YUI blog</a> and <a href="http://adam.kahtava.com/journal/2007/09/16/javascript-is-awesome-i-want-to-work-with-douglas-crockford/">Douglas Crockford</a> in particular, have inspired my JavaScript renaissance. JavaScript is really interesting, it&#8217;s a functional, loosely typed programming language that uses <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototype-base inheritance</a>. Developing in JavaScript is a real treat from some of the more statically typed languages.</p>
<p>Download <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> and <em><a href="http://userscripts.org/scripts/show/25869">&#8220;The ASP.NET Forums Beautifier&#8221;</a></em> for yourself. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/11/21/my-first-greasemonkey-script-goodbye-aspnet-forum-ads/feed/</wfw:commentRss>
		</item>
		<item>
		<title>In Favor of Using Style Elements / Embedded Style Sheets / Style Blocks / Style Tags or Whatever You Want To Call Them inside the HTML / XHTML Body.</title>
		<link>http://adam.kahtava.com/journal/2007/03/20/in-favor-of-using-style-elements-embedded-style-sheets-style-blocks-style-tags-or-whatever-you-want-to-call-them-inside-the-html-xhtml-body/</link>
		<comments>http://adam.kahtava.com/journal/2007/03/20/in-favor-of-using-style-elements-embedded-style-sheets-style-blocks-style-tags-or-whatever-you-want-to-call-them-inside-the-html-xhtml-body/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 22:20:02 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Firebug]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[IE]]></category>

		<category><![CDATA[Opera]]></category>

		<category><![CDATA[Themes and Skins]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,fb97f8d5-0271-466f-a3f3-e09c53890ab0.aspx</guid>
		<description><![CDATA[I&#8217;ve been using Style Elements within the HTML Body tag to work around some of the design flaws presented in ASP.NET 2.0 Themes - see the second solution in this post for more details. I&#8217;ve been leary of using this method because it&#8217;s not a best practice, since it compromises the validity of the HTML [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.w3.org/TR/REC-CSS1#containment-in-html">Style Elements</a> within the HTML Body tag to work around some of the design flaws presented in ASP.NET 2.0 Themes - see the second solution in <a href="http://adam.kahtava.com/journal/c1575144-e460-464d-b993-259ce96135f4.aspx">this post</a> for more details. I&#8217;ve been leary of using this method because it&#8217;s not a best practice, since it compromises the validity of the HTML / XHTML document. I decided to do a little more research on this subject and made the following discoveries.</p>
<p><strong>Discoveries:</strong></p>
<ol>
<li> Some of the more complex web sites (<a href="http://amazon.com/">Amazon</a> and <a href="http://www.yahoo.com/">Yahoo!</a>) make use of Style Elements within the Body Element - see the source snippets below.</li>
<li> <a href="http://en.wikipedia.org/wiki/Gecko_%28layout_engine%29">Gecko</a> (<a href="http://en.wikipedia.org/wiki/Firefox">Firefox</a>, <a href="http://en.wikipedia.org/wiki/Flock_%28web_browser%29">Flock</a>, <a href="http://en.wikipedia.org/wiki/Mozilla">Mozilla</a>, etc&#8230;) based browsers automatically move Style Elements found within the Body Element into the Head Element and render the page as expected - see the rendered Document Object Model (DOM) image below.</li>
<li> <a href="http://en.wikipedia.org/wiki/Internet_Explorer">Internet Explorer</a> doesn&#8217;t move the Style Element into the Head Element, but renders the page as expected.</li>
<li> <a href="http://en.wikipedia.org/wiki/Opera_%28internet_suite%29">Opera</a>&#8230; well I wish I knew what Opera did, but the page renders as expected.</li>
</ol>
<p><strong>Source snippet from Amazon:</strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"><br />
</span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">table</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><span>Â Â Â  </span><span style="color: blue;">&lt;/</span><span style="color: maroon;">td</span><span style="color: blue;">&gt;</span></span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><span>Â  </span><span style="color: blue;">&lt;/</span><span style="color: maroon;">tr</span><span style="color: blue;">&gt;</span></span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">table</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;Â </p>
<p><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">style</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"> <span style="color: red;">type</span><span style="color: blue;">=&#8221;text/css&#8221;&gt;</span></span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">.lol-hr-center</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"> { <span style="color: red;">margin</span>: <span style="color: blue;">5px</span>; <span style="color: red;">border-top-width</span>: <span style="color: blue;">1px</span>; </span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: green;">/* and so on&#8230; */</span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">}</span><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">style</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"> </span></strong></p>
<p><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">div</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"> <span style="color: red;">id</span><span style="color: blue;">=&#8221;listoflists_data&#8221;</span> <span style="color: red;">style</span><span style="color: blue;">=&#8221;display:none&#8221;&gt; </span></span><br />
<em>Note how the Style element is located between the &lt;table&gt; and &lt;div&gt; tags.</em></p>
<p></span><br />
<strong>Source snippet from Yahoo!:</strong></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">h4</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;<br />
&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">a</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"> <span style="color: red;">id</span><span style="color: blue;">=&#8221;paweather&#8221;</span> <span style="color: red;">class</span><span style="color: blue;">=&#8221;details&#8221;</span> <span style="color: red;">href</span><span style="color: blue;">=&#8221;r/wb/*-http://weather.yahoo.com/forecast/USKS0448_f.html&#8221;&gt;&lt;</span><span style="color: maroon;">span</span> <span style="color: red;">class</span><span style="color: blue;">=&#8221;icon&#8221;&gt;</span>Weather <span style="color: blue;">&lt;</span><span style="color: maroon;">b</span><span style="color: blue;">&gt;&lt;</span><span style="color: maroon;">strong</span><span style="color: blue;">&gt;</span>51<span style="color: red;">&amp;deg;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">strong</span><span style="color: blue;">&gt;</span>F<span style="color: blue;">&lt;/</span><span style="color: maroon;">b</span><span style="color: blue;">&gt;&lt;/</span><span style="color: maroon;">span</span><span style="color: blue;">&gt;&lt;/</span><span style="color: maroon;">a</span><span style="color: blue;">&gt;</span></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"><strong>&lt;</strong></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">style</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"><strong> <span style="color: red;">type</span><span style="color: blue;">=&#8221;text/css&#8221;&gt;</span><span style="color: maroon;">#patabs</span> <span style="color: maroon;">#weather</span> <span style="color: maroon;">.icon</span>{<span style="color: red;">background</span>:<span style="color: blue;">url(http://us.i1.yimg.com/us.yimg.com/i/us/we/31/b/26.gif)</span> <span style="color: blue;">3px</span> <span style="color: blue;">2px</span><span style="color: blue;">no-repeat</span>;}<span style="color: blue;">&lt;/</span><span style="color: maroon;">style</span><span style="color: blue;">&gt;</span></strong></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"><strong></strong>&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">h4</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;</span><br />
<em>Note how the Style element is located within the &lt;h4&gt; tag.</em><br />
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"> </span><br />
<strong>A snapshot of the <a href="http://en.wikipedia.org/wiki/Document_Object_Model">Document Object Model (DOM)</a> as seen through <a href="http://www.getfirebug.com/">Firebug</a>:</strong></p>
<blockquote><p><img src="http://adam.kahtava.com/journal/images/blog/StyleInBody1.png" alt="" /><br />
<em>Note the highlighted area references the Yahoo! source snippet from above.</em>Â<br />
<strong>Conclusion:</strong> Although the Style Element within the Body Element compromises the validity of a document, some of the leaders in web design and accessibility use this approach, so it may not be as big a work around or hack.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/03/20/in-favor-of-using-style-elements-embedded-style-sheets-style-blocks-style-tags-or-whatever-you-want-to-call-them-inside-the-html-xhtml-body/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Underscore (_) rendering issues with Cascading Style Sheets (CSS) in Internet Explorer (IE), Firefox, and other browsers</title>
		<link>http://adam.kahtava.com/journal/2007/01/07/underscore-_-rendering-issues-with-cascading-style-sheets-css-in-internet-explorer-ie-firefox-and-other-browsers/</link>
		<comments>http://adam.kahtava.com/journal/2007/01/07/underscore-_-rendering-issues-with-cascading-style-sheets-css-in-internet-explorer-ie-firefox-and-other-browsers/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 21:22:46 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,3ac7da1a-d857-4cdf-b81a-e62fe30d6ddd.aspx</guid>
		<description><![CDATA[The World Wide Web Consortium (W3C) Cascading Style Sheets (CSS) 2 specifications introduced the underscore (_) as a valid CSS naming character, this allows CSS selectors like class selectors and ID selectors to be named like:

 ._menu_item_1
 #_menu_item_2
 .menu_item_3
 #menu_item_4

However; rendering inconsistencies remain among most popular browsers when Styles, Classes, or IDs are preceded by [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.w3.org/">The World Wide Web Consortium (W3C)</a> <a href="http://www.w3.org/TR/REC-CSS2/">Cascading Style Sheets (CSS) 2 specifications</a> introduced the underscore (_) as a valid CSS naming character, this allows CSS selectors like <a href="http://www.w3.org/TR/REC-CSS2/selector.html#class-html">class selectors</a> and <a href="http://www.w3.org/TR/REC-CSS2/selector.html#id-selectors">ID selectors</a> to be named like:</p>
<ul>
<li> ._menu_item_1</li>
<li> #_menu_item_2</li>
<li> .menu_item_3</li>
<li> #menu_item_4</li>
</ul>
<p>However; rendering inconsistencies remain among most popular browsers when Styles, Classes, or IDs are preceded by the underscore character.</p>
<p><strong>Inconsistencies:</strong></p>
<p>CSS Classes and IDs with an underscore immediately after their respective delimiter (&#8217;.&#8217; Or &#8216;#&#8217;) are rendered by both Firefox and Opera, but <strong>NOT by Internet Explorer</strong>.<br />
<strong>This CSS example will NOT work in Internet Explorer, but WILL work in Firefox and Opera:</strong></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><span> </span><strong><span style="color: maroon;">._idTest1</span>{</strong><br />
<span> </span><span style="color: red;">background-color</span>: <span style="color: blue;">red</span>;<br />
<span> </span>}<br />
<span> </span><strong><span style="color: maroon;">#_id_Test2</span>{</strong><br />
<span> </span><span style="color: red;">background-color</span>: <span style="color: blue;">red</span>;</span></p>
<p class="MsoNormal">Style entries preceded by an underscore are rendered by Internet Explorer (IE 6 &amp; 7), but <strong>NOT by Mozilla / Gecko (Firefox) or Opera</strong>.</p>
<p><strong>This CSS example will only work in Internet Explorer:</strong></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"><span> </span><span style="color: maroon;">*</span>{<br />
<span> </span><span style="color: red; font-weight: bold;">_color</span>: <span style="color: blue; font-weight: bold;">green</span>;<span><br />
</span>}</span></p>
<p>This is a documented quirk and bug, see <a href="http://wellstyled.com/css-underscore-hack.html">The Underscore Hack</a> and <a href="http://www.easy-designs.net/articles/ieUnderscoreBug/">IE Underscore Bug Test</a> for more information.</p>
<p><strong>The Results of our Underscored CSS in Internet Explorer:</strong><br />
<img src="http://adam.kahtava.com/journal/images/blog/UnderscoreTest1_IE.png" alt="" /></p>
<p><strong>The Results of our Underscored CSS in FireFox (rendered the same in Opera):</strong><strong></strong><br />
<img src="http://adam.kahtava.com/journal/images/blog/UnderscoreTest1_FF.png" alt="" /></p>
<p>This CSS quirk came up in an <a href="http://en.wikipedia.org/wiki/ASP.NET">ASP.NET</a> forum, where a poster was having cross browser issues with his menu controls. We discovered that <span><span style="font-family: arial; font-size: x-small;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xhtmlConformance</span><span style="color: #ff0000;"> mode</span><span style="color: #0000ff;">=&#8221;Legacy&#8221;</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span></span></span> was defined in his web.config file which caused the ASP.NET Master Page control (ctl00) to be preceded by an underscore (_ctl00) which was preventing the CSS from being rendered in IE.</p>
<p><strong>Related links:</strong><br />
The <a href="http://www.easy-designs.net/articles/ieUnderscoreBug/">IE Underscore Bug Test</a><br />
The original forum thread: <a href="http://forums.asp.net/thread/1504767.aspx">menu control in master page does not get styles in ie 6.0</a>.<br />
ScottGu&#8217;s Blog: <a href="http://weblogs.asp.net/scottgu/archive/2006/12/10/gotcha-don-t-use-xhtmlconformance-mode-legacy-with-asp-net-ajax.aspx">Gotcha: Don&#8217;t use &lt;xhtmlConformance mode=&#8221;Legacy&#8221;/&gt; with ASP.NET AJAX</a><br />
View the complete source code for my Underscore Test or try it on your favorite browser <a href="http://adamdotcom-script.googlecode.com/svn/trunk/Etcetera/the-css-underscore-test.html">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2007/01/07/underscore-_-rendering-issues-with-cascading-style-sheets-css-in-internet-explorer-ie-firefox-and-other-browsers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Now supporting Opera 9 and other Web Development (CSS) Related Notes</title>
		<link>http://adam.kahtava.com/journal/2006/12/09/now-supporting-opera-9-and-other-web-development-css-related-notes/</link>
		<comments>http://adam.kahtava.com/journal/2006/12/09/now-supporting-opera-9-and-other-web-development-css-related-notes/#comments</comments>
		<pubDate>Sat, 09 Dec 2006 19:00:07 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Firebug]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,5efaf26f-23e5-410c-83c7-8177e09326c1.aspx</guid>
		<description><![CDATA[I noticed that a couple visitors were using the Opera web browser, so I decided to check my site with this highly W3C CSS compliant browser - see the &#8220;Acid2 Test&#8221;.
To my horror, I found my CSS wasn&#8217;t working properly.
My blog in Opera (the CSS rendering issue):

I began debugging my site by starting up Firefox [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed that a couple visitors were using the <a href="http://www.opera.com/">Opera</a> web browser, so I decided to check my site with this highly <a href="http://www.w3.org/Style/CSS/">W3C CSS</a> compliant browser - see the <a href="http://en.wikipedia.org/wiki/Acid2">&#8220;Acid2 Test&#8221;</a>.</p>
<p>To my horror, I found my CSS wasn&#8217;t working properly.</p>
<p>My blog in Opera (the CSS rendering issue):<br />
<img src="http://adam.kahtava.com/journal/images/blog/adam.kahtava.com.opera.error.png" alt="" /></p>
<p>I began debugging my site by starting up <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a> with the <a href="http://www.getfirebug.com/">Firebug</a> extension. Upon inspecting my <a href="http://www.w3.org/DOM/">Document Object Model (DOM)</a> and my rendered CSS I found a syntax error (a bug).</p>
<p>Using the Firebug extension for Firefox to view the DOM and related errors:<br />
<img src="http://adam.kahtava.com/journal/images/blog/adam.kahtava.firebug.error.png" alt="" /></p>
<p><strong>My error;</strong> I had erroneously entered <span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: green;">*/</span> instead ofÂ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: green;">/*</span> for my CSS comment. After making the changes everything rendered as expected in Opera.</p>
<p><strong>Conclusion;</strong> My site now works with Opera 9. As a rule of thumb, I generally do my CSS design in a more W3C CSS compliant browser like Firefox, Opera, etc&#8230; and then make the respective changes for proper display in IE. <a href="http://getfirebug.com/">Firebug</a> is amazing, the best web development tool I have seen in a long time. Firebug really makes debugging a breeze.</p>
<p>Other useful Firefox extensions:</p>
<ul>
<li> <a href="http://www.iosart.com/firefox/colorzilla/">Colorzilla</a> - Advanced Eyedropper, ColorPicker, Page Zoomer and other colorful goodies.</li>
<li> <a href="https://addons.mozilla.org/firefox/1532/">del.icio.us</a> - Keep, share and discover all your favorite things.</li>
<li> <a href="http://fasterfox.mozdev.org/">FasterFox</a> - Performance and network tweaks for Firefox.</li>
<li> <a href="https://addons.mozilla.org/firefox/1843/">FireBug</a> - Edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.</li>
<li> <a href="http://greasemonkey.mozdev.org/">Greasemonkey</a> - Customize the way webpages look and function (hide search engine advertisements, tweak Gmail).</li>
<li> <a href="https://addons.mozilla.org/firefox/39/">Mouse Gestures</a> - Allows you to execute common commands (like page forward/backward, close tab, new tab) by mouse gestures drawn over the current webpage, without reaching for the toolbar or the keyboard.</li>
</ul>
<p>Other useful Internet Explorer extensions / toolbars:</p>
<ul>
<li> <a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en">Internet Explorer Developer Toolbar Beta 3</a> - Tools for quickly creating, understanding, and troubleshooting Web pages</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/12/09/now-supporting-opera-9-and-other-web-development-css-related-notes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Reflection on Themes, Skins, and Cascading Style Sheets (CSS) in ASP.NET 2.0 (Part 1)</title>
		<link>http://adam.kahtava.com/journal/2006/10/29/a-reflection-on-themes-skins-and-cascading-style-sheets-css-in-aspnet-20-part-1/</link>
		<comments>http://adam.kahtava.com/journal/2006/10/29/a-reflection-on-themes-skins-and-cascading-style-sheets-css-in-aspnet-20-part-1/#comments</comments>
		<pubDate>Sun, 29 Oct 2006 16:06:18 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Themes and Skins]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,7febbbfc-c506-45ad-817d-af62ed1645be.aspx</guid>
		<description><![CDATA[While Themes and Skins are new to ASP.NET 2.0, the underlying concepts have been around for a long time. For those unfamiliar with Themes and Skins, skins give web designers greater flexibility to manipulating ASP.NET server side controls (calendars, datagrids, etc&#8230;) through Styles / Cascading Style Sheets (CSS). Themes logically group the design tier of [...]]]></description>
			<content:encoded><![CDATA[<p>While Themes and Skins are new to ASP.NET 2.0, the underlying concepts have been around for a long time. For those unfamiliar with Themes and Skins, skins give web designers greater flexibility to manipulating ASP.NET server side controls (calendars, datagrids, etc&#8230;) through Styles / Cascading Style Sheets (CSS). Themes logically group the design tier of an application into a common folder or directory (a Theme folder(s)), giving developers the ability to programmatically change (swap), or expose these Themes to the user.</p>
<p>Learn more: <a href="http://msdn2.microsoft.com/en-us/library/ykzx33wh.aspx">ASP.NET Themes and Skins Overview</a>.<br />
See a live example here: <a href="http://www.dotnettreats.com/SampleThemes/Default.aspx">ASP.NET 2.0 Colorful Web Site Starter Kit</a>.</p>
<p>The concept of interchanging layout and changing design styles (Themes) has been around for quite some time. The <a href="http://www.w3.org/TR/html401/present/">W3C Recommendation for Style Sheets in HTML documents</a> outlines the &#8220;<a href="http://www.w3.org/TR/html401/present/styles.html#h-14.3.1">alternate stylesheet</a>&#8221; that should be interchanged through the browsers menu; unfortunately Internet Explorer (IE) fails to support this method.</p>
<p>An example: changing style sheets with a Mozilla based browser (<a href="http://www.mozilla.com/en-US/firefox/">Firefox</a>).</p>
<div><img src="http://adam.kahtava.com/journal/images/blog/damowmow.com.bubbles.png" alt="" /><br />
<img src="http://adam.kahtava.com/journal/images/blog/damowmow.com.modern.png" alt="" /></div>
<p>See the live example (if you&#8217;re not using IE) at: <a href="http://www.damowmow.com/indexes/multiple.html">www.damowmow.com</a>.</p>
<p>Other methods for changing design layouts (Themes) range from Client Side Scripts (JavaScript) to Server Side Scripts (ASP, PHP, ASP.NET, and so on).</p>
<p>Learn more about style interchanging scripts and more here: <a href="http://css-discuss.incutio.com/?page=StyleSwitching">Style Switching - css-discuss</a>.</p>
<p>Themes and Skins are a welcome addition to ASP.NET 2.0, they offer a simple solution for grouping design specific files, and a nice way to programmatically change these Themes. However; this simplistic approach significantly hampers the power of Cascading Style Sheets _ I&#8217;ll discuss my difficulties / problems in subsequent posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/10/29/a-reflection-on-themes-skins-and-cascading-style-sheets-css-in-aspnet-20-part-1/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
