<?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>Tiffany B. Brown &#187; (x)HTML</title>
	<atom:link href="http://tiffanybbrown.com/category/xhtml/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiffanybbrown.com</link>
	<description>A web log about web development and internet culture with frequent detours into other stuff.</description>
	<lastBuildDate>Fri, 10 Feb 2012 23:35:51 +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>input type=&quot;range&quot; and Android&#8217;s stock browser.</title>
		<link>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/</link>
		<comments>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 04:04:56 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6629</guid>
		<description><![CDATA[Android&#8217;s stock browser supports the range input type, but in versions 3.x4.x and below (not sure about Android 4.x), it doesn&#8217;t actually display the UI. It does, however, support parts of the Shadow DOM. That means we can style this element, and give our users a visible control. The image below shows a rather garish [...]]]></description>
			<content:encoded><![CDATA[<p>Android&#8217;s stock browser supports the <code>range</code> input type, but in versions <del datetime="2012-02-09T14:40:47+00:00">3.x</del><ins datetime="2012-02-09T14:40:47+00:00">4.x</ins> and below <del datetime="2012-02-09T14:40:47+00:00"> (not sure about Android 4.x)</del>, it doesn&#8217;t actually display the UI.</p>
<p>It does, however, support parts of the <a href="http://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/">Shadow DOM</a>. That means we can style this element, and give our users a visible control.</p>
<p>The image below shows a rather garish green-and-orange version of the range user interface widget. This is after adding some styling, as it appears in the stock Android browser.</p>
<div class="image500"><img src="http://webinista.s3.amazonaws.com/images/uploads/2012/02/rangeui.png" alt="" title="safarirange" width="499" height="52" class="aligncenter size-full wp-image-6632"></div>
<p>And below is the CSS that gives us the above image.</p>
<pre><code>
input[type='range']{
    background: #0c0;
    height:10px;
}

input[type='range']::-webkit-slider-thumb{
    background:#f60;
    height:30px;
    width:30px;
    border-radius: 30px;
}
</code></pre>
<p>To date, this does <em>not</em> affect Chrome or Safari for the Desktop. <code>::-webkit-slider-thumb</code> does partially affect iOS Safari. I&#8217;ve included an image of what it looks like below (not to scale). Notice that the thumb color changes, but the slider background does not.</p>
<div class="image500"><img src="http://webinista.s3.amazonaws.com/images/uploads/2012/02/safarirange.png" alt="" title="safarirange" width="500" height="134" class="aligncenter size-full wp-image-6632"></div>
<p>This <em>may</em> also affect other browsers that use <a href="http://www.webkit.org/">Webkit</a> such as the Web Browser for S60 Nokia and Samsung&#8217;s Dolfin. I haven&#8217;t tested it yet, but if you have, please let us know in the comments.</p>
<p>Also keep in mind that this element has a pretty poor user interaction in Android browser. It&#8217;s not very responsive, and doesn&#8217;t operate all that intuitively. This is true of most mobile browsers, but in my opinion (and based on limited experience), Android is worst of all.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>input type=&quot;url&quot;, validation and user interfaces</title>
		<link>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/</link>
		<comments>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 06:54:33 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6580</guid>
		<description><![CDATA[Recently a friend messaged me about the url input type, and how to prevent Opera from automatically prepending http:// to the value of a URL input field if it is missing. I think I&#8217;ve found a workaround, but first, I want to discuss the url input type, and how different browsers handle it. HTML5 introduces [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a friend messaged me about the <code>url</code> input type, and how to prevent Opera from automatically prepending http:// to the value of a URL input field if it is missing. I think I&#8217;ve found a workaround, but first, I want to discuss the <code>url</code> input type, and how different browsers handle it.</p>
<p>HTML5 introduces several additional <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html">types for the <code>input</code> element</a>. One goal of these additional types is to offload error checking from the JavaScript layer to the browser. The HTML5 specification includes rules and patterns for data validation, including for URLs with the <code>url</code> attribute value.</p>
<p>According to the HTML5 specification, a <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#valid-url">URL is valid</a> when it is <b>not an empty string</b>, and is a <q class="b">valid absolute URL.</q> A complete definition of what constitutes a valid URL can be found in <a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> and <a href="http://tools.ietf.org/html/rfc3987">RFC 3987</a>. The short version is that a valid URL <em>must</em>, at minimum, consist of a scheme (https://, ftp://, gopher://) and a host name. If it does not, validation should fail, and the browser should throw an error.</p>
<p>Now most recent browsers<a href="#n20120103">*</a> take the following steps when it encounters an invalid URL such as <code>foo.com</code> or <code>example:80</code>.</p>
<ol>
<li>Fire an <code>invalid</code> event on the element in question.</li>
<li>Display an error message to the user. </li>
<li>Prevent form submission.</li>
</ol>
<p>To prevent careless input errors and guarantee validation, Opera will <a href="http://tiffanybbrown.com/code/2012/forms_input_type/default/">automatically prepend <code>http://</code></a> to the value of a URL input field if it is missing when the field loses focus (and if no pattern attribute has been added). This means that the invalid event usually will not be fired.</p>
<p>Of course, &#8220;most recent browsers&#8221; does not mean &#8220;all.&#8221; To date, <b>Safari</b> will fire the <code>invalid</code> event, but it will <b>do so silently</b>. No error message will be shown to the user. Form submission will succeed. The value submitted will be the same as what was entered by the user. <b>Android&#8217;s WebKit</b> behaves much the same way.</p>
<p>Safari also does something else differently <b>on mobile devices</b>: it shows a keyboard layout that is optimized for typing URLs, complete with a <kbd>.com</kbd> virtual button.<br />
<img src="http://webinista.s3.amazonaws.com/images/uploads/2012/01/iossafari-kbd.jpg" width="320" alt="The iOS keyboard"></p>
<p>Back to my friend&#8217;s use case: he wanted the benefit of mobile Safari&#8217;s UI sugar, so he was using <code>&lt;input type="url"&gt;</code>. He was unconcerned with whether the URL was valid because he was using server-side validation. His <strong>primary goal was ease of data entry for domain names on iOS devices</strong>.</p>
<p>However: <b>that isn&#8217;t really the purpose of <code>&lt;input type="url"&gt;</code></b>. Validation is, and a domain name by itself is not a valid URL.</p>
<p>But since the ship has sailed, the horse has left the barn, and the chickens have flown the coop, let&#8217;s talk about how to prevent Opera from automatically prepending http:// to the value of a URL input field.</p>
<p>To do this, we need to do two things:
<ul>
<li>Add a <code>novalidate</code> attribute to the form element.</li>
<li>Add a null <code>pattern</code> attribute to the field element.</li>
</ul>
<p>For example:</p>
<pre>&lt;form action="../form.php" method="post" novalidate&gt;
    &lt;input type="url" name="uri" id="uri" value="" pattern=""&gt;
    &lt;button type="submit"&gt;submit&lt;/button&gt;
&lt;/form&gt;</pre>
<p>The <code>novalidate</code> attribute turns off client-side validation for the entire form. The pattern attribute override&#8217;s Opera&#8217;s native validation checking.</p>
<p>See <a href="http://tiffanybbrown.com/code/2012/forms_input_type/stopprepending/">for yourself</a>. This will still trigger the URL-entry keyboard layout in iOS browsers, while killing Opera&#8217;s prepending.</p>
<p>If you use this technique, keep in mind that <b>server-side validation is even more important</b>. Because we are not providing any constraints on this data, we have increased our chances of getting invalid or malicious data. You should be validating anyway, however, since it is not 100% possible to guarantee that the data reaching our form script has actually come from our form.</p>
<p class="footnote" id="n20120103">*And by &#8220;recent browsers,&#8221; I mean the latest versions of Opera, Chrome, Firefox, and the forthcoming Internet Explorer 10, but not IE9.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2012/01/03/input-typeurl-validation-and-user-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is HTML5?</title>
		<link>http://tiffanybbrown.com/2011/10/26/what-is-html5/</link>
		<comments>http://tiffanybbrown.com/2011/10/26/what-is-html5/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 20:45:16 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6467</guid>
		<description><![CDATA[My super-short post that attempts to answer this question as completely and accurately as possible in three presentation-friendly bullet points. HTML5 &#8230; re-imagines HTML as an API with objects, events, interfaces, and methods or a collection of interfaces. defines an algorithm for generating a consistent, cross-browser friendly DOM tree, regardless of the quality of the [...]]]></description>
			<content:encoded><![CDATA[<p>My super-short post that attempts to answer this question as completely and accurately as possible in three presentation-friendly bullet points.</p>
<p>HTML5 &#8230; </p>
<ul>
<li>re-imagines HTML as an <abbr title="Application Programming Interface">API</abbr> <del datetime="2011-10-26T20:45:49+00:00">with objects, events, interfaces, and methods</del> <ins datetime="2011-10-26T20:45:49+00:00">or a collection of interfaces</ins>.</li>
<li>defines an algorithm for generating a consistent, cross-browser <ins datetime="2011-10-26T20:46:31+00:00">friendly</ins> DOM tree, regardless of the quality of the author&#8217;s markup.</li>
<li>adds new elements with semantic meaning and multimedia capabilities.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/10/26/what-is-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looping video in browsers that don&#8217;t yet support the loop attribute</title>
		<link>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/</link>
		<comments>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 10:00:43 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOMScripting]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6314</guid>
		<description><![CDATA[To date, Firefox does not yet support the loop attribute of the &#60;video&#62; element. This snippet is a simple work-around. Once the video&#8217;s ended event is fired, it calls the play method. For more, consult the media events section of the HTML5 specification.]]></description>
			<content:encoded><![CDATA[<p>To date, Firefox does not yet support the <code>loop</code> attribute of the <code>&lt;video&gt;</code> element. This snippet is a simple work-around. Once the video&#8217;s  <code>ended</code> event is fired, it calls the <code>play</code> method.</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/webinista/eUvrc/embedded/"></iframe></p>
<p>For more, consult the <a href="http://dev.w3.org/html5/spec-author-view/media-elements.html#mediaevents">media events</a> section of the HTML5 specification.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The type attribute, spaces and Opera browser</title>
		<link>http://tiffanybbrown.com/2011/04/12/the-type-attribute-spaces-and-opera-browser/</link>
		<comments>http://tiffanybbrown.com/2011/04/12/the-type-attribute-spaces-and-opera-browser/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 08:02:50 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[attributes]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[type]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5864</guid>
		<description><![CDATA[Debugging is part of my day job at Opera. Today, I stumbled across an issue related to white spaces and values for the HTML type attribute that affects Opera. Take a look at the following code: var d = 'test.js'; var s = document.createElement('script'); s.setAttribute("type", " text/javascript"); // note the leading space s.src = d; [...]]]></description>
			<content:encoded><![CDATA[<p>Debugging is part of my day job at <a href="http://www.opera.com/">Opera</a>. Today, I stumbled across an issue related to white spaces and values for the HTML <code>type</code> attribute that affects Opera.</p>
<p>Take a look at the following code:</p>
<pre>
var d = 'test.js';
var s = document.createElement('script');
s.setAttribute("type", " text/javascript"); // note the leading space
s.src = d;
document.querySelector("body").appendChild(s);
</pre>
<p>That space between the &quot; and <code>text/javascript</code> will cause Opera to fail. The script won&#8217;t load and or execute. Other browsers will handle that space with no problem, however. If you aren&#8217;t testing your site in Opera, you would miss this issue. </p>
<p>Keep in mind that this isn&#8217;t really a <em>bug</em>. It&#8217;s a difference in implementation. Opera is more strict about spaces in attributes than most browsers. The specification is either muddy or silent on this issue (depending on which version you consult). Yes, it&#8217;s something the development team is aware of and discussing internally. Yes, this also applies to the &lt;script&gt; tag.</p>
<p>In the meantime, make sure that you don&#8217;t include spaces at the beginning or end of the value of your type attributes.*</p>
<p>(Or leave it out if you&#8217;re using the HTML5 doctype.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/04/12/the-type-attribute-spaces-and-opera-browser/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quick PHP Tip: Uploading multiple files in HTML5</title>
		<link>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/</link>
		<comments>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 08:00:51 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 forms]]></category>
		<category><![CDATA[multiple file uploads]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5827</guid>
		<description><![CDATA[One of the neat things about HTML5 is that it allows for multiple file uploads in one file upload field. Of course, you have to have a browser that supports such a feature. Currently Opera 11.10 does. So do Firefox 4, the latest version of Chrome, and Safari 5.0.4. (Internet Explorer 9 does not.) Now [...]]]></description>
			<content:encoded><![CDATA[<p>One of the neat things about HTML5 is that it allows for multiple file uploads in one file upload field. Of course, you have to have a browser that supports such a feature. Currently Opera 11.10 does. So do Firefox 4, the latest version of Chrome, and Safari 5.0.4. (Internet Explorer 9 does not.)</p>
<p>Now what&#8217;s less clear is how to send data from multiple files to a server-side PHP script. Turns out, it&#8217;s quite easy. Treat it in the same way you&#8217;d treat any other array of options (radio buttons, for example) and include square ([]) brackets in the field name. See the code below for an example:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang="en-us"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;HTML5 Multiple File Upload&lt;/title&gt;
	&lt;link rel="stylesheet" href="s.css" media="screen"&gt;
	&lt;style media="screen"&gt;&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;form action="processor.php" method="post" enctype="multipart/form-data"&gt;
		&lt;input type="file" value="" name="upload[]" multiple&gt;
		&lt;button type="submit"&gt;Upload!&lt;/button&gt;
	&lt;/form&gt;
&lt;script&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>In processor.php, all we&#8217;re going to do is print the <code>$_FILES</code> array so you can see what&#8217;s happening.</p>
<pre>
&lt;pre&gt;
&lt;?php
     print_r( $_FILES );
?&gt;
&lt;/pre&gt;
</pre>
<p>Copy and paste this code and save it to your own server to see everything in action.</p>
<h3>Related:</h3>
<ul>
<li><a href="http://dev.w3.org/html5/spec/Overview.html">HTML5 Specification</a></li>
<li><a href="http://tiffanybbrown.com/html5forms/">Slides from my recent HTML5 Forms talk</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/29/quick-php-tip-uploading-multiple-files-in-html5/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>HTML5 does NOT allow &#8220;self-closing&#8221; tags …</title>
		<link>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/</link>
		<comments>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 16:31:34 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 parsing]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5735</guid>
		<description><![CDATA[&#8230; on non-void elements, at least. One of the big misconceptions about HTML5 is that any tag can be self-closed. That&#8217;s not true, though it appears that way. What HTML5 does is provide parsing rules for handling mismatched tags and markup. While it seems like self-closing tags are acceptable, that&#8217;s not the case. This post [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; on non-void elements, at least.</p>
<p>One of the big misconceptions about HTML5 is that <em>any</em> tag can be self-closed. <strong>That&#8217;s not true</strong>, though it appears that way. </p>
<p>What HTML5 does is provide <a href="http://dev.w3.org/html5/spec/parsing.html#parsing">parsing rules</a> for handling mismatched tags and markup. While it seems like self-closing tags are acceptable, that&#8217;s not the case. This post explains what&#8217;s really at play. Let&#8217;s take a look.</p>
<h2>&#8216;Self-closing&#8217;? Our old friend /&gt;</h2>
<p>Let&#8217;s separate void elements from empty tags that don&#8217;t contain content. You&#8217;re probably familiar with &quot;<a href="http://dev.w3.org/html5/spec/Overview.html#void-elements">void</a>&quot; elements &#8212; elements that can&#8217;t have any content. They include the <code>img</code>,  <code>br</code>,  <code>hr</code>, and <code>meta</code> elements. </p>
<p>In XHTML, we closed void elements according to the rules of XML syntax, which requires all elements to be closed with end tags or self-closing tags. That&#8217;s where we get the familiar space-slash (&nbsp;/&gt;) of XHTML. HTML5, however, uses HTML parsing syntax, making the &nbsp;/&gt; unnecessary for void elements. It is, however, valid to use it. Yes: <code>&lt;meta charset="UTF-8"&gt;</code> and <code>&lt;meta charset="UTF-8" /&gt;</code> are both acceptable.</p>
<p>Here&#8217;s the thing: a void element is not the same as an element that doesn&#8217;t contain any content. And &#8216;self-closing&#8217; does <em>not</em> mean the same thing as &#8220;the end tag is optional.&#8221;</p>
<p>To state it clearly:  <strong>Most HTML5 elements are <em>not</em> self-closing, but many elements do not require an end tag.</strong></p>
<h2>Wait, what? End tags are optional? It&#8217;s like HTML 3.2 all over again!</h2>
<p>Yes, some HTML5 elements do not require an end tag. Those circumstances are outlined in the <a href="http://dev.w3.org/html5/spec/Overview.html#normal-elements">HTML5 specification</a>. The <code>p</code> element, for example, does not require an end tag if <q>the <code>p</code> element is immediately followed by an <code>address</code>, <code>article</code>, <code>aside</code>, <code>blockquote</code>, <code>dir</code>, <code>div</code>, <code>dl</code>, <code>fieldset</code>, <code>footer</code>, <code>form</code>, <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code>, <code>h6</code>, <code>header</code>, <code>hgroup</code>, <code>hr</code>, <code>menu</code>, <code>nav</code>, <code>ol</code>, <code>p</code>, <code>pre</code>, <code>section</code>, <code>table</code>, or <code>ul</code>, element, or if there is no more content in the parent element and the parent element is not an <code>a</code> element.</q></p>
<p>In fact, some tags can be <a href="http://dev.w3.org/html5/spec/Overview.html#html-elements">omitted altogether</a>. Browsers with compliant HTML5 parsers (such as the recently released <a href="http://labs.opera.com/news/2011/02/22/">Opera 11.5 snapshot</a>) will add the end tags to the DOM.</p>
<p>But again: &quot;end-tag optional&quot; is a <em>different concept</em> than self-closing.</p>
<h2>How about some examples?</h2>
<p>Let&#8217;s take a look at the following bit of code:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en-us&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;HTML tag example&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot; media=&quot;screen&quot;&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;header&gt;
    &lt;hgroup&gt;
        &lt;h1&gt;When self-closing tags fail&lt;/h1&gt;
        &lt;h2&gt;Not all HTML5 elements are self closing, though some are &#8216;end tag optional&#8217;&lt;/h2&gt;
    &lt;/hgroup&gt;
&lt;/header&gt;

&lt;article&gt;
&lt;p&gt;This is to demonstrate that all HTML elements are &lt;em&gt;not&lt;/em&gt; actually self closing. There is a &quot;self-closed&quot; &lt;code&gt;p&lt;/code&gt; element following this closed paragraph. And it&#8217;s followed by a a &quot;self-closed&quot; &lt;code&gt;a&lt;/code&gt; tag and another paragraph.&lt;/p&gt;

&lt;p id=&quot;notaselfclosinggraf&quot; /&gt;&lt;a id=&quot;notaselfclosinganchor&quot; /&gt;

&lt;p&gt;As you can see, this paragraph is part of the preceeding link.&lt;/p&gt;

&lt;/article&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>You can <a href="http://tiffanybbrown/not-all-html5-tags-are-self-closing/index.html">view the code yourself</a>. Notice that the last paragraph is actually treated as the link text of the of the supposedly self-closed link before it. </p>
<p>Let&#8217;s take a look at <a href="http://tiffanybbrown/not-all-html5-tags-are-self-closing/">another example</a>:</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html lang="en-us"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width,user-scalable=yes,initial-scale=1.0"/&gt;
    &lt;title&gt;HTML tag example&lt;/title&gt;
    &lt;link rel="stylesheet" href="styles.css" media="screen" /&gt;
    &lt;style&gt;
        .trigger1{
            background: #369;
            border-radius: 4px;
            display:block;
            padding:3px;
            color:#fff;
        }

        #tvFinderImg{
            background:#0c0;
            display:block;
            width: 10px;
            height:10px;
        }    

        #tvFinderImg h3{
            border:1px dashed #c09;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;header&gt;
    &lt;h1&gt;Spans aren't self-closing either&lt;/h1&gt;
&lt;/header&gt;

&lt;div&gt;
&lt;a
class="trigger1" href="#tvFindersrchd"&gt;Lorem ipsum &lt;span id="tvFinderImg" /&gt;&lt;/a&gt;
&lt;p&gt;This is some copy after the "self-closed" tag.&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>In older browsers &#8212; Internet Explorer 8, for example &#8212; the supposedly self-closed tags are handled like unclosed tags. In those browsers, you will see a pink border around <q>This is some copy after the &#8220;self-closed&#8221; tag.</q> </p>
<p><img src="http://webinista.s3.amazonaws.com/images/uploads/2011/03/html5parsingspans.png" alt="" title="html5parsingspans" width="640" height="356" class="alignnone size-full wp-image-5740" /></p>
<p>In browsers that <em>do</em> have HTML5-compliant parsers &#8212; Firefox 4, the Opera 11.5 labs build mentioned above &#8212; the browser re-writes the DOM and adds a closing span tag. Yep. HTML5 saves developers from ourselves by providing rules for handling bad markup. View the DOM of that page in Opera 11.5 with Dragonfly, or Firefox 4 using Firebug (or in Chrome, Safari or IE9 using their developer tools) to see what I mean.</p>
<p>Let me restate this point for clarity: <strong>it only <em>appears</em> that self-closing tags are permitted in HTML5. In actuality, the browser parser treats non-void, self-closed tags as start tags and closes them for you.</strong></p>
<p>Don&#8217;t believe me? Try running <a href="http://validator.w3.org/check?uri=http%3A%2F%2Ftiffanybbrown.com%2Fnot-all-html5-tags-are-self-closing%2Findex.html&#038;charset=%28detect+automatically%29&#038;doctype=Inline&#038;group=0">these</a> <a href="http://validator.w3.org/check?uri=http%3A%2F%2Ftiffanybbrown.com%2Fnot-all-html5-tags-are-self-closing%2Fwithspans.html&#038;charset=%28detect+automatically%29&#038;doctype=Inline&#038;group=0&#038;user-agent=W3C_Validator%2F1.2">pages</a> through the W3C Markup Validator. </p>
<h3>So I can go back to sloppy code?</h3>
<p><em>Maybe</em>. I think you can make an excellent argument for using relaxed markup rules when targeting end-users who may be paying per byte of bandwidth or who are on slow connections &#8212; Canadian mobile users, for example. Send less code. Make the browser handle it.</p>
<p>But keep in mind that older browsers do not have HTML5 parsers. Internet Explorer 7 &#038; 8 do not. Opera 11.10 beta does not. Opera Mobile does not. (Older versions of WebKit technically don&#8217;t either, but WebKit has long <a href="http://www.webkit.org/blog/1273/the-html5-parsing-algorithm/">supported the <code>/&gt;</code> syntax</a>.)  If you have a large proportion of older browser users in your audience, stick to the stricter, XML-style syntax: if you have a start tag, use an end tag. The space-slash is optional for void elements. Don&#8217;t forget to validate!</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/23/html5-does-not-allow-self-closing-tags/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>HTML is not XML</title>
		<link>http://tiffanybbrown.com/2011/03/10/html-is-not-xml/</link>
		<comments>http://tiffanybbrown.com/2011/03/10/html-is-not-xml/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 11:10:12 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5688</guid>
		<description><![CDATA[Click to embiggen. View the page causing the error. The problem above was caused by three things working in concert. An HTML page was served with a Content-Type: application/xhtml+xml; response header. Here&#8217;s what the server response headers look like: HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 4001 Content-Type: application/xhtml+xml; charset=utf-8 Expires: -1 Server: Microsoft-IIS/7.0 [...]]]></description>
			<content:encoded><![CDATA[<div class="image640"><a href="http://webinista.s3.amazonaws.com/images/uploads/2011/03/html_is_not_xml.png"><img src="http://webinista.s3.amazonaws.com/images/uploads/2011/03/html_is_not_xml-640x385.png" alt="H T M L is not X M L" title="html_is_not_xml" width="640" height="385" class="alignnone size-medium wp-image-5689" /></a><br />Click to embiggen. <a href="http://www.e-magin.se/v5/viewer/files/default_t.aspx?gKey=6vrcn3jg">View the page causing the error</a>.</div>
<p>The problem above was caused by three things working in concert.</p>
<ol>
<li>An HTML page was served with a <code>Content-Type: application/xhtml+xml;</code> response header. Here&#8217;s what the server response headers look like:
<pre>
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 4001
Content-Type: application/xhtml+xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.0
Set-Cookie: ASP.NET_SessionId=x0zeoofiwnk2lmz5q4pcso45; path=/; HttpOnly
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Wed, 09 Mar 2011 23:17:34 GMT
</pre>
<p>Opera then parsed it according to X(HT)ML rules instead of HTML rules. (Note: this seems to be a <a href="http://my.opera.com/karlcow/blog/2011/03/03/wrong-to-be-right-with-xhtml">problem with IIS servers</a>.)
</li>
<li>An empty element was not self-closed. That <code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</code> tag should be <code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;</code>. Remember your space-slashes people! </li>
<li>A missing DOCTYPE means that even if errors 1 and 2 were fixed, Opera would still parse the document as XML instead of as XHTML. Opera users (and Firefox users) would get that lovely &#8220;This document had no style information&#8221; screen.</li>
</ol>
<p>While many browsers ignore mismatches between the document&#8217;s markup and the server response header, Opera does not. You also can&#8217;t be sure that future versions of common browsers won&#8217;t as more browsers adopt HTML5 parsing rules.*</p>
<p>In the current version of the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">HTML specification</a>, a document served as text/html is supposed to be parsed according to HTML rules. A document served with an application/xhtml+xml MIME type must be parsed according to the stricter markup rules of X(HT)ML. </p>
<p>Let me emphasize the above point: <strong>server MIME types &#8212; not DOCTYPES &#8212; determine which  parsing rules the browser applies.**</strong></p>
<p>So what does this mean? It means <strong>you need to be a better coder</strong>. Make sure that what your server says agrees with what your document delivers. If you can&#8217;t configure the server, make sure you code your documents according to the MIME type your server says it is. Use a <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-xhtml-syntax.html#parsing-xhtml-documents">DOCTYPE</a>. Understand the differences between XHTML and HTML. And, as always, <a href="http://validator.w3.org/">validate your code</a>. </p>
<p class="footnote">* This is a bad name for it, but I can&#8217;t think of a better one.
</p>
<p class="footnote">** That&#8217;s how it&#8217;s <em>supposed to</em> work at least.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/10/html-is-not-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Forms: A correction and revised slides</title>
		<link>http://tiffanybbrown.com/2011/03/07/html5-forms-a-correction-and-revised-slides/</link>
		<comments>http://tiffanybbrown.com/2011/03/07/html5-forms-a-correction-and-revised-slides/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 17:00:52 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5675</guid>
		<description><![CDATA[Cross-posted to my Opera blog A little over a week ago, I gave a talk to the Los Angeles HTML5 User Group about forms in HTML. I said something that was incorrect in the talk, and had a faulty example in the slides (that&#8217;s what happens when you pull it together in a day!). First [...]]]></description>
			<content:encoded><![CDATA[<p class="editors-note">Cross-posted to my <a href="http://my.opera.com/webinista/blog/2011/03/06/html5-forms-updated-slides">Opera blog</a></p>
<p>A little over a week ago, I gave a talk to the Los Angeles HTML5 User Group about forms in HTML. I said something that was incorrect in the talk, and had a faulty example in the slides (that&#8217;s what happens when you pull it together in a day!).</p>
<p>First the correction: I had a faulty slide in my talk, so it looked like a semicolon or space were allowable delimiters for <code>&lt;input type="email" mutiple&gt;</code>. That&#8217;s not the case. Only the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state">comma</a> is an acceptable separator.</p>
<p>And the clarification: I added a feature check to the <a href="http://tiffanybbrown.com/html5forms/demofallback/">fall back demo</a> so that it better demonstrates how to check whether the browser in question fully supports HTML5 form error checking.</p>
<p>Those revisions are in the slides now (a second revision). You can <a href="/html5forms/">view them</a>  or <a href="/html5forms/html5forms.zip">download a ZIP file</a> of the slides and demos.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/03/07/html5-forms-a-correction-and-revised-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon.com has fancy forms!</title>
		<link>http://tiffanybbrown.com/2011/02/28/amazon-com-has-fancy-forms/</link>
		<comments>http://tiffanybbrown.com/2011/02/28/amazon-com-has-fancy-forms/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 19:05:32 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5668</guid>
		<description><![CDATA[Using &#60;input type="email"&#62; for their log in form. This is how that attribute works in a capable browser.]]></description>
			<content:encoded><![CDATA[<div class="img600">
<img src="http://webinista.s3.amazonaws.com/images/uploads/2011/02/amazonHTML5forms.png" alt="" title="amazonHTML5forms" width="579" height="296" class="alignnone size-full wp-image-5669" /></div>
<p>Using <code>&lt;input type="email"&gt;</code> for their log in form. This is how that attribute works in a capable browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/02/28/amazon-com-has-fancy-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recommended: &#8220;Wrapping Things Nicely with HTML5 Local Storage&#8221;</title>
		<link>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/</link>
		<comments>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 17:19:12 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[local storage]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[super cookies]]></category>
		<category><![CDATA[web storage]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5153</guid>
		<description><![CDATA[Today&#8217;s 24Ways entry is from Christian Heilmann and takes a look at HTML5 Local Storage. Heilmann explains: Why client-side storage can be a good thing; The origins of and need for local storage; How to use local storage; When to use local storage; I implemented local storage in browsers that support it for our wedding [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s 24Ways entry is from <a href="http://wait-till-i.com/">Christian Heilmann</a> and takes a look at <a href="http://dev.w3.org/html5/webstorage/">HTML5 Local Storage</a>. </p>
<p>Heilmann explains: </p>
<ul>
<li>Why client-side storage can be a good thing;</li>
<li>The origins of and need for local storage;</li>
<li>How to use local storage;</li>
<li>When to use local storage;</li>
</ul>
<p>I implemented local storage in browsers that support it for our <a href="http://jtandtb.com/">wedding web site</a>. It saves the open or closed state of each content chunk. It was easy enough to save the data. And it gives the user a bit of added convenience.</p>
<p><a href="http://24ways.org/2010/html5-local-storage">Read the piece</a>.</p>
<p><strong>Keep in mind:</strong> local storage can be &#8212; and will be, and right now is probably being &#8212; used to create hard-to-delete &#8220;super cookies&#8221; for advertising, marketing, and other privacy-eroding things.</p>
<p>The good news is the web storage specification and all browsers that support it restrict local storage data to the originating domain. The bad news is that most browsers don&#8217;t offer an easy way to local storage objects. In Safari, for example, you&#8217;ll need to fire up Terminal (quit Safari first) and navigate to /Users/tbrown/Library/Safari/LocalStorage to delete items individually or collectively.</p>
<p>This isn&#8217;t a new issue. <a href="http://www.adobe.com/products/flashplayer/articles/lso/">Flash &#8216;cookies&#8217;</a> have existed for years (<a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html">view, manage or delete yours</a>). But what <em>is</em> new is that some (most?) browser makers have made it hard to manage and control what gets stored and for how long. </p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/12/07/recommended-wrapping-things-nicely-with-html5-local-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the promise of HTML5</title>
		<link>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/</link>
		<comments>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 14:00:47 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[christopher blizzard]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4269</guid>
		<description><![CDATA[The most important aspect of HTML5 isn&#8217;t the new stuff like video and canvas (which Safari and Firefox have both been shipping for years) it&#8217;s actually the honest-to-god promise of interoperability. Even stodgy old Microsoft, who has been doing their best to hold back the web for nearly a decade, understands this and you&#8217;ll see [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>The most important aspect of HTML5 isn&#8217;t the new stuff like video and canvas (which Safari and Firefox have both been shipping for years) it&#8217;s actually the honest-to-god promise of interoperability. Even stodgy old Microsoft, who has been doing their best to hold back the web for nearly a decade, understands this and you&#8217;ll see it throughout their marketing for IE9. &#8230; The idea that the same markup, even with mistakes, will be rendered exactly the same. HTML5 represents the chance for browsers to work together and find common ground.</p></blockquote>
<p>That&#8217;s Christopher Blizzard, the Director of Developer Relations and Open Source Evangelist at <a href="http://www.mozilla.org/">Mozilla</a> in his June post, <a href="http://www.0xdeadbeef.com/weblog/2010/06/intellectual-honesty-and-html5/">intellectual honesty and html5</a>.</p>
<p>He&#8217;s referring to Apple&#8217;s <a href="http://www.apple.com/html5/">HTML5 demo</a>. It seems somewhere along the way, HTML5 went from <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">specification</a> to <a href="http://twitter.com/mollydotcom/status/17678901200">consumer marketing buzzword</a>, and now <em>everyone</em> is confused about what HTML5 is and isn&#8217;t, and which browsers support it and don&#8217;t. </p>
<p>Thumbs down Apple. Thumbs down.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/12/on-the-promise-of-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The HTML5 video progress event: Redux</title>
		<link>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/</link>
		<comments>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 22:14:58 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[event handling]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4216</guid>
		<description><![CDATA[In my first post on HTML5 video and its progress event, I wrote: Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from [...]]]></description>
			<content:encoded><![CDATA[<p>In my first post on <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/">HTML5 video</a> and its progress event, I wrote:</p>
<blockquote><p>Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from the server. This is also a reflection of how each browser handles video downloads.</p></blockquote>
<p>Erm, that&#8217;s only sort of true. As zcorpan <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/#comment-60732130">explained in the comments</a>, the latest version of Firefox implements an old version of the specification. </p>
<p>In the most recent version of the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video">HTML5 spec</a>, the total and loaded properties of the progress event were removed and (mostly) replaced by the <code>video.buffered</code> property. </p>
<p>So while Firefox 3.6.x <em>is still the only browser that provides total and loaded properties in the progress event</em>, the latest revision added a new property to the <code>video</code> element that works <strong>similarly</strong> &#8212; note the emphasis on &#8216;similarly.&#8217;</p>
<p>What&#8217;s the difference? Both the <code>total</code> and <code>loaded</code> properties of the progress event express the download&#8217;s progress <strong>in terms of bytes.</strong> The <code>video.buffered</code> property expresses the download&#8217;s progress <strong>in terms of seconds</strong>. They&#8217;re similar in that you can determine the status of a download, but using seconds instead of bytes is more relevant for seeking within a timed media file. </p>
<p>By checking <code>video.buffered.end()</code>, we can determine how many seconds of the video are available to the browser and provide the relevant error handling (if a user seeks too far) or interface changes (such as a loading progress bar).</p>
<p>I am still learning how the <code>video.buffered</code> property works, particularly in conjunction other properties and events of the video object. I will post more about this later.</p>
<p>One thing to remember: Firefox has not yet implemented the <code>video.buffered</code> property. It is only available in Safari, Chrome and (sort of) in Opera (still learning the ins-and-outs). (And Internet Explorer doesn&#8217;t support the video element <em>at all</em>, though version 9 should when it&#8217;s released.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>And Still More on Flash versus HTML5</title>
		<link>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/</link>
		<comments>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 15:14:20 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4155</guid>
		<description><![CDATA[We need to do more than just point the browser at a video file like the image tag does &#8211; there’s a lot more to it than just retrieving and displaying a video. The &#60;video&#62; tag certainly addresses the basic requirements and is making good progress on meeting others, but the &#60;video&#62; tag does not [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>We need to do more than just point the browser at a video file like the image tag does &#8211; there’s a lot more to it than just retrieving and displaying a video. The <code>&lt;video&gt;</code> tag certainly addresses the basic requirements and is making good progress on meeting others, but the <code>&lt;video&gt;</code> tag does not currently meet all the needs of a site like YouTube.</p></blockquote>
<p>From the YouTube API Blog: <a href="http://apiblog.youtube.com/2010/06/flash-and-html5-tag.html">Flash and the HTML5 &lt;video&gt; tag</a>.</p>
<p>Software John Harding says that YouTube&#8217;s <a href="http://www.youtube.com/html5">HTML5 experiment</a> showed that the format isn&#8217;t <em>quite</em> ready for prime-time. Among the reasons? HTML5 video doesn&#8217;t yet have the robust streaming capabilities, encapsulation capability, content protection, or camera and microphone support. Flash, however, does.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/06/30/and-still-more-on-flash-versus-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proposed File API specification</title>
		<link>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/</link>
		<comments>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:15:35 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3017</guid>
		<description><![CDATA[Web applications should have the ability to manipulate as wide as possible a range of user input, including files that a user may wish to upload to a remote server or manipulate inside a rich web application. This specification defines the basic representations for files, lists of files, errors raised by access to files, and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Web applications should have the ability to manipulate as wide as possible a range of user input, including files that a user may wish to upload to a remote server or manipulate inside a rich web application. This specification defines the basic representations for files, lists of files, errors raised by access to files, and programmatic ways to read files. The interfaces and API defined in this specification can be used with other interfaces and APIs exposed to the web platform.</p></blockquote>
<p>From <a href="http://www.w3.org/TR/FileAPI/" class="ext">File API</a> working draft by Arun Ranganathan of Mozilla Corporation.</p>
<p>This API, if adopted by major browser vendors will allow client-side file manipulation and asynchronous uploads. </p>
<p>As far as I know, asynchronous uploads are only possible now using a combination of Flash and JavaScript such as <a href="http://swfupload.org/">SWFUpload</a>. Flickr&#8217;s uploader uses a <a href="http://ajaxian.com/archives/flickrs-new-file-uploader">similar technique</a>. Client-side file processing is impossible without a plug-in.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

