<?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>Kyle Schaeffer - Web Design and SharePoint Branding &#187; Tutorials</title>
	<atom:link href="http://kyleschaeffer.com/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://kyleschaeffer.com</link>
	<description>Web Design &#38; SharePoint Branding</description>
	<lastBuildDate>Wed, 01 Feb 2012 23:01:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Plug in to Amazon Web Services (AWS) using PHP</title>
		<link>http://kyleschaeffer.com/tutorials/amazon-web-services-php/</link>
		<comments>http://kyleschaeffer.com/tutorials/amazon-web-services-php/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 17:55:46 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=506</guid>
		<description><![CDATA[I&#8217;ve recently started using Amazon Web Services (AWS) to import large amounts of rich content into my weekend-warrior project, ThumbSticks.com. I have to say that I&#8217;m quite impressed with Amazon&#8217;s dedication to providing their product information in such a transparent &#8230; <a href="http://kyleschaeffer.com/tutorials/amazon-web-services-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started using <a href="http://aws.amazon.com/">Amazon Web Services</a> (AWS) to import large amounts of rich content into my weekend-warrior project, <a href="http://thumbsticks.com">ThumbSticks.com</a>. I have to say that I&#8217;m quite impressed with Amazon&#8217;s dedication to providing their product information in such a transparent and detailed manner. If you&#8217;re not familiar with AWS, here is a quick introduction and some useful code snippets to help you get started with AWS in your PHP environment.<span id="more-506"></span></p>
<h2>What is AWS?</h2>
<p><a href="http://aws.amazon.com/">Amazon Web Services</a> is a set of web services provided by <a href="http://www.amazon.com">Amazon.com</a> free of charge. Basically, you can query Amazon&#8217;s vast database of information to obtain product details, reviews, images, and just about any other information you can imagine related to any product sold at Amazon.com. In this example, we&#8217;re specifically looking at Amazon&#8217;s REST web services, which is data that can be retrieved via a unique URL request to the AWS servers. If your web project involves any product-related data, AWS is definitely worth a look. Enriching your existing pages with information retrieved through AWS can augment the utility of your content, making it more useful for your users, and ultimately more important to everyone. If you&#8217;re the entrepreneurial type, you can also make commission by letting your users click through to Amazon.com in an attempt to sell their products. It&#8217;s win-win for everyone.</p>
<h2>How it Works</h2>
<p>Getting information from AWS is easy. First of all, you&#8217;ll have to set up an AWS account and also sign up for the <a href="https://affiliate-program.amazon.com/">Amazon Associates program</a>. After signing up for these two programs, you should have all the information you need to make a web services request from your application.</p>
<p>In a nutshell, you make a request that includes things like the product type, query type, and keywords that you&#8217;re searching for. All of this information is bundled into a tidy URL structure that allows you to make flexible requests from just about any development platform out there. Once you&#8217;ve made a request, what you get back is an XML document that contains the product information you&#8217;re interested in.</p>
<h2>The Request URL</h2>
<p>Generating a request URL is actually more complex than I thought it would be. There are a number of elements that are required in the URL, and some elements even need to be encrypted and escaped in a very specific order. After digging through some blog posts and AWS documentation, I came up with this very handy PHP function that generates an AWS request URL in a fairly easy and configurable fashion.</p>
<pre>&lt;?
function awsRequest($searchIndex, $keywords, $responseGroup = false, $operation = &quot;ItemSearch&quot;, $pageNumber = 1){
	$service_url = &quot;http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&quot;;
	$associate_tag = &quot;your-associate-tag&quot;;
	$secret_key = &quot;YOUR_SECRET_KEY&quot;;
	$access_key = &quot;YOUR_ACCESS_KEY&quot;;

	// build initial request uri
	$request = &quot;$service_url&amp;Operation=$operation&amp;AssociateTag=$associate_tag&amp;SearchIndex=$searchIndex&amp;Keywords=&quot;.urlencode($keywords).&quot;&amp;ItemPage=$pageNumber&quot;;

	// parse request into params
	$uri_elements = parse_url($request);
	$request = $uri_elements['query'];
	parse_str($request, $parameters);

	// add new params
	$parameters['Timestamp'] = gmdate(&quot;Y-m-d\TH:i:s\Z&quot;);
	$parameters['Version'] = $version;
	$parameters['AWSAccessKeyId'] = $access_key;
	if($responseGroup){
		$parameters['ResponseGroup'] = $responseGroup;
	}
	ksort($parameters);

	// encode params and values
	foreach($parameters as $parameter =&gt; $value){
		$parameter = str_replace(&quot;%7E&quot;, &quot;~&quot;, rawurlencode($parameter));
		$value = str_replace(&quot;%7E&quot;, &quot;~&quot;, rawurlencode($value));
		$request_array[] = $parameter . '=' . $value;
	}
	$new_request = implode('&amp;', $request_array);

	// make it happen
	$signature_string = &quot;GET\n{$uri_elements['host']}\n{$uri_elements['path']}\n{$new_request}&quot;;
	$signature = urlencode(base64_encode(hash_hmac('sha256', $signature_string, $secret_key, true)));

	// return signed request uri
	return &quot;http://{$uri_elements['host']}{$uri_elements['path']}?{$new_request}&amp;Signature={$signature}&quot;;
}
?&gt;</pre>
<h2>What Now?</h2>
<p>Now that you&#8217;ve added this function to your PHP application, you&#8217;re probably wondering, &#8220;What now?&#8221; This PHP function merely generates a signed URL by which you can make requests to the AWS web service. Now that this function is in place, you can actually call the web services like so:</p>
<pre>// make the request
$xml = simplexml_load_file(awsRequest(&quot;VideoGames&quot;, &quot;call of duty&quot;, &quot;Images&quot;, &quot;ItemSearch&quot;, &quot;1&quot;));

// now retrieve some data
$totalPages = $xml-&gt;Items-&gt;TotalPages;
echo &quot;&lt;p&gt;There are $totalPages pages in the XML results.&lt;/p&gt;&quot;;

// retrieve data in a loop
echo &quot;&lt;ul&gt;\n&quot;;
foreach($xml-&gt;Items-&gt;Item as $item){
	echo &quot;&lt;li&gt;&quot;.$item-&gt;ASIN.&quot;&lt;/li&gt;\n&quot;;
}
echo &quot;&lt;/ul&gt;\n&quot;;</pre>
<p>The resulting output should show the total number of pages as well as an unordered list that contains the ASIN (Amazon&#8217;s unique item number) for each product that was returned in our result set. In our request function, we requested image-related data from Amazon&#8217;s <strong>VideoGame</strong> database using the keywords <strong>call of duty</strong>. We also requested results starting at page <strong>1</strong> of the result set.</p>
<h2>Go Deeper</h2>
<p>Not sure where to go from here? I highly recommend utilizing the fantastic (and free) Firefox add-on, <a href="https://addons.mozilla.org/en-US/firefox/addon/6647">HttpFox</a>. If you&#8217;re making AJAX requests through AWS, you can use HttpFox to monitor the entire XML structure sent back. In my experience, the hardest part working with AWS is figuring out what type of information you want and sorting out their very complex XML structure. Be sure to utilize the AWS developer API as well, as it gives you pivotal information regarding query parameters and data set information to help you fine-tune your requests. I&#8217;m currently using the web services to import box art and screenshot images for about 12,000 video games in my database. This process has been made much easier through the use of AWS, and I&#8217;m happy to share my revelations with anyone who&#8217;s interested.</p>
<p>Good luck, and please let me know if this helps you in any way.</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/amazon-web-services-php/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Create a Lightbox with jQuery and CSS</title>
		<link>http://kyleschaeffer.com/tutorials/lightbox-jquery-css/</link>
		<comments>http://kyleschaeffer.com/tutorials/lightbox-jquery-css/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 21:37:05 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=488</guid>
		<description><![CDATA[The &#8220;lightbox&#8221; is a unique and useful design tool when used properly. It allows designers to present information that is totally independent from the site theme, and it is especially useful when displaying information that is loaded via AJAX requests &#8230; <a href="http://kyleschaeffer.com/tutorials/lightbox-jquery-css/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The &#8220;lightbox&#8221; is a unique and useful design tool when used properly. It allows designers to present information that is totally independent from the site theme, and it is especially useful when displaying information that is loaded via AJAX requests (often negating the need for additional post-backs on your pages). There are countless ways to implement lightbox functionality into your site, and almost every option I&#8217;ve ever seen is weighed down by extraneous functionality or useless transition animations. It&#8217;s quite easy to create your own lightboxes with minimal effort. This tutorial can serve as a quick and easy template to get you started.<span id="more-488"></span></p>
<h2>The CSS Style</h2>
<p>There are <em>two</em> elements you&#8217;ll have to implement into your design in order to create a lightbox — CSS and Javascript. We&#8217;ll take care of the CSS style first, as it&#8217;s the most simple to implement. On your page or in an attached style sheet, add the following CSS styles:</p>
<pre>#lightbox {
	position: absolute;
	top: 0;
	left: 50%;
	width: 500px;
	margin-left: -250px;
	background: #fff;
	z-index: 1001;
	display: none;
}
#lightbox-shadow {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: #000;
	filter: alpha(opacity=75);
	-moz-opacity: 0.75;
	-khtml-opacity: 0.75;
	opacity: 0.75;
	z-index: 1000;
	display: none;
}</pre>
<p><strong>What we just did:</strong> we established two styles. One style is for the lightbox that actually appears on the page (<code>#lightbox</code>). The second style is for lightbox background (<code>#lightbox-shadow</code>). We have made this background dark and semi-transparent in order to dim the site&#8217;s content as it appears behind the lightbox.</p>
<h2>The jQuery Script</h2>
<p>The real work is done via our simple jQuery script. We have two JavaScript functions that will handle displaying and hiding our lightbox. First, make sure you have attached the jQuery library to your page:</p>
<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;</pre>
<p>Now, in an attached <code>.js</code> file, add the following script code.</p>
<pre>/****************************************
	Barebones Lightbox Template
	by Kyle Schaeffer
	kyleschaeffer.com
	* requires jQuery
****************************************/

// display the lightbox
function lightbox(insertContent, ajaxContentUrl){

	// add lightbox/shadow &lt;div/&gt;'s if not previously added
	if($('#lightbox').size() == 0){
		var theLightbox = $('&lt;div id=&quot;lightbox&quot;/&gt;');
		var theShadow = $('&lt;div id=&quot;lightbox-shadow&quot;/&gt;');
		$(theShadow).click(function(e){
			closeLightbox();
		});
		$('body').append(theShadow);
		$('body').append(theLightbox);
	}

	// remove any previously added content
	$('#lightbox').empty();

	// insert HTML content
	if(insertContent != null){
		$('#lightbox').append(insertContent);
	}

	// insert AJAX content
	if(ajaxContentUrl != null){
		// temporarily add a &quot;Loading...&quot; message in the lightbox
		$('#lightbox').append('&lt;p class=&quot;loading&quot;&gt;Loading...&lt;/p&gt;');

		// request AJAX content
		$.ajax({
			type: 'GET',
			url: ajaxContentUrl,
			success:function(data){
				// remove &quot;Loading...&quot; message and append AJAX content
				$('#lightbox').empty();
				$('#lightbox').append(data);
			},
			error:function(){
				alert('AJAX Failure!');
			}
		});
	}

	// move the lightbox to the current window top + 100px
	$('#lightbox').css('top', $(window).scrollTop() + 100 + 'px');

	// display the lightbox
	$('#lightbox').show();
	$('#lightbox-shadow').show();

}

// close the lightbox
function closeLightbox(){

	// hide lightbox and shadow &lt;div/&gt;'s
	$('#lightbox').hide();
	$('#lightbox-shadow').hide();

	// remove contents of lightbox in case a video or other content is actively playing
	$('#lightbox').empty();
}</pre>
<link rel="stylesheet" type="text/css" href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2010/03/lightbox.css" />
<style type="text/css">#lightbox-shadow { position: fixed; } #lightbox { font-size: 2em; padding: 20px; margin-left: -270px; }</style>
<p><script type="text/javascript" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2010/03/lightbox.js"></script><br />
<h2>Ready for Lightboxing</h2>
<p>Once you have the CSS and script into place, you can call your new <code>lightbox();</code> function from anywhere within your design. It&#8217;s as easy as calling the lightbox from an <code>anchor</code> tag:</p>
<pre>&lt;a href=&quot;javascript:lightbox('Hello!');&quot;&gt;Show me the lightbox&lt;/a&gt;</pre>
<p>Remember, clicking anywhere on the &#8220;shadow&#8221; <code>&lt;div/&gt;</code> will hide the lightbox &mdash; you could easily add a &#8220;close&#8221; button to your lightbox by connecting it to the <code>closeLightbox();</code> JavaScript function.</p>
<p>Similarly, you can insert HTML (or even a jQuery DOM object) into the lightbox. Like so:</p>
<pre>&lt;a href=&quot;javascript:lightbox('&lt;p&gt;&lt;strong&gt;Rich&lt;/strong&gt; content works too!&lt;/p&gt;');&quot;&gt;Show me the lightbox&lt;/a&gt;</pre>
<p>Finally, you can even use this simple lightbox function to insert AJAX content. Please keep in mind that my JavaScript function simply inserts the entire result into the <code>#lightbox</code> element &mdash; if you&#8217;re trying to request a website or HTML page, you&#8217;ll probably have to remove the <code>&lt;html/&gt;</code> and <code>&lt;body/&gt;</code> tags before inserting content into your lightbox window, else the lightbox would simply disappear. An AJAX lightbox request looks a little like this:</p>
<pre>&lt;a href=&quot;javascript:lightbox(null, 'http://foo.com/readme.txt');&quot;&gt;Show me the lightbox&lt;/a&gt;</pre>
<h2>The Demo</h2>
<ul>
<li><strong>Try it out:</strong> <a href="javascript:lightbox('How elegantly simple! This is a barebones lightbox if I ever saw one. Click on the dark shaded background to close the lightbox.');">Show me the lightbox</a></li>
<li><strong>Let&#8217;s load some AJAX content:</strong> <a href="javascript:lightbox(null, 'http://kyleschaeffer.com/wordpress/wp-content/uploads/2010/03/lightbox.css');">Load the CSS file for this tutorial into a lightbox</a></li>
</ul>
<p>If you&#8217;re on a fast connection, you may not notice, but the AJAX link actually reads &#8220;Loading&#8230;&#8221; in the lightbox a split-second before the content actually appears.  This can be useful to give users feedback while the AJAX request is processing. Please note that I&#8217;ve added a bit of styling to my demo (namely padding on the lightbox to make it appear less cluttered).</p>
<h2>Make it Shine</h2>
<p>You&#8217;ll probably want to modify the CSS and other elements of this lightbox in order to suit your site&#8217;s design and style. If you&#8217;re working with a lot of AJAX content, you may want to even replace the temporary <code>loading</code> element with an animated spinner image, or something of the like.</p>
<p>To help you get started, you can download the CSS and JavaScript referenced in this tutorial here:</p>
<ul>
<li><a href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2010/03/lightbox.css">lightbox.css</a></li>
<li><a href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2010/03/lightbox.js">lightbox.js</a></li>
</ul>
<p>Good luck, and happy styling!</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/lightbox-jquery-css/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>IE Corner Inserts via jQuery</title>
		<link>http://kyleschaeffer.com/tutorials/ie-corner-inserts-via-jquery/</link>
		<comments>http://kyleschaeffer.com/tutorials/ie-corner-inserts-via-jquery/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:51:43 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Corners]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=422</guid>
		<description><![CDATA[I recently had a client whose design demanded rounded corners in a lot of different areas of their site. As I looked through the design documentation, the variety and color of these rounded widgets really started to add up. I &#8230; <a href="http://kyleschaeffer.com/tutorials/ie-corner-inserts-via-jquery/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently had a client whose design demanded rounded corners in a lot of different areas of their site. As I looked through the design documentation, the variety and color of these rounded widgets really started to add up. I quickly decided that <a href="http://www.kyleschaeffer.com/best-practices/rounded-corners-in-mozilla-and-safari/">pure CSS corners</a> were the best choice for their design. Most users can utilize <code>border-radius</code> to apply the rounded effect without any overhead (the browser does the work), and the remaining users can be handled by a quick and easy bit of jQuery.<span id="more-422"></span></p>
<h2>For the (better) browsers&#8230;</h2>
<p>It&#8217;s easy to add corners to your design in most browsers. In a previous post, I talked about the different ways to apply CSS corners within your design. Here&#8217;s what I used for this particular client.</p>
<div id="the-css">
<pre>.corners {
	-moz-border-radius: 12px;
	-webkit-border-radius: 12px;
}
.noTL {
	-moz-border-radius-topleft: 0;
	-webkit-border-top-left-radius: 0;
}
.noTR {
	-moz-border-radius-topright: 0;
	-webkit-border-top-right-radius: 0;
}
.noBL {
	-moz-border-radius-bottomleft: 0;
	-webkit-border-bottom-left-radius: 0;
}
.noBR {
	-moz-border-radius-bottomright: 0;
	-webkit-border-bottom-right-radius: 0;
}</pre>
</div>
<p>This made it extremely easy to add corners to the elements in my design. In most cases, I could simply add <code>&lt;div class=&quot;myDivClass <strong>corners</strong>&quot;/&gt;</code>, and the CSS does the rest. If I don&#8217;t want a rounded edge on a particular corner, I can just add <code>noTR</code>, <code>noBL</code>, etc. to my class list. Easy.</p>
<h2>For the other (not-so-better) browser&#8230;</h2>
<p><strong>Disclaimer:</strong> this really doesn&#8217;t do anything entirely too amazing. It&#8217;s not auto-magically generating corner images, and it&#8217;s not inserting a ton of HTML to simulate corner images (I just hate when scripts do that). This is a script I have been using for a while to add corners for IE users; basically, it builds a custom image path for each style of widget in your design marked with the <code>corners</code> CSS class. For each corners widget that my script finds, it will trace up through your HTML until it finds a parent element with a <code>background-color</code>. It then creates four <code>&lt;div/&gt;</code> tags inside your widget and positions them at the outer corners of the widget. The background-image for these <code>&lt;div/&gt;</code> tags is set to something like <strong>corners-12-ffffff.png</strong> or <strong>corners-12-ffaa10-border</strong> (if your widget has a border-width associated with it). The <code>12</code> is the radius of your corner, and <code>ffffff</code> is the background color that appears behind your widget. You&#8217;ll have to create the images yourself (and put them in the right place), but my script will handle inserting the HTML and CSS in the right place. If you create the images <a href="http://www.kyleschaeffer.com/best-practices/reusable-transparent-css-rounded-corners/">a little like this</a>, then you&#8217;ll find that your IE corners will be in place in no time at all.</p>
<p>It&#8217;s certainly not ground-breaking stuff, but it makes it very easy to reduce the overhead in your design for most users. In addition, the script is fairly small, and you&#8217;ll find it&#8217;s really not much overhead for IE users as well. Here&#8217;s how to add it to your site:</p>
<ol>
<li>You&#8217;ll need <a href="http://jquery.com/">jQuery 1.3.2</a> or later linked to your page</li>
<li>Add the <a href="#the-css">CSS (above)</a> to your style sheet. This takes care of everyone except for IE.</li>
<li>Create a new JavaScript file with the following contents:
<pre>/*******************************************

	IE Corner Inserts v1.0

	by Kyle Schaeffer

http://www.kyleschaeffer.com

	* requires jQuery 1.3.2 or later

*******************************************/

// change this path to match the path to your corner image files
var cornerImagePathPrefix = '/designImages/';

// default file extension for corner images is PNG
var cornerImageFileExtension = '.png';

// default corner radius
var cornerRadius = '12';

$(document).ready(function(){
	$('.corners').each(function(i){
		var parentDiv = $(this).parent();
		var cornerColor = null;

		// find parent background color (trace up through DOM)
		while(cornerColor == null &amp;&amp; parentDiv != null){
			if($(parentDiv).css('background-color') != 'transparent'){
				cornerColor = $(parentDiv).css('background-color');
				cornerColor = cornerColor.substr(1);
			}
			else if($(parentDiv).hasClass('bodyWrapper')){
				cornerColor = '6f98ae';
			}
			else{
				parentDiv = $(parentDiv).parent().get(0);
			}
		}

		// apply corner &lt;div/&gt; tags to elements
		if(cornerColor != null){
			// find border offsets
			var offsetTop = parseInt($(this).css('border-top-width')) || 0;
			var offsetRight = parseInt($(this).css('border-right-width')) || 0;
			var offsetBottom = parseInt($(this).css('border-bottom-width')) || 0;
			var offsetLeft = parseInt($(this).css('border-left-width')) || 0;

			// add &quot;-border&quot; to any image path (for border-only corners)
			var borderImageText = '';
			if(offsetTop &gt; 0 &amp;&amp; offsetRight &gt; 0 &amp;&amp; offsetBottom &gt; 0 &amp;&amp; offsetLeft &gt; 0){
				borderImageText = '-border';
			}

			// change color values like &quot;#fff&quot; to &quot;#ffffff&quot;
			if(cornerColor.length == 3){
				cornerColor += cornerColor;
			}

			// set position to relative (if not already set)
			if($(this).css('position') != 'absolute' &amp;&amp; $(this).css('position') != 'relative'){
				$(this).css('position','relative');
			}

			// corner image filename
			var cornerImage = 'corners-' + cornerRadius + '-' + cornerColor + borderImageText + cornerImageFileExtension;

			// add corners
			if(!$(this).hasClass('noTL')){
				var cornerDiv = $('&lt;div style=&quot;position: absolute; height: ' + cornerRadius + 'px; width: ' + cornerRadius + 'px; background: url(' + cornerImagePathPrefix + cornerImage + ') top left no-repeat;&quot;/&gt;');
				$(cornerDiv).css('top',(offsetTop * -1) + 'px');
				$(cornerDiv).css('left',(offsetLeft * -1) + 'px');
				$(this).append(cornerDiv);
			}
			if(!$(this).hasClass('noTR')){
				var cornerDiv = $('&lt;div style=&quot;position: absolute; height: ' + cornerRadius + 'px; width: ' + cornerRadius + 'px; background: url(' + cornerImagePathPrefix + cornerImage + ') top right no-repeat;&quot;/&gt;');
				$(cornerDiv).css('top',(offsetTop * -1) + 'px');
				$(cornerDiv).css('right',(offsetRight * -1) + 'px');
				$(this).append(cornerDiv);
			}
			if(!$(this).hasClass('noBL')){
				var cornerDiv = $('&lt;div style=&quot;position: absolute; height: ' + cornerRadius + 'px; width: ' + cornerRadius + 'px; background: url(' + cornerImagePathPrefix + cornerImage + ') bottom left no-repeat;&quot;/&gt;');
				$(cornerDiv).css('bottom',(offsetBottom * -1) + 'px');
				$(cornerDiv).css('left',(offsetLeft * -1) + 'px');
				$(this).append(cornerDiv);
			}
			if(!$(this).hasClass('noBR')){
				var cornerDiv = $('&lt;div style=&quot;position: absolute; height: ' + cornerRadius + 'px; width: ' + cornerRadius + 'px; background: url(' + cornerImagePathPrefix + cornerImage + ') bottom right no-repeat;&quot;/&gt;');
				$(cornerDiv).css('bottom',(offsetBottom * -1) + 'px');
				$(cornerDiv).css('right',(offsetRight * -1) + 'px');
				$(this).append(cornerDiv);
			}
		}
	});
});

String.prototype.endsWith = function(str){
	return(this.match(str+&quot;$&quot;)==str);
}</pre>
</li>
<li>Take a look at the configuration variables near the top of the script and update if needed</li>
<li>Link to your new JS file, but make sure only IE users are loading the file:
<pre>&lt;!--[if lte IE 8]&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;/path/to/IE-Corner-Inserts.js&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt;</pre>
</li>
<li>Create your corner images and place them in the correct path on your web server. I recently made available <a href="http://www.kyleschaeffer.com/best-practices/reusable-transparent-css-rounded-corners/">a corner images Photoshop template</a> if you need help getting started.</li>
</ol>
<p>That&#8217;s it! If all goes well, you should hopefully see image-based rounded corners in Internet Explorer, as well as the more simplistic CSS-powered corners in all other browsers.</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/ie-corner-inserts-via-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>A Very Simple CSS Chat Bubble</title>
		<link>http://kyleschaeffer.com/tutorials/a-very-simple-css-chat-bubble/</link>
		<comments>http://kyleschaeffer.com/tutorials/a-very-simple-css-chat-bubble/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 13:38:19 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=293</guid>
		<description><![CDATA[Each time you implement a new design element into your site, there are a vast array of approaches you can take to achieve the same outcome. Often times, I feel that the most simple of solutions is the best one. &#8230; <a href="http://kyleschaeffer.com/tutorials/a-very-simple-css-chat-bubble/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Each time you implement a new design element into your site, there are a vast array of approaches you can take to achieve the same outcome. Often times, I feel that the <a href="http://www.kyleschaeffer.com/best-practices/the-wisdom-of-simplicity/">most simple of solutions</a> is the best one. When implementing the &#8220;user comments&#8221; feature into <a href="http://thumbsticks.com">ThumbSticks.com</a>, I decided to wrap each user comment in a sort of &#8220;chat bubble box,&#8221; much like you would see in a comic book story. I experimented with various solutions that gave me different amounts of flexibility and performance, but I eventually settled on a very simple solution that resulted in what I think is an elegant CSS chat bubble.<span id="more-293"></span></p>
<h2>The Idea</h2>
<p>First of all, I will say that <strong>this approach only really works if you know the maximum size of your comment data</strong>. On ThumbSticks.com, for instance, users can&#8217;t enter comments that are over 300 characters in length, so I have a good idea of how large each comment box could possibly get. Rather than splicing my comment box into multiple images (which is more flexible, but decreases page performance and increases download times), I decided to create a single image that is used to wrap each comment chat bubble:</p>
<h3>The Image</h3>
<p><img src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2009/09/commentBg.png" alt="Comment Chat Bubble" width="477" height="300" /></p>
<p>Basically, my chat bubble boxes can shrink to any size, but they can&#8217;t grow beyond the height of this image. If you know exactly how large your data can get, this is a really simple solution to implement. All that I need to show my chat bubbles is a bit of HTML and CSS.</p>
<h2>The Nitty-Gritty</h2>
<h3>HTML:</h3>
<pre>&lt;div class=&quot;bubble&quot;&gt;
	&lt;div class=&quot;bubbleHeader&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;bubbleInner&quot;&gt;
		&lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;</pre>
<h3>CSS:</h3>
<pre>.bubble {
	width: 477px;
	background: url('/path/to/commentBg.png') no-repeat;
	background-position: 100% 100%;
}
.bubbleHeader {
	height: 20px;
	background: url('/path/to/commentBg.png') no-repeat;
	background-position: 100% 0;
}
.bubbleInner {
	padding: 0 20px 10px 37px;
}</pre>
<p>Make sure you change &#8220;/path/to/comment.Bg.png&#8221; to reflect the actual path to the background image you&#8217;re using. Once you&#8217;ve dropped this into your design, you should see something that <a href="http://thumbsticks.com/games/xbox-360/call-of-duty-world-at-war">looks a little like this</a>.</p>
<p>Good luck, and happy styling!</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/a-very-simple-css-chat-bubble/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CSS Absolute Positioning</title>
		<link>http://kyleschaeffer.com/best-practices/css-absolute-positioning/</link>
		<comments>http://kyleschaeffer.com/best-practices/css-absolute-positioning/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 15:56:36 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Positioning]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=201</guid>
		<description><![CDATA[Absolute positioning is a very powerful CSS technique when used properly. Traditionally, when you use &#60;div/&#62; tags and the like, everything in your page design is generally stacked from top to bottom. Using absolute positioning gives you the freedom to &#8230; <a href="http://kyleschaeffer.com/best-practices/css-absolute-positioning/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Absolute positioning is a very powerful CSS technique when used properly.  Traditionally, when you use <code>&lt;div/&gt;</code> tags and the like, everything in your page design is generally stacked from top to bottom.  Using absolute positioning gives you the freedom to place elements of your page just about anywhere you&#8217;d like.  Here are some fundamentals of absolute positioning that can make your design appear more fluid, elegant, and easier to manage.<span id="more-201"></span></p>
<h2>What is absolute positioning?</h2>
<p>Absolute positioning can be frustrating if you don&#8217;t have a sound grasp on what it is and how it works.  Let&#8217;s start at the very beginning.</p>
<p>Every block element on a page (<code>&lt;div/&gt;</code>, <code>&lt;table/&gt;</code>, <code>&lt;p/&gt;</code>, etc.) has a CSS property called <code>position</code>.  By default, the <code>position</code> for these block elements is set to <code>static</code>.  Static block elements appear in a stack on the page, from top to bottom.  Here&#8217;s an example:</p>
<pre>&lt;div&gt;Div One&lt;/div&gt;
&lt;div&gt;Div Two&lt;/div&gt;
&lt;div&gt;Div Three&lt;/div&gt;</pre>
<div style="background: #f0f0f0; padding: 1em; border: 1px #e0e0e0 solid; margin: 0 0 1.5em 0;">
<div style="background: #8abb66; padding: 0.5em;">Div One</div>
<div style="background: #d88541; padding: 0.5em;">Div Two</div>
<div style="background: #419dd8; padding: 0.5em;">Div Three</div>
</div>
<p>If you change an element&#8217;s position to <code>absolute</code>, however, its placement on the page is very different.  The placement for an absolutely positioned element is relative to the parent of that element.  What does that mean?  Let&#8217;s see what happens if we take the same code from our last example and make our block elements position: absolute.</p>
<pre>&lt;div style=&quot;position: absolute;&quot;&gt;Div One&lt;/div&gt;
&lt;div style=&quot;position: absolute;&quot;&gt;Div Two&lt;/div&gt;
&lt;div style=&quot;position: absolute;&quot;&gt;Div Three&lt;/div&gt;</pre>
<div style="position: relative; background: #f0f0f0; height: 2em; padding: 1em; border: 1px #e0e0e0 solid; margin: 0 0 1.5em 0;">
<div style="position: absolute; background: #8abb66; padding: 0.5em;">Div One</div>
<div style="position: absolute; background: #d88541; padding: 0.5em;">Div Two</div>
<div style="position: absolute; background: #419dd8; padding: 0.5em;">Div Three</div>
</div>
<p>The outcome is very different!  You can&#8217;t tell, but the first and second <code>&lt;div/&gt;</code> tags are actually hiding behind the third <code>&lt;div/&gt;</code> tag.  Whenever you set an element&#8217;s position to absolute, it is automatically shown at the top-left corner of the parent element <small>(* see notes about relativity below)</small>.  This isn&#8217;t very useful now, but we can apply this technique to create a variety of simple and effective layout styles.</p>
<h2>Positioning</h2>
<p>Our last example wasn&#8217;t very practical simply because all of our <code>&lt;div/&gt;</code> tags were stacked on top of each other.  Using the <code>top</code>, <code>bottom</code>, <code>left</code>, and <code>right</code> properties, we can position absolute elements anywhere we&#8217;d like.  Let&#8217;s try it out.</p>
<pre>&lt;div style=&quot;position: absolute; top: 10px; left: 10px;&quot;&gt;Div One&lt;/div&gt;
&lt;div style=&quot;position: absolute; top: 10px; right: 10px;&quot;&gt;Div Two&lt;/div&gt;
&lt;div style=&quot;position: absolute; bottom: 1em; left: 50%;&quot;&gt;Div Three&lt;/div&gt;</pre>
<div style="position: relative; background: #f0f0f0; height: 4em; padding: 1em; border: 1px #e0e0e0 solid; margin: 0 0 1.5em 0;">
<div style="position: absolute; top: 10px; left: 10px; background: #8abb66; padding: 0.5em;">Div One</div>
<div style="position: absolute; top: 10px; right: 10px; background: #d88541; padding: 0.5em;">Div Two</div>
<div style="position: absolute; bottom: 1em; left: 50%; background: #419dd8; padding: 0.5em;">Div Three</div>
</div>
<p>Now that&#8217;s a little more practical.  The first and second <code>&lt;div/&gt;</code> tags are positioned using pixels from the top, left, and right sides of their parent element (the gray box).  I positioned the third <code>&lt;div/&gt;</code> tag a little differently just to demonstrate how you can use all the different measurement units that CSS has to offer in order to position absolute elements (<abbr title="pixel">px</abbr>, <abbr title="point">pt</abbr>, em, and <abbr title="percent">%</abbr>).</p>
<h2>Relativity</h2>
<p><strong>The most difficult and confusing aspect of absolutely positioned elements is figuring out relative positioning.</strong>  Unless you specify otherwise, your absolute <code>&lt;div/&gt;</code> tags will be positioned relative to your entire HTML document (i.e. the very top left corner of your browser window).  Basically, when your browser is trying to render an absolutely positioned element, it traces upward through your HTML hierarchy until it finds a parent element that uses relative positioning (<code>position: relative</code>).  If you haven&#8217;t set any elements to <code>position: relative</code>, then the <code>&lt;body&gt;</code> tag is used by default.  Always set the outer element to <code>position: relative</code>:</p>
<pre>&lt;div style=&quot;<strong>position: relative;</strong>&quot;&gt;
	&lt;div style=&quot;position: absolute; top: 1em; right: 1em;&quot;&gt;Contact Us / Register / Log Out&lt;/div&gt;
&lt;/div&gt;</pre>
<div style="position: relative; background: #f0f0f0; height: 4em; padding: 1em; border: 1px #e0e0e0 solid; margin: 0 0 1.5em 0;">
<div style="position: absolute; top: 1em; right: 1em; background: #419dd8; padding: 0.5em;">Contact Us / Register / Log Out</div>
</div>
<h2>Relative Parent Height</h2>
<p>If you place an absolutely positioned element on a page, it does not have a layout height associated with it.  That means that even though your absolute DIV is 150 pixels tall, it will <em>not</em> bump the rest of your page down by 150 pixels.  Here&#8217;s an example:</p>
<pre>&lt;div style=&quot;position: relative;&quot;&gt;
	&lt;div style=&quot;position: absolute; height: 2em;&quot;&gt;Div One&lt;/div&gt;
&lt;/div&gt;</pre>
<div style="position: relative; background: #f0f0f0; padding: 1em; border: 1px #e0e0e0 solid; margin: 0 0 2.5em 0;">
<div style="position: absolute; background: #8abb66; padding: 0.5em; height: 2em;">Div One</div>
</div>
<p>The easiest way to avoid this is to set the <em>parent element&#8217;s</em> height to a fixed value.  This should clear up any layout height issues because you&#8217;ll always have space for your absolute elements.  For instance:</p>
<pre>&lt;div style=&quot;position: relative; <strong>height: 3em;</strong>&quot;&gt;
	&lt;div style=&quot;position: absolute; height: 2em;&quot;&gt;Div One&lt;/div&gt;
&lt;/div&gt;</pre>
<div style="position: relative; background: #f0f0f0; padding: 1em; height: 3em; border: 1px #e0e0e0 solid; margin: 0 0 2.5em 0;">
<div style="position: absolute; background: #8abb66; padding: 0.5em; height: 2em;">Div One</div>
</div>
<h2>Absolute vs. Floating</h2>
<p>Absolute positioning shouldn&#8217;t be used in every case.  Often times, I will use it to build out a header on a page where there is a logo, search, some utility links, etc.  These types of controls are pretty consistent and don&#8217;t change in size, and absolute positioning comes in quite handy.  There are, however, some disadvantages to using absolute positioning.  Most importantly, absolutely positioned elements don&#8217;t appears as part of the normal layout flow in your document.  They have a fixed position, which often confines them to a fixed width or height.  If you can&#8217;t predict the size or consistency of the content in a particular page element (for instance, a <em>page content</em> area where article text appears), then absolute positioning is probably not the best option.</p>
<p>As an alternative, you can use CSS floating to create very fluid and flexible layouts without absolute positioning.  See my previous article about <a href="http://www.kyleschaeffer.com/best-practices/all-about-tableless-column-design/">tableless column design</a> to learn more about floating elements in your design.</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/best-practices/css-absolute-positioning/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Pure CSS Image Hover</title>
		<link>http://kyleschaeffer.com/best-practices/pure-css-image-hover/</link>
		<comments>http://kyleschaeffer.com/best-practices/pure-css-image-hover/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 14:14:17 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[Images]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=142</guid>
		<description><![CDATA[Many site designs will feature varying types of image &#8220;hover&#8221; states, where an image or background image changes when you move your mouse cursor into that area of the page. Traditionally, this change in image is handled via JavaScript. It&#8217;s &#8230; <a href="http://kyleschaeffer.com/best-practices/pure-css-image-hover/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many site designs will feature varying types of image &#8220;hover&#8221; states, where an image or background image changes when you move your mouse cursor into that area of the page. Traditionally, this change in image is handled via JavaScript. It&#8217;s fairly easy to write a small script that swaps out images on mouseover, but there are a number of disadvantages to this approach that have pushed many web developers toward using a CSS-only method of achieving this exact same effect. This tutorial describes exactly how to implement a pure CSS image hover effect.<span id="more-142"></span></p>
<h2>The Image</h2>
<p>The biggest difference between a traditional JavaScript image hover and a pure CSS image hover is the image, itself. When using CSS to achieve this effect, the static image and the hover image are actually contained within the same image file. Basically, we&#8217;re displaying the image and cropping it so that only one image state is displayed at one time. In order to do this, we&#8217;ll omit the <code>&lt;img&gt;</code> tag and display the image as a the background-image of an <code>&lt;a/&gt;</code> (anchor) tag instead.</p>
<p>Let&#8217;s look at an image that could be used as a CSS hover image.</p>
<p style="text-align: center;"><img title="Both image states are contained within the same image." src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2009/01/buttonleafhover.png" alt="Hover image" width="100" height="200" /></p>
<h2>Simplistic Markup</h2>
<p>As you can see, both static and hover images are contained within the same file.  In order to display only half of the image at one time, we&#8217;ll apply it as a background color to an HTML block element.  Here is the HTML for this example:</p>
<pre>&lt;a class=&quot;myButtonLink&quot; href=&quot;#LinkURL&quot;&gt;Leaf&lt;/a&gt;</pre>
<h2>The CSS</h2>
<p>As you can see, the HTML is extremely simple.  We&#8217;re doing everything in CSS, so this is where the real magic happens:</p>
<pre>.myButtonLink {
	display: block;
	width: 100px;
	height: 100px;
	background: url('/path/to/myImage.png') bottom;
	text-indent: -99999px;
}
.myButtonLink:hover {
	background-position: 0 0;
}</pre>
<p>We&#8217;re using the CSS psuedo-element <code>hover</code> to apply the mouseover image effect.  When your mouse pointer moves over the &#8220;myButtonLink&#8221; element, our CSS slides the background image (using the <code>background-position</code> property) appropriately, giving us our mouseover image.  This is simple, fast, and efficient!  You&#8217;ll use less files and space on your server, clients will have to download less data, and older computers will render your content much faster.</p>
<h2>The Result</h2>
<p>Move your mouse over the image to see the hover in action.</p>
<style type="text/css">.myButtonLink { display: block; width: 100px; height: 100px; margin: 1em auto; background: url('http://kyleschaeffer.com/wordpress/wp-content/uploads/2009/01/buttonleafhover.png') bottom; text-indent: -99999px; }
.myButtonLink:hover { background-position: 0 0; background-color: transparent; border-style: none; }</style>
<p><a class="myButtonLink" href="javascript:alert('Accessible design is good design.\n~Steve Ballmer');">Leaf</a></p>
<p>And there you have it, a pure CSS approach to image hovers. You can apply this method to links, <code>&lt;div/&gt;</code> tags, and just about anything else you can imagine in your site&#8217;s design. Happy styling!</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/best-practices/pure-css-image-hover/feed/</wfw:commentRss>
		<slash:comments>176</slash:comments>
		</item>
		<item>
		<title>Create a DHTML Tab Strip</title>
		<link>http://kyleschaeffer.com/tutorials/create-a-dhtml-tab-strip/</link>
		<comments>http://kyleschaeffer.com/tutorials/create-a-dhtml-tab-strip/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 18:18:23 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Controls]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tabs]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=107</guid>
		<description><![CDATA[Tab strips are commonplace throughout the web, and they&#8217;re utilized in a wide variety of ways, such as in site navigation or form wizards. Organizing links in a tabbed format can add quite a bit of style and functionality to &#8230; <a href="http://kyleschaeffer.com/tutorials/create-a-dhtml-tab-strip/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tab strips are commonplace throughout the web, and they&#8217;re utilized in a wide variety of ways, such as in site navigation or form wizards.  Organizing links in a tabbed format can add quite a bit of style and functionality to your site, as many visitors are already familiar and comfortable with using tabs on other websites and even on other platforms such as their operating system.  This tutorial shows you how to create a simple DHTML tab strip using HTML, CSS, and a small bit of JavaScript.<span id="more-107"></span></p>
<p>When I use the term &#8220;DHTML,&#8221; I am referring to &#8220;Dynamic HTML.&#8221;  This is an endearing term that many web designers use to describe the fusion of HTML with other web technologies, such as JavaScript and CSS.  By using various technologies in tandem, we can create dynamic controls that allow website visitors to interact with content directly on the page without the need to refresh the site with every subsequent click.</p>
<h2>The HTML</h2>
<p>As you will soon see, the tab strip is a prime example of a DHTML control.  Before we delve into every aspect of the tab strip, let&#8217;s first start with the HTML:</p>
<pre>&lt;div class=&quot;tabStrip&quot;&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;javascript:openTab(1);&quot; class=&quot;tabLinkActive&quot; id=&quot;tabLink1&quot;&gt;TabOne&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;javascript:openTab(2);&quot; class=&quot;tabLink&quot; id=&quot;tabLink2&quot;&gt;TabTwo&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;javascript:openTab(3);&quot; class=&quot;tabLink&quot; id=&quot;tabLink3&quot;&gt;TabThree&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;tabContentActive&quot; id=&quot;tabContent1&quot;&gt;
	This is sample tab content (1).
&lt;/div&gt;
&lt;div class=&quot;tabContent&quot; id=&quot;tabContent2&quot;&gt;
	This is sample tab content (2).
&lt;/div&gt;
&lt;div class=&quot;tabContent&quot; id=&quot;tabContent3&quot;&gt;
	This is sample tab content (3).
&lt;/div&gt;</pre>
<p>The HTML is relatively simple. We are using an unordered list (<code>&lt;ul/&gt;</code>) for our tabs, and we are using <code>&lt;div/&gt;</code> tags for our tab content. As you can see, I am giving a unique <code>id</code> attribute to each tab link and to each tab content <code>&lt;div/&gt;</code>.  This is important, as we&#8217;ll need unique <code>id</code>&#8216;s in order to access these elements with JavaScript.</p>
<h2>The JavaScript</h2>
<p>We are using only one small JavaScript function for the tab control.  Here is the code:</p>
<pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
	var activeTab = 1;
	function openTab(tabId) {
		// reset old tab and content
		document.getElementById(&quot;tabLink&quot;+activeTab).className = &quot;tabLink&quot;;
		document.getElementById(&quot;tabContent&quot;+activeTab).className = &quot;tabContent&quot;;
		// set new tab and content
		document.getElementById(&quot;tabLink&quot;+tabId).className = &quot;tabLinkActive&quot;;
		document.getElementById(&quot;tabContent&quot;+tabId).className = &quot;tabContentActive&quot;;
		activeTab = tabId;
	}
&lt;/script&gt;</pre>
<h2>The CSS:</h2>
<p>This CSS is a very basic example of what you can do to style your tabs. You can add colors, gradients, and background images to give the control even more design flare.</p>
<pre>.tabStrip ul {
	margin: 0;
	padding: 0;
	list-style-type: none;
}
.tabStrip li {
	margin: 0 2px 0 0;
	list-style-type: none;
	float: left;
}
.tabLink {
	display: block;
	text-decoration: none;
	padding: 5px;
	background: #e8e8e8;
	border: #dadada solid;
	border-width: 1px 1px 0 1px;
	color: #8a8a8a;
}
.tabLinkActive {
	display: block;
	text-decoration: none;
	padding: 5px;
	background: #e0e0e0;
	border: #c0c0c0 solid;
	border-width: 1px 1px 0 1px;
	color: #0066ff;
}
.tabContent {
	display: none;
}
.tabContentActive {
	display: block;
	clear: both;
	background: #f0f0f0;
	border: 1px #dedede solid;
	padding: 10px;
}</pre>
<h2>The Result:</h2>
<p>In true DHTML fashion, we have combined HTML, JavaScript, and CSS to create a fully dynamic user control that can appear anywhere on the web. I have taken the fundamentals learned in this tutorial and have created a more visually appealing example of this code.  Click on the image below to see the demo.</p>
<p><a href="http://www.kyleschaeffer.com/tabstrip/"><img src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/11/tabs.jpg" alt="Tab Strip Demo" /></a></p>
<p>Note that the demo also utilizes Karate Corners to create rounded edges on the tabs.  <a href="http://www.kyleschaeffer.com/tutorials/karate-corners-easy-rounded-corners-xhtml-no-script/">Learn more about Karate corners here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/create-a-dhtml-tab-strip/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Navigation Using Unordered Lists</title>
		<link>http://kyleschaeffer.com/tutorials/navigation-using-unordered-lists/</link>
		<comments>http://kyleschaeffer.com/tutorials/navigation-using-unordered-lists/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 21:21:07 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=74</guid>
		<description><![CDATA[An unordered list (the &#60;ul/&#62; tag in HTML) is a great way to easily organize your site navigation with a minimal use of HTML, but how is it done? This is a simple tutorial showing you exactly how to create &#8230; <a href="http://kyleschaeffer.com/tutorials/navigation-using-unordered-lists/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>An unordered list (the <code>&lt;ul/&gt;</code> tag in HTML) is a great way to easily organize your site navigation with a minimal use of HTML, but how is it done?  This is a simple tutorial showing you exactly how to create a simple list-based navigation menu in your site.<span id="more-74"></span></p>
<h2>Vertical Menus</h2>
<p>Vertical menus are the easiest list-based menus to create; basically all you have to do is hide the bullets and padding for your list using CSS.  In the example below, we have a very simple two-level vertical navigation menu.</p>
<h3>The HTML:</h3>
<pre>&lt;ul class=&quot;navigation&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.google.com&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.yahoo.com&quot;&gt;Yahoo!&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.yahoo.com/shopping&quot;&gt;Yahoo! Shopping&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.yahoo.com/sports&quot;&gt;Yahoo! Sports&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.yahoo.com/weather&quot;&gt;Yahoo! Weather&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.amazon.com&quot;&gt;Amazon&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.ebay.com&quot;&gt;eBay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<h3>The CSS:</h3>
<pre>ul.navigation,
ul.navigation ul {
	margin: 0;
}
ul.navigation li {
	list-style-type: none;
	padding: 0 0 0 20px;
}</pre>
<h3>The Result:</h3>
<p><img class="alignnone size-full wp-image-76" title="Vertical Navigation" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/navigation1.gif" alt="" width="151" height="130" /></p>
<h2>Horizontal Menus</h2>
<p>Horizontal menus are slightly more complex than the vertical variety, but they aren&#8217;t so far removed.  As you can see in the example below, the HTML remains largely the same; we&#8217;ll modify the CSS to allow the navigation list items to appear in left-to-right orientation.</p>
<h3>The HTML:</h3>
<pre>&lt;ul class=&quot;navigation&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.google.com&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.yahoo.com&quot;&gt;Yahoo!&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.amazon.com&quot;&gt;Amazon&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.ebay.com&quot;&gt;eBay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<h3>The CSS:</h3>
<pre>ul.navigation,
ul.navigation ul {
	margin: 0;
}
ul.navigation li {
	list-style-type: none;
	<strong>float: left;</strong>
}</pre>
<h3>The Result:</h3>
<p><img class="alignnone size-full wp-image-77" title="Horizontal Navigation" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/navigation2.gif" alt="" width="232" height="18" /></p>
<p>The basic structure (as shown in the examples above) can be used for your site menus, but you&#8217;ll undoubtedly want to add some style and color to match the design of your site.  Here are a few examples to get you started and to perhaps give you some ideas of your own.</p>
<h2>Vertical Navigation</h2>
<p>Click on the image below to see the demo.  On the demo page, right-click and view source to see the code.</p>
<p><a href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/verticalmenu.htm" target="_blank"><img class="alignnone size-full wp-image-78" style="border: 0pt none;" title="Vertical Navigation Styled" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/navigation3.gif" alt="" width="171" height="179" /></a></p>
<h2>Horizontal Navigation</h2>
<p>Click on the image below to see the demo.  On the demo page, right-click and view source to see the code.</p>
<p><a href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/horizontalmenu.htm" target="_blank"><img class="alignnone size-full wp-image-79" style="border: 0pt none;" title="Horizontal Navigation Styled" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/navigation4.gif" alt="" width="333" height="65" /></a></p>
<p>As you can see, we&#8217;re using CSS to add rollover effects and sub-menu background colors.  You can add images and other navigation elements to take your design even further.</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/navigation-using-unordered-lists/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>All About Table-less Column Design</title>
		<link>http://kyleschaeffer.com/best-practices/all-about-tableless-column-design/</link>
		<comments>http://kyleschaeffer.com/best-practices/all-about-tableless-column-design/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 17:43:25 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Columns]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=54</guid>
		<description><![CDATA[There are a number of ways to create vertical columns in your XHTML design without using the &#60;table/&#62; tag and the horrendous amount of HTML that always seems to accompany it. Each method listed here is superior in various situations, &#8230; <a href="http://kyleschaeffer.com/best-practices/all-about-tableless-column-design/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are a number of ways to create vertical columns in your XHTML design without using the <code>&lt;table/&gt;</code> tag and the horrendous amount of HTML that always seems to accompany it. Each method listed here is superior in various situations, so choose a good fit for your particular design.<span id="more-54"></span></p>
<h2>But&#8230;why?</h2>
<p>Why do we go through all the trouble of creating table-less designs? In short, the answer is performance. At times, it may feel easier to simply drop in a table tag and quickly split your design into columns, but that&#8217;s not always the best option. Tables create a large amount of extraneous HTML that can make your pages slower for visitors to download. While it may not seem like a huge difference at first, when designing a template for a very large site, the difference can be astounding.</p>
<p>CSS that is defined in externally linked files is cached on client computers, meaning that anything you put in your external CSS files is downloaded only once. Once that CSS file is downloaded, it is quickly loaded on subsequent page visits, which is faster for your visitor and easier on your web server.</p>
<p>Why is this important? Stay with me, we&#8217;re getting there!</p>
<p>Generally, the content in your site changes as visitors browse from page to page, but the overall design remains the same. It is much easier (and faster) to store this persistent design information in cached files, such as images and CSS.</p>
<p><strong>In a table-less column design, almost all design information is stored in cached CSS files. A design that uses tables, on the other hand, often includes some of this information directly in the HTML, forcing users to download the HTML on every page in the site.</strong> Whenever possible, site design should be done in CSS rather than in HTML; for this reason, table-less designs are the modern preferred standard in web design.</p>
<h2>Floating Columns</h2>
<p>The <strong>float</strong> attribute in CSS is very powerful. So powerful, in fact, that many people seem to shy away from using it. Don&#8217;t be afraid! A bad float can ruin any good design, but using them when appropriate will alleviate your HTML-table woes.</p>
<h3>The HTML:</h3>
<pre>&lt;div class=&quot;columns&quot;&gt;
    &lt;div class=&quot;left&quot;&gt;
        &lt;p&gt;&lt;strong&gt;This is left-hand content.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class=&quot;right&quot;&gt;
        &lt;p&gt;&lt;strong&gt;This is right-hand content.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class=&quot;bottom&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<h3>The CSS:</h3>
<pre>.left {
	width: 60%;
	float: left;
	padding: 0 2% 0 0;
}
.right {
	width: 35%;
	float: left;
	padding: 0 0 0 2%;
}
.bottom {
	clear: both;
}</pre>
<h3>The Result:</h3>
<p><img class="alignnone size-full wp-image-59" title="Floating Columns" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/columns1.jpg" alt="" width="378" height="182" /></p>
<h3>Advantages:</h3>
<p>Fluid width &#8211; <em>allows for dynamic width (resizing)</em><br />
Fluid height &#8211; <em>matches the height of the tallest column, allowing for fully dynamic height of all columns</em></p>
<h3>Disadvantages:</h3>
<p>Floating &#8211; <em>if you are using fixed-width columns, and if the content in a column is too wide, your columns will word-wrap within your design and stack on top of each other</em><br />
Variable column height &#8211; <em>background colors or images applied to columns will not match in height</em></p>
<h2>Absolute Columns</h2>
<p>In many cases, the floating column design does the trick quite amiably. If, however, for some reason you find yourself in a situation where you are using a fixed-width design, and you really can&#8217;t control the width of content in your site, floating columns can become a nightmare. There&#8217;s nothing worse than seeing your left-hand column disappear from your layout, only to be re-positioned at the bottom of your page! If that&#8217;s the case, you may consider using the absolutely-positioned column design.</p>
<h3>The HTML:</h3>
<pre>&lt;div class=&quot;columns&quot;&gt;
    &lt;div class=&quot;left&quot;&gt;
        &lt;p&gt;&lt;strong&gt;This is left-hand content.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class=&quot;right&quot;&gt;
        &lt;p&gt;&lt;strong&gt;This is right-hand content.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre>
<h3>The CSS:</h3>
<pre>.columns {
	position: relative;
}
.left {
	width: 60%;
	margin: 0 35% 0 0;
	padding: 0 2% 0 0;
}
.right {
	position: absolute;
	top: 0;
	right: 0;
	width: 35%;
	padding: 0 0 0 2%;
}</pre>
<h3>The Result:</h3>
<p><img class="alignnone size-full wp-image-60" title="Absolute Columns" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/columns2.jpg" alt="" width="370" height="152" /></p>
<h3>Advantages:</h3>
<p>Fluid width &#8211; <em>allows for dynamic width (resizing)</em><br />
No floating &#8211; <em>consistent even when content is too wide to display</em></p>
<h3>Disadvantages:</h3>
<p>Minimum height &#8211; <em>the absolutely-positioned column must always be shorter in height than the fluid column(s), else it will display on top of design elements below</em><br />
Variable column height &#8211; <em>background colors or images applied to columns will not match in height</em></p>
<h2>Concerning &#8220;variable column height.&#8221;</h2>
<p>I would like to point out that &#8220;variable column height&#8221; is listed as a disadvantage of each method. The main disadvantage in using table-less CSS column designs is that when you have two elements side-by-side, they won&#8217;t necessarily match in height. If your design requires two shaded columns to match in height, this table-less approach may not be your best option. In general, it&#8217;s best to create designs that don&#8217;t require this type of approach from the get-go. Many people try to compensate for this lack of height-matching by using repeating background images that make it appear as if the columns match in height, but I have never been a fan of adding images to do something that HTML and CSS could handle otherwise.</p>
<h2>When all else fails&#8230;</h2>
<p>The only time I use a table in HTML is to (1) display tabular data or (2) when I absolutely need to have two height-matching elements display side-by-side in a design. Some fanatical CSS enthusiasts would argue that this is a lame approach, but in some cases designers need to act on simple pragmatism.</p>
<p>If you&#8217;re in a situation where you need to use a table, please do not use extraneous HTML. <strong>The <code>cellpadding</code> and <code>cellspacing</code> attributes are not needed!</strong> You can do everything with CSS. It goes something like this:</p>
<h3>The HTML:</h3>
<pre>&lt;table class=&quot;columns&quot;&gt;
    &lt;tr&gt;
        &lt;td class=&quot;left&quot;&gt;
            &lt;p&gt;&lt;strong&gt;This is left-hand content.&lt;/strong&gt;&lt;/p&gt;
            &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
        &lt;/td&gt;
        &lt;td class=&quot;right&quot;&gt;
            &lt;p&gt;&lt;strong&gt;This is right-hand content.&lt;/strong&gt;&lt;/p&gt;
            &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;</pre>
<h3>The CSS:</h3>
<pre>.columns {
	width: 100%;
	border-collapse: collapse;
}
.left {
	width: 60%;
	padding: 0;
	vertical-align: top;
}
.right {
	width: 40%;
	padding: 0;
	vertical-align: top;
}</pre>
<h3>The Result:</h3>
<p><img class="alignnone size-full wp-image-62" title="Table Columns" src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/columns3.jpg" alt="" width="364" height="171" /></p>
<p>It may still be a table, but it&#8217;s a minimal table if I ever saw one.</p>
<p>Good luck, and happy styling.</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/best-practices/all-about-tableless-column-design/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Karate Corners: XHTML/CSS Rounded Corners</title>
		<link>http://kyleschaeffer.com/tutorials/karate-corners-easy-rounded-corners-xhtml-no-script/</link>
		<comments>http://kyleschaeffer.com/tutorials/karate-corners-easy-rounded-corners-xhtml-no-script/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 12:58:10 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Controls]]></category>
		<category><![CDATA[Corners]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.kyleschaeffer.com/?p=31</guid>
		<description><![CDATA[I&#8217;ve seen a lot of different ways to create round corners and boxes in web sites, and quite frankly I haven&#8217;t exactly fallen in love with any of them. A lot of the methods that I&#8217;ve seen use either (1) &#8230; <a href="http://kyleschaeffer.com/tutorials/karate-corners-easy-rounded-corners-xhtml-no-script/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen a lot of different ways to create round corners and boxes in web sites, and quite frankly I haven&#8217;t exactly fallen in love with any of them.  A lot of the methods that I&#8217;ve seen use either (1) a table structure which I try to avoid at all costs, (2) too many nested <code>&lt;div&gt;</code> tags, (3) complex CSS, or (4) too many different images that have to be loaded all at once.<span id="more-31"></span></p>
<p><strong>Update:</strong> <a href="http://www.kyleschaeffer.com/web-controls/five-elegant-rounded-corner-boxes/">Read my subsequent post for a more advanced example of this technique!</a><br />
<strong>Update:</strong> <a href="http://www.kyleschaeffer.com/best-practices/reusable-transparent-css-rounded-corners/">Read a even <em>more</em> advanced version of this technique in an even <em>newer</em> tutorial!</a><br />
<strong>Update:</strong> <a href="http://www.kyleschaeffer.com/tutorials/ie-corner-inserts-via-jquery/">Find out how to automatically generate the HTML and CSS for this technique using jQuery.</a></p>
<p>I took the best of the best and came up with a very simple way to create totally scalable boxes with round corners.  I&#8217;ve tested this on Internet Explorer 6, IE 7, Mozilla FireFox 2, Firefox 3, Opera 9, and Safari 3.</p>
<h2>The Code</h2>
<p>The HTML code is relatively simple.  You have an outer <code>&lt;div&gt;</code> tag with four &#8220;corner&#8221; <code>&lt;div&gt;</code>s inside of it.  Each of these corner <code>&lt;div&gt;</code>s are positioned with CSS so that they always appear at each corner of the outer <code>&lt;div&gt;</code> box.</p>
<h3>HTML:</h3>
<pre>&lt;div class="cornerBox"&gt;
    &lt;div class="corner TL"&gt;&lt;/div&gt;
    &lt;div class="corner TR"&gt;&lt;/div&gt;
    &lt;div class="corner BL"&gt;&lt;/div&gt;
    &lt;div class="corner BR"&gt;&lt;/div&gt;
    &lt;div class="cornerBoxInner"&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre>
<h3>CSS:</h3>
<pre>.cornerBox {
	position: relative;
	background: #cfcfcf;
	width: 100%;
}
.corner {
	position: absolute;
	width: 10px;
	height: 10px;
	background: url('corners.gif') no-repeat;
	font-size: 0%;
}
.cornerBoxInner {
	padding: 10px;
}
.TL {
	top: 0;
	left: 0;
	background-position: 0 0;
}
.TR {
	top: 0;
	right: 0;
	background-position: -10px 0;
}
.BL {
	bottom: 0;
	left: 0;
	background-position: 0 -10px;
}
.BR {
	bottom: 0;
	right: 0;
	background-position: -10px -10px;
}</pre>
<h2>The Image</h2>
<p><img class="size-medium wp-image-32" title="The 20x20 corner image used in this demo." src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/corners.gif" alt="The 20x20 corner image used in this demo." width="20" height="20" /></p>
<p>Only one image is used for this box (shown above).  In my example, I created a 20&#215;20 circle, which is comprised of four 10&#215;10 corners.  By shifting the background image around, you can eliminate the need to download four separate GIF files on each of your boxes.</p>
<h2>The Result</h2>
<p><a href="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/karatecornersdemo.htm" target="_blank"><img class="size-full wp-image-34" title="Click on this image to see the demo, where you can resize your browser window to see how the box scales as the height and width changes." src="http://kyleschaeffer.com/wordpress/wp-content/uploads/2008/10/cornersbox.gif" border="0" alt="Click on this image to see the demo, where you can resize your browser window to see how the box scales as the height and width changes." width="472" height="122" /></a></p>
<p>Karate Corners!  Click on the image above to see the HTML demo.  Happy styling!</p>
]]></content:encoded>
			<wfw:commentRss>http://kyleschaeffer.com/tutorials/karate-corners-easy-rounded-corners-xhtml-no-script/feed/</wfw:commentRss>
		<slash:comments>73</slash:comments>
		</item>
	</channel>
</rss>

