<?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>Courtney Fantinato</title>
	<atom:link href="http://www.clearexpressionsdesigns.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clearexpressionsdesigns.com</link>
	<description>Web Designer &#38; Developer</description>
	<lastBuildDate>Sat, 12 May 2012 02:07:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Treehouse &#8211; Watch Videos &amp; Unlock Badges</title>
		<link>http://www.clearexpressionsdesigns.com/opinion/treehouse-watch-videos-unlock-badges/</link>
		<comments>http://www.clearexpressionsdesigns.com/opinion/treehouse-watch-videos-unlock-badges/#comments</comments>
		<pubDate>Thu, 10 May 2012 18:11:25 +0000</pubDate>
		<dc:creator>Courtney Fantinato</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Badges]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Gamification]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Treehouse]]></category>

		<guid isPermaLink="false">http://www.clearexpressionsdesigns.com/?p=949</guid>
		<description><![CDATA[Ever wanted to learn how to code HTML or CSS? JavaScript? Learn how to use Photoshop? Get started with HTML5 or CSS3? Well you can learn that and a whole lot more at Treehouse! From the Treehouse website: Our mission is to teach Web Design, Development and iOS to people everywhere, in order to help ...]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to learn how to code HTML or CSS? JavaScript? Learn how to use Photoshop? Get started with HTML5 or CSS3? Well you can learn that and a whole lot more at Treehouse! From the Treehouse website:</p>
<blockquote><p>Our mission is to teach Web Design, Development and iOS to people everywhere, in order to help them achieve their dreams and change the world.</p></blockquote>
<p>I have been a <a title="Courtney's Treehouse Profile" href="http://teamtreehouse.com/courtneyfantinato">member of Treehouse</a> since the end of February and I love it! What&#8217;s so fantastic about it is you get to unlock badges as you go along watching videos that teach you things like:</p>
<ul>
<li>HTML &#8211; Lists, Objects, Text, Forms, HTML5</li>
<li>CSS &#8211; Selectors, Box Model, Page layout, CSS3 Techniques</li>
<li>Typography, Web Fonts, Photoshop</li>
<li>JavaScript, Ruby, iOS</li>
<li>&#8230;and so much more!</li>
</ul>
<p><span id="more-949"></span></p>
<p>The unlocking of badges is really gamification on the web. Each Badge has a number of videos that you can watch, and then a quiz to complete. Once you have passed the quiz, you&#8217;ve unlocked the badge and it goes on your public profile that you can show off. There are also &#8220;Code Challenges&#8221; where you have to follow instructions to write HTML, CSS, etc. right in the browser, and unlocks a special badge for that challenge.</p>
<p><em>Treehouse also just started a referral program &#8211; if you click the banner below and join, you get <strong>50% OFF your first month</strong>!</em></p>
<p><a title="Come join me at Treehouse and get 50% off your first month!" href="http://referrals.trhou.se/courtneyfantinato"><img title="Come join me at Treehouse and get 50% off your first month!" src="http://teamtreehouse.com/referral-badge/courtneyfantinato" alt="Come join me at Treehouse and get 50% off your first month!" /></a></p>
<p>If you want a preview, you can check out <a title="Treehouse on YouTube" href="http://www.youtube.com/user/gotreehouse">Treehouse on YouTube</a>. Some videos they have aren&#8217;t just for learning, but reward videos that you get to watch after completing certain badges. One of my favourites is <a title="YouTube: Meet Mike the Frog" href="http://youtu.be/jQNXtyoyHic">Meet Mike the Frog</a>.</p>
<div class="video-wrapper">
<div class="video-container"><iframe src="http://www.youtube.com/embed/jQNXtyoyHic" frameborder="0" width="640" height="360"></iframe></div>
</div>
<p>What&#8217;s also great about Treehouse is you can suspend your account at any time and not get billed until you re-activate it. They also have a Student membership if you email them a photo of your student ID.</p>
<p>I highly recommend Treehouse to anyone, from beginners to advanced. Even if you know the basics (or more) it&#8217;s still fun to unlock the badges (gamification at work!).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clearexpressionsdesigns.com/opinion/treehouse-watch-videos-unlock-badges/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress: Create a Custom Meta Box</title>
		<link>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-meta-box/</link>
		<comments>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-meta-box/#comments</comments>
		<pubDate>Thu, 03 May 2012 23:26:55 +0000</pubDate>
		<dc:creator>Courtney Fantinato</dc:creator>
				<category><![CDATA[WordPress Development]]></category>
		<category><![CDATA[Custom Meta Box]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.clearexpressionsdesigns.com/?p=917</guid>
		<description><![CDATA[This is the second entry of my WordPress development series, providing tutorials on specific things you can do in WordPress. Stay tuned for more! This tutorial is going to show you how to add your own Custom Meta Box to your posts, pages, or your own custom post types. Custom meta boxes allow you to ...]]></description>
			<content:encoded><![CDATA[<p><em>This is the second entry of my WordPress development series, providing tutorials on specific things you can do in WordPress. Stay tuned for more!</em></p>
<p>This tutorial is going to show you how to add your own Custom Meta Box to your posts, pages, or your own custom post types. Custom meta boxes allow you to save additional information. Continuing on from the <a href="/wordpress-development/wordpress-create-a-custom-post-type/">previous tutorial</a>, I am going to add a custom meta box to my custom posts type &#8220;Cats&#8221;, which I will use to save the cat&#8217;s age and favourite toy.</p>
<p>For simplicity, we will create our custom meta box in our <em>functions.php</em> file. You can edit this file by going to Appearance &gt; Editor in your WordPress admin panel, or using a text editor with FTP.</p>
<p>To begin, we first have to create the custom meta box. We do this by using a function we have used already, <em>add_action()</em>.</p>
<p><span id="more-917"></span></p>
<pre class="brush:php">// Create custom meta box
add_action( 'add_meta_boxes', 'cf_cats_meta_box', 1 );</pre>
<p>The first parameter is the name of the action that the second parameter is hooked to. <em>add_meta_boxes</em> runs when the page to edit your post/page loads. The second parameter is the name of our function that prints out the meta box itself. Feel free to name this in a way that makes sense for your custom meta box. I am continuing to use &#8220;cf&#8221; as my prefix from the previous tutorial, and since this is my &#8220;Cats&#8221; custom post type, I put that in there as well. The last parameter is set to 1 for priority over other functions, which is optional.</p>
<p>Next we need to create our function that we are calling from <em>add_action()</em>.</p>
<pre class="brush:php">// Display custom meta box
function cf_cats_meta_box() {
	add_meta_box( 'cf-cat-meta-box', 'Cat Details', 'cf_cat_details', 'cf_cats', 'normal', 'high' );
}</pre>
<p>We got a bit going on here, so let&#8217;s break it down. <em>add_meta_box()</em> is the function that displays our custom meta box. Inside we have some parameters. The first is the HTML ID name of our meta box. The second is the title of the meta box, which the user will see. The third is the name of our function that we will create to display the content that is INSIDE of our meta box, such as a form. The fourth parameter is the post type. This can be set to <em>&#8216;post&#8217;</em>, <em>&#8216;page&#8217;</em>, or your own custom post type slug. In the previous tutorial I created the post type <em>&#8216;cf_cats&#8217;</em>, which is what I am using here. The last two parameters are for where the meta box should be placed on the edit screen (both optional).</p>
<p>At this point, this is what our custom meta box looks like:</p>
<p><img class="alignnone size-full wp-image-920" title="cf-cats-meta-box-01" src="http://www.clearexpressionsdesigns.com/wordpress/wp-content/uploads/2012/05/Screen-Shot-2012-05-03-at-3.34.32-PM.png" alt="" width="347" height="77" /></p>
<p>Great! But not very exciting, eh? Now we need to actually have something inside of our meta box.</p>
<pre class="brush:php">// Function to display what is inside of our meta box
function cf_cat_details( $post ) {

	// Retrieve saved metadata if it exists
	$cf_cat_age = get_post_meta( $post-&gt;ID, '_cf_cat_age', true );
	$cf_cat_toy = get_post_meta( $post-&gt;ID, '_cf_cat_toy', true );

	// Create a nonce field for verification
    wp_nonce_field( 'cf_submit_cat', 'cf_cat_check' );

    // The form inside our meta box
	echo '&lt;table class="form-table"&gt;
			&lt;tr valign="top"&gt;
				&lt;th scope="row"&gt;&lt;label for="cf_cat_age"&gt;Age:&lt;/label&gt;&lt;/th&gt;
				&lt;td&gt;&lt;input type="text" name="cf_cat_age" size="30" maxlength="2" value="' . esc_attr( $cf_cat_age ) . '" /&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr valign="top"&gt;
				&lt;th scope="row"&gt;&lt;label for="cf_cat_toy"&gt;Favourite Toy:&lt;/label&gt;&lt;/th&gt;
				&lt;td&gt;&lt;input type="text" name="cf_cat_toy" size="30" maxlength="100" value="' . esc_attr( $cf_cat_toy ) . '" /&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;';
}</pre>
<p>In lines 5 and 6 we are retrieving any previously saved metadata, if it exists, and storing it in variables. In line 9 we have our nonce check, which is for security (more on that later).</p>
<p>Now for the content that we see inside of our meta box, I have decided to create a simple form where a user can input their cat&#8217;s age and favourite toy. For the values, you can see we have our variables we declared earlier. This allows us to see what the previous stored data is, if any. It is also important to escape any user inputted data in forms, so we use the <em>esc_attr()</em> function.</p>
<p>If you have a large form, it may be easier to have it in a seperate file and include it in (which is typically done for plugins). However, for this tutorial we will keep it in the same file as it is a small form.</p>
<p>And that&#8217;s it! Well, not quite. We now have a custom meta box, but if we try to fill out the form and save the post, the fields return empty. The title and description save, but not our meta box data. That&#8217;s because we need to tell WordPress to save the metadata.</p>
<pre class="brush:php">// Update/Save cat metadata
add_action('save_post', 'save_cat_metadata');

function save_cat_metadata( $post_id ) {

	// Verify if this is an auto save routine.
	if ( defined( 'DOING_AUTOSAVE' ) &amp;&amp; DOING_AUTOSAVE ) {
		return;
	}

	//Check permissions
	if ( !current_user_can( 'publish_posts' ) ) { // Check for capabilities, not role
		wp_die( 'Insufficient Privileges: Sorry, you do not have the capabilities access to this page. Please go back.' );
	}

	// Check nonce named cf_cat_check
	// Verify this came from the our screen and with proper authorization
	if ( !isset( $_POST['cf_cat_check'] )  || !wp_verify_nonce(  $_POST['cf_cat_check'], 'cf_submit_cat' ) ) {
		return;
	}

	// OK, we're authenticated: we need to save the data
	// Verify the meta data is set
	if ( isset( $_POST['cf_cat_age'] ) &amp;&amp; isset( $_POST['cf_cat_toy'] ) ) {
		// Save meta data
		update_post_meta( $post_id, '_cf_cat_age', strip_tags( $_POST['cf_cat_age'] ) );
		update_post_meta( $post_id, '_cf_cat_toy', strip_tags( $_POST['cf_cat_toy'] ) );
	}
}</pre>
<p>Again, we use the handy <em>add_action()</em> function to hook our own function (parameter two) to the <em>save_post</em> action (parameter one), which as you can guess, happens on saving posts.</p>
<p>Now in our own function, we first check if it is an autosave routine. If it is, we don&#8217;t want to do anything as our form hasn&#8217;t been submitted. Then we check for permissions. You should always check for permissions based on user <em>capability</em> not role, as capabilities for certain roles (ie. author) can be changed. Following that, we check if our nonce exists.</p>
<p>Once we&#8217;ve got the okay, then we save (or update) the meta data. We have three parameters in the <em>update_post_meta()</em> function. The first is the ID of the post, stored in the variable <em>$post_id</em>. The second is the name of the meta key (in the database) of the custom field. And the third is the meta value of the field that we are storing in the database (key/value pairs!).</p>
<p>We use the <em>update_post_meta()</em> function because it acts like the <em>add_post_meta()</em> function if the meta key (in the database) does not exist (creates it in the database). Otherwise, it just updates the value if the key does exist. Best of both worlds!</p>
<p>And we&#8217;re done! Here&#8217;s what my meta box looks like:</p>
<p><a href="http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-meta-box/attachment/screen-shot-2012-05-03-at-3-13-41-pm/" rel="attachment wp-att-919"><img class="alignnone size-full wp-image-919" title="cf-cats-meta-box-02" src="http://www.clearexpressionsdesigns.com/wordpress/wp-content/uploads/2012/05/Screen-Shot-2012-05-03-at-3.13.41-PM.png" alt="" width="544" height="157" /></a></p>
<p>Any questions or comments, please reply below!</p>
<p><em>Ps. I have used some security in this tutorial, but it is too big of a topic that it really needs it&#8217;s own. Better yet, the <a title="WordPress Codex: Data Validation" href="http://codex.wordpress.org/Data_Validation">Codex</a> is a great place to start. Make sure to always use security checks, and to sanitize and validate any and all data, especially user input! For example, after the nonce check you could check that data has been input if it is required (you can also use the HTML5 &#8220;required&#8221; attribute in your forms), and also use preg matches etc., for specific types of data such as emails or phone numbers (which can also be done within forms using HTML5. But you should <strong>always</strong> have a PHP backup!).</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-meta-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress: Create a Custom Post Type</title>
		<link>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-post-type/</link>
		<comments>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-post-type/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 03:55:19 +0000</pubDate>
		<dc:creator>Courtney Fantinato</dc:creator>
				<category><![CDATA[WordPress Development]]></category>
		<category><![CDATA[Custom Post Type]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.clearexpressionsdesigns.com/?p=887</guid>
		<description><![CDATA[This is the first entry of my WordPress development series, providing tutorials on specific things you can do in WordPress. Stay tuned for more! I have been working with Custom Post Types recently, so I want to start off the series with them. Custom Post Types are just like Pages and Posts, but you can ...]]></description>
			<content:encoded><![CDATA[<p><em>This is the first entry of my WordPress development series, providing tutorials on specific things you can do in WordPress. Stay tuned for more!</em></p>
<p>I have been working with Custom Post Types recently, so I want to start off the series with them. Custom Post Types are just like Pages and Posts, but you can call them whatever you like. They can be used for a variety of content such as Events, Bands, a Book database, Cars, Recipes&#8230; if you can think of it, it can probably be a Custom Post Type! They are handy because you can separate them from your regular blog Posts, they can be integrated into your themes and plugins, and even created just by using <em>functions.php</em>.</p>
<p>For simplicity, we will create our Custom Post Type in our <em>functions.php</em> file. You can edit this file by going to Appearance &gt; Editor in your WordPress admin panel, or using a text editor with FTP. I&#8217;m going to be creating a post type called Cats.</p>
<p><span id="more-887"></span></p>
<p><img class="alignnone size-full wp-image-905" title="azaezel_01" src="http://www.clearexpressionsdesigns.com/wordpress/wp-content/uploads/2012/04/cat88a.jpg" alt="My cat Azaezel" width="500" height="375" /><br />
<em>My cat Azaezel.</em></p>
<p>We&#8217;ll begin by setting up our Custom Post Type using the <em>add_action()</em> function. We use this function to hook our function (second parameter) to an action (first parameter). The <em>add_action()</em> function can take two more parameters, but we only need these two for now (find out more at the <a title="WordPress Codex: Add Action" href="http://codex.wordpress.org/Function_Reference/add_action">WordPress Codex</a>).</p>
<pre class="brush:php">// Set up the custom post type
add_action ( 'init', 'cf_cats_post_type' );</pre>
<p>The first parameter, <em>&#8216;init&#8217;</em>, means after WordPress has loaded. The second parameter simply calls our function <em>cf_cats_post_type()</em>. We are telling WordPress to call our function after it (WordPress) has fully loaded.</p>
<p>You can change the name of your function to whatever you like based on what your Custom Post Type is. It&#8217;s a good idea to use some sort of prefix, especially if creating a plugin, to avoid conflicts with other function names. So for this tutorial I will use cf_, which is simply the first letters of my first and last names followed by an underscore.</p>
<p>Next, we will set up the arguments for our post type in our function.</p>
<pre class="brush:php">function cf_cats_post_type() {
	$cats_labels = array(
		'name' =&gt; 'Cats',
		'singular_name' =&gt; 'Cat',
		'add_new' =&gt; 'Add New Cat',
		'add_new_item' =&gt; 'Add New Cat',
		'edit_item' =&gt; 'Edit Cat',
		'new_item' =&gt; 'New Cat',
		'view_item' =&gt; 'View Cat',
		'search_items' =&gt; 'Search Cats',
		'not_found' =&gt;  'No Cats Found',
		'not_found_in_trash' =&gt; 'No Cats Found in Trash',
	);
	$cats_args = array(
		'labels' =&gt; $cats_labels,
		'public' =&gt; true,
		'query_var' =&gt; 'cf_cats',
		'hierarchical' =&gt; false,
		'menu_position' =&gt; 5,
		'show_in_nav_menus' =&gt; true,
		'rewrite' =&gt; true,
		'supports' =&gt; array( 'title', 'editor', 'thumbnail' ),
	);

	// Register the custom post type
	register_post_type( 'cf_cats', $cats_args );
}</pre>
<p>The first part starting on line 2 is our labels, which are pretty self-explanatory. The labels (which is an argument in line 15) is an array of text strings shown throughout the admin backend for that post type. You don&#8217;t have to set every one if you don&#8217;t want to as WordPress provides defaults, but I feel it is a good idea to do so for consistency.</p>
<p>Starting on line 14, we have our array of arguments. They may not be obvious as to what they do at first glance, and again you can choose what you want to set or not. I haven&#8217;t included all of them here either. Because the <a title="WordPress Codex: Register Post Type" href="http://codex.wordpress.org/Function_Reference/register_post_type">WordPress Codex</a> has a thorough explanation of all labels and arguments, you can find all you need to know about them there.</p>
<p>Finally, in the last bit of our function at line 26, we will register our post type. This is done by calling the <em>register_post_type()</em> function. The first parameter is the name of our post type. The second is the array of arguments that we set earlier, stored in the variable <em>$cats_args</em>.</p>
<p>Here&#8217;s a preview of my post type. As you can see, mine is below &#8216;Posts&#8217; in the admin menu (<em>&#8216;menu_position&#8217; =&gt; 5</em>) and I have created a post for my cat. You can see how our labels worked, with &#8220;Cats&#8221; and &#8220;Add New Cat&#8221; showing up in the admin backend.</p>
<p><img class="alignnone size-full wp-image-898" title="cf_cats_custom_post_type" src="http://www.clearexpressionsdesigns.com/wordpress/wp-content/uploads/2012/04/Screen-Shot-2012-04-22-at-8.25.37-PM.png" alt="Preview of my Cats custom post type." width="365" height="215" /></p>
<p>And we&#8217;re done! If you have any questions or comments please feel free to leave a response below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clearexpressionsdesigns.com/wordpress-development/wordpress-create-a-custom-post-type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KONY 2012</title>
		<link>http://www.clearexpressionsdesigns.com/general/kony-2012/</link>
		<comments>http://www.clearexpressionsdesigns.com/general/kony-2012/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 03:29:26 +0000</pubDate>
		<dc:creator>Courtney Fantinato</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Invisible Children]]></category>
		<category><![CDATA[KONY 2012]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.clearexpressionsdesigns.com/?p=842</guid>
		<description><![CDATA[If you haven&#8217;t heard of KONY 2012 through Twitter or Facebook, it&#8217;s a must-see 27 minute video. It has gone viral very quickly, and will hopefully make a huge impact. I&#8217;m not going to explain the entire video as it really needs to be watched, but here&#8217;s a quick summary from YouTube: &#8220;KONY 2012 is ...]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t heard of KONY 2012 through Twitter or Facebook, it&#8217;s a must-see 27 minute video. It has gone viral very quickly, and will hopefully make a huge impact.</p>
<p>I&#8217;m not going to explain the entire video as it really needs to be watched, but here&#8217;s a quick summary from YouTube: &#8220;KONY 2012 is a film and campaign by Invisible Children that aims to make Joseph Kony famous, not to celebrate him, but to raise support for his arrest and set a precedent for international justice&#8221;.</p>
<p>The film has a very powerful message, and is smartly directed at the younger generations. Personally, I believe that if we can all contribute in some way, big or small, we can make a difference. We can change history. Twenty-six years is far, far too long for something such as this to be going on. And, my hope is that this will inspire us to work towards solving other world issues too.</p>
<p>I have embed the video below. If there is issues, you can view it directly on <a title="KONY 2012 by Invisible Children" href="http://youtu.be/Y4MnpzG5Sqc">Youtube</a>.</p>
<div class="video-wrapper">
<div class="video-container"><iframe src="http://www.youtube.com/embed/Y4MnpzG5Sqc" frameborder="0" width="640" height="360"></iframe></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.clearexpressionsdesigns.com/general/kony-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Vendor Prefix Debate</title>
		<link>http://www.clearexpressionsdesigns.com/opinion/the-vendor-prefix-debate/</link>
		<comments>http://www.clearexpressionsdesigns.com/opinion/the-vendor-prefix-debate/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 23:48:08 +0000</pubDate>
		<dc:creator>Courtney Fantinato</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Internet Browsers]]></category>
		<category><![CDATA[Vendor Prefixes]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Web Designers]]></category>
		<category><![CDATA[Web Developers]]></category>

		<guid isPermaLink="false">http://www.clearexpressionsdesigns.com/?p=825</guid>
		<description><![CDATA[There has been a lot of discussion lately on blogs and Twitter about the use of vendor prefixes, and I&#8217;d like to add in my two-cents. I initially came across the whole thing from Chris Coyier at Css-Tricks.com, followed by tweets from various web professionals on Twitter. Essentially, Mozilla (those behind the Firefox browser) wants ...]]></description>
			<content:encoded><![CDATA[<p>There has been a lot of discussion lately on blogs and Twitter about the use of vendor prefixes, and I&#8217;d like to add in my two-cents.</p>
<p>I initially came across the whole thing from <a title="Css-Tricks.com" href="http://css-tricks.com/tldr-on-vendor-prefix-drama/">Chris Coyier at Css-Tricks.com</a>, followed by tweets from various web professionals on Twitter. Essentially, <a title="Mozilla" href="http://www.mozilla.org/">Mozilla</a> (those behind the Firefox browser) wants to provide support for Webkit&#8217;s -webkit- prefix (that is used by browsers like Safari and Chrome that use the Webkit engine). A lot of people are saying this is a bad idea. Others are also saying we (the designers/devs) have gotten ourselves into this mess. I think it really comes down to all of us &#8211; the browser vendors, the W3C, and the web designers/devs.</p>
<p>The browser vendors have their own set of prefixes that they use for experimental purposes &#8211; it is pre-standardized code, and prefixes are not spec. Firefox uses -moz-, Safari and Chrome use -webkit-, Opera uses -o-, and Internet Explorer uses -ms-. Apparently, web designers/devs are using the -webkit- prefixes only, to use properties we call &#8220;CSS3&#8243;, because they either don&#8217;t know about the equivalent prefixes for other browsers, or don&#8217;t bother (sometimes, though, they don&#8217;t exist). Technically, some of these fancy schmancy techniques we use with prefixes aren&#8217;t really CSS3 &#8211; yet, anyways depending on how far along they are towards W3C recommendation. Many of these techniques are kind of like previews, and allows the browser vendors to test stuff out (as well as designers/devs too, who can provide feedback). Some browser vendors are already supporting standardized CSS3 properties. But the support varies with each browser vendor, and some browser vendors are using their prefixes to test things, and not all are testing the same things.</p>
<p><span id="more-825"></span></p>
<p>Part of the problem, that other people have brought up, is the browser vendors should use these prefixes only in non-production releases. I agree that really, really, experimental properties shouldn&#8217;t be in production releases, because I think that&#8217;s where issues arise if they are used for production websites. But I think those prefixed properties that work great (no bugs, etc.) should be available so that designers/devs can play with them now, even in production websites. And, the browser vendors should submit implementation reports so that the way they are implemented could potentially be the standard in the W3C specification.</p>
<p>So because we can, designers/devs are using these prefixes to enjoy using these fun CSS3 properties now. What Mozilla has a problem with, is designers/devs are using only the -webkit- prefix, and nothing else. That means any fancy tricks that are showing up in browsers that support the -webkit- prefix will show up&#8230; but not for the other browsers, such as Firefox. So they want to support the -webkit- prefix (which other browser vendors like Opera and Microsoft might be eyeing at now) so that websites viewed in their browser looks just as good.</p>
<p>I think that&#8217;s where a BIG part of the problem really lies. It&#8217;s with the designers/devs. Personally, if I am going to use some sort of CSS3 technique, I use all the available vendor prefixes, and put the W3C spec version at the bottom of the stack as a fall back in hopes that all browsers will support the spec version one day (though it will probably be awhile before we can not use <em>any</em> vendor prefixes at all, as older browser versions will still need the prefixes).</p>
<p>Why are designers/devs not using stacks for CSS3 properties? We use font stacks. Why is this different?</p>
<p>It could be lack of time to test in other browsers for projects that are on a tight deadline. It could be laziness. Whatever the reason, it needs to stop.</p>
<p>I use stacks for CSS3 properties so that they work in as many browsers as possible, but also in the hopes that eventually we will be able to just use the spec version one day &#8211; future-proofing! And it only takes an extra minute, if that, to support the other browsers. I also don&#8217;t use extremely experimental properties, or ones that only work in some browsers (unless it degrades nicely&#8230; I don&#8217;t want weird stuff going on).</p>
<p>Then, that is where we have to look to the W3C. Css3 has been split into different modules (you can see how far along each module is at <a title="Css3.Info Modules" href="http://www.css3.info/modules/">Css3.info</a>). Many are still in Working Draft, and the process can be slow. It is great that the modules are split however, so that they can all progress at different rates, but it is still a very slow process, especially since CSS 2.1 isn&#8217;t even at full Recommendation yet.</p>
<p>So I think in the end, it comes down to all of us working together. The W3C needs to work at moving things along a little faster if they can, because we&#8217;re all itching to use these new CSS properties. Browser vendors should stick to their own prefixes, work at making them better so we&#8217;ll want to support them, and start to support more new CSS properties as they become spec. And most importantly, as professionals, web designers and developers need to support ALL browsers as best as possible, and use the spec version at the bottom of the stack. We need to provide a fall back for older browser versions, and future-proof our work too.</p>
<p>As Kevin O&#8217;Leary would say&#8230; stop the madness!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.clearexpressionsdesigns.com/opinion/the-vendor-prefix-debate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

