<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/css" href="https://www.aaron-gustafson.com/c/feed.min.css" ?><feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:amg="https://www.aaron-gustafson.com.com/amg-dtd/"><title>Aaron Gustafson: Content tagged browsers</title><subtitle>The latest 20 posts and links tagged browsers.</subtitle><id>https://www.aaron-gustafson.com</id><link href="https://www.aaron-gustafson.com/feeds/browsers.xml" rel="self"/><link href="https://www.aaron-gustafson.com"/><author><name>Aaron Gustafson</name><uri>https://www.aaron-gustafson.com</uri></author><updated>2024-05-29T16:32:54Z</updated><entry><id>https://www.aaron-gustafson.com/notebook/links/an-even-faster-microsoft-edge/</id><title type="html"><![CDATA[🔗 An even faster Microsoft Edge]]></title><link href="https://www.aaron-gustafson.com/notebook/links/an-even-faster-microsoft-edge/" rel="alternate" type="text/html" /><link href="https://blogs.windows.com/msedgedev/2024/05/28/an-even-faster-microsoft-edge/" rel="related" type="text/html" /><published>2024-05-29T16:32:54Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Progressive enhancement for the win! This post from the Edge team demonstrates that producing markup directly rather than relying on JavaScript to do it for you is faster — even in the browser UI!</p><blockquote><p>In this project, we built an entirely new markup-first architecture that minimizes the size of our bundles of code, and the amount of JavaScript code that runs during the initialization path of the UI. This new internal UI architecture is more modular, and we now rely on a repository of web components that are tuned for performance on modern web engines.  We also came up with a set of web platform patterns that allow us to ship new browser features that stay within our markup-first architecture and that use optimal web platform capabilities.</p></blockquote>]]></content><amg:twitter><![CDATA[Progressive enhancement for the win! This post from the Edge team demonstrates that producing markup directly rather than relying on JavaScript to do it for you is faster — even in the browser UI!]]></amg:twitter><category term="progressive enhancement" /><category term="browsers" /><category term="HTML" /><category term="CSS" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/safari-17-4-beta-release-notes/</id><title type="html"><![CDATA[🔗 Safari 17.4 Beta Release Notes]]></title><link href="https://www.aaron-gustafson.com/notebook/links/safari-17-4-beta-release-notes/" rel="alternate" type="text/html" /><link href="https://developer.apple.com/documentation/safari-release-notes/safari-17_4-release-notes" rel="related" type="text/html" /><published>2024-03-05T16:28:47Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Amidst all the kerfuffle over Apple’s push to drop PWAs (a.k.a., Home Screen Apps), two PWA features I worked on quietly landed in Safari for desktop: shortcuts &amp; categories.</p><blockquote><ul><li>Added support for the <code>shortcuts</code> manifest member on macOS. Shortcuts are available in the File menu and the Dock context menu. Users can set up custom keyboard shortcuts for them in System Settings &gt; Keyboard &gt; Keyboard Shortcuts &gt; App Shortcuts. (106137954)</li><li>Added support for the <code>categories</code> manifest member on macOS. When creating a Launchpad folder containing web apps, the folder is automatically named accordingly. (116480550)</li></ul></blockquote><p>🎉</p>]]></content><amg:twitter><![CDATA[Amidst all the kerfuffle over Apple’s push to drop PWAs (a.k.a., Home Screen Apps), two PWA features I worked on quietly landed in Safari for macOS: `shortcuts` & `categories`.]]></amg:twitter><category term="progressive web apps" /><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/safari-16-4-beta-release-notes/</id><title type="html"><![CDATA[🔗 Safari 16.4 Beta Release Notes]]></title><link href="https://www.aaron-gustafson.com/notebook/links/safari-16-4-beta-release-notes/" rel="alternate" type="text/html" /><link href="https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes" rel="related" type="text/html" /><published>2023-02-17T00:18:37Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>So much goodness in this release!</p><ul><li>Scroll to Text Fragment</li><li>Service Workers and Shared Workers can access the Permissions API.</li><li>Notification API in dedicated workers.</li><li>Reporting API.</li><li>Screen Orientation API.</li><li>Screen Wake Lock API.</li><li>unprefixed Fullscreen API</li><li>Push in web apps saved to the home screen on iOS</li><li>“id” member in Web App Manifest</li><li>Badging API.</li><li>third-party browsers can Add to Home Screen</li></ul>]]></content><amg:twitter><![CDATA[Awesome Safari release! 👏🏻👏🏻👏🏻]]></amg:twitter><category term="browsers" /><category term="progressive web apps" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.developer.apple.com/tutorials/developer-og.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/microsoft-edge-for-everyone-making-the-web-more-accessible/</id><title type="html"><![CDATA[🔗 Microsoft Edge for everyone | Making the web more accessible]]></title><link href="https://www.aaron-gustafson.com/notebook/links/microsoft-edge-for-everyone-making-the-web-more-accessible/" rel="alternate" type="text/html" /><link href="https://www.youtube.com/watch?v=9tFYYOifHmI" rel="related" type="text/html" /><published>2022-11-01T23:24:43Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Looks like Edge is rolling out some really awesome accessibility features including the ability to change a page’s colors (beyond light &amp; dark mode), live-captioning of video &amp; audio, and more…</p><p><a href="https://www.youtube.com/watch?v=9tFYYOifHmI">https://www.youtube.com/watch?v=9tFYYOifHmI</a></p>]]></content><amg:twitter><![CDATA[Looks like Edge is rolling out some really awesome accessibility features including the ability to change a page’s colors (beyond light &amp; dark mode), live-captioning of video & audio, and more…]]></amg:twitter><amg:summary><![CDATA[Excellent overview of some of the new accessibility features in Edge.]]></amg:summary><summary type="html"><![CDATA[<p>Excellent overview of some of the new accessibility features in Edge.</p>]]></summary><category term="accessibility" /><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/spellcheckers-exfiltrating-pii_-not-so-fast/</id><title type="html"><![CDATA[✍🏻 Spellcheckers exfiltrating PII… not so fast]]></title><link href="https://www.aaron-gustafson.com/notebook/spellcheckers-exfiltrating-pii_-not-so-fast/" rel="alternate" type="text/html" /><published>2022-09-19T21:34:51Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>A recent post from the <a href="https://www.otto-js.com">Otto JS</a> research team highlighted <a href="https://www.otto-js.com/news/article/chrome-and-edge-enhanced-spellcheck-features-expose-pii-even-your-passwords">how spellcheck services can inadvertently exfiltrate sensitive user data, including passwords</a>, from your site. To be honest, I found the post a tad alarmist and lacking when it came to recommending solid protections. Consider this your no-nonsense guide to protecting your users’ sensitive information.</p><h2 id="background" tabindex="-1"><a class="header-anchor" href="#background" aria-hidden="true">#</a> Background</h2><p>In their research, the Otto JS team found that Chrome and Edge each use their own web services to drive their spellchecking services. In Chrome’s case it seems to only be with their “advanced spellcheck” feature turned on. I was able to validate this behavior using Charles on macOS Monterey using the latest Chrome Stable and the latest Edge Canary. I did not see the same exfiltration happen with Safari or Firefox. I created <a href="https://codepen.io/aarongustafson/pen/gOzWNgM">a CodePen form with several fields to test different permutations of form field attributes and behaviors</a>. What I am sharing, below, is a result of that testing.</p><h2 id="what-gets-sent%3F" tabindex="-1"><a class="header-anchor" href="#what-gets-sent%3F" aria-hidden="true">#</a> What gets sent?</h2><p>In both Chrome and Edge, the information sent to their services is the text value itself, disconnected from any specific field name. Chrome also sends the user’s language, and country. Edge, which uses the Microsoft Editor service under the hood, also sends a bunch of licensing details and the user’s language.</p><h2 id="password-fields-are-safe" tabindex="-1"><a class="header-anchor" href="#password-fields-are-safe" aria-hidden="true">#</a> Password fields are safe</h2><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span><span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password<span class="token punctuation">”</span></span><span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password<span class="token punctuation">”</span></span><span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password<span class="token punctuation">”</span></span><span class="token punctuation">/&gt;</span></span></code></pre><p>Browsers do a lot to protect the contents of password fields already, so I wasn’t surprised to see that the contents of password fields are <strong>not</strong> passed to a spellcheck service.</p><p>If you are not using a true password field, however, the contents of that field are not protected in the same way. If you build a custom password control, you’re on the hook to replicate the entirety of the browser’s feature set when it comes to protecting user data. Unless you’re a glutton for punishment, you should probably just use the built-in password field instead.</p><h2 id="fields-marked-readonly-and-disabled-are-not-exposed" tabindex="-1"><a class="header-anchor" href="#fields-marked-readonly-and-disabled-are-not-exposed" aria-hidden="true">#</a> Fields marked readonly and disabled are not exposed</h2><p>As you’d hope, neither read-only fields nor disabled fields are exposed ot the service. This even holds true when you change the values of these fields programmatically or via DevTools.</p><p>I should note, however, that <code>readonly</code> fields <em>are</em> send to the server when the form is submitted and their contents are editable via JavaScript and DevTools, so you should always assume <code>readonly</code> fields are informational for the user only and never trust their contents on the server side. Fields that are marked <code>disabled</code>, in contrast, are never sent to the server.</p><h2 id="you-can-protect-interactive-fields-with-the-spellcheck-attribute" tabindex="-1"><a class="header-anchor" href="#you-can-protect-interactive-fields-with-the-spellcheck-attribute" aria-hidden="true">#</a> You can protect interactive fields with the <code>spellcheck</code> attribute</h2><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span><span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>no-spellcheck<span class="token punctuation">”</span></span><span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>no-spellcheck<span class="token punctuation">”</span></span><span class="token attr-name">spellcheck</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>false<span class="token punctuation">”</span></span><span class="token punctuation">/&gt;</span></span></code></pre><p>The <code>spellcheck</code> attribute can be applied to any element and setting it to “false” instructs browsers to turn off spellchecking services for its contents. The post from Otto JS showed this being used globally on the <code>body</code> element, but that is overkill. It would be better to use the attribute on specific fields you want to protect, as shown above.</p><h2 id="don%E2%80%98t-forget-about-password-controls-that-support-show%2Fhide" tabindex="-1"><a class="header-anchor" href="#don%E2%80%98t-forget-about-password-controls-that-support-show%2Fhide" aria-hidden="true">#</a> Don‘t forget about password controls that support show/hide</h2><p>Edge has a neat feature in its password field implementation where it enables a user to toggle the visibility of the password within the control itself. When users show their password using that built-in functionality, no content is shared with the spellchecker. Not all browsers have this feature, however, which has led to JavaScript-based implementations that simply swap the “password” <code>type</code> value for “text” to show the contents and then swap it back again to hide the contents. Here’s a quick &amp; dirty example of what the toggle button’s event handler might look like:</p><pre class="language-js" tabindex="0"><code class="language-js"><span class="token keyword">function</span><span class="token function">togglePassword</span><span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">var</span> $btn <span class="token operator">=</span> e<span class="token punctuation">.</span>target<span class="token punctuation">,</span>$field <span class="token operator">=</span> $btn<span class="token punctuation">.</span>parentNode<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">“input”</span><span class="token punctuation">)</span><span class="token punctuation">,</span>state <span class="token operator">=</span> $field<span class="token punctuation">.</span>type<span class="token punctuation">;</span><span class="token keyword">if</span><span class="token punctuation">(</span>$btn <span class="token operator">&amp;&amp;</span> $field<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">if</span><span class="token punctuation">(</span>state <span class="token operator">==</span><span class="token string">“password”</span><span class="token punctuation">)</span><span class="token punctuation">{</span>$field<span class="token punctuation">.</span>type <span class="token operator">=</span><span class="token string">“text”</span><span class="token punctuation">;</span>$btn<span class="token punctuation">.</span>innerText <span class="token operator">=</span><span class="token string">“Hide”</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>$field<span class="token punctuation">.</span>type <span class="token operator">=</span><span class="token string">“password”</span><span class="token punctuation">;</span>$btn<span class="token punctuation">.</span>innerText <span class="token operator">=</span><span class="token string">“Show”</span><span class="token punctuation">;</span><span class="token punctuation">}</span>e<span class="token punctuation">.</span><span class="token function">preventDefault</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>e<span class="token punctuation">.</span><span class="token function">stopPropagation</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>The problem with this approach, when it comes to the spellchecker, is that the text field is considered fair game for checking. Its contents aren’t sent right away, but if the field receives focus or its value is changed in any way while in the “text” state, its contents are sent to the spellcheck service.</p><p>Protecting the field’s contents are fairly easy, however: turn off the spellchecker for that field, even in its “password” state.</p><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span><span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password<span class="token punctuation">”</span></span><span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password-show-nospellcheck<span class="token punctuation">”</span></span><span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>password-show-nospellcheck<span class="token punctuation">”</span></span><span class="token attr-name">spellcheck</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>false<span class="token punctuation">”</span></span><span class="token punctuation">/&gt;</span></span></code></pre><p>With <code>spellcheck=&quot;false&quot;</code> in place, you can turn the field into a text field safely, without the contents being exposed to the spellcheck service.</p><hr><p>HTML is a pretty powerful language and, when wielded properly, can be an excellent tool for protecting user data, provided we use it properly. And know that you know how to protect your users’ sensitive data, minimize this tab and start filing those pull requests…</p>]]></content><amg:twitter><![CDATA[A collection of ways you can keep sensitive user data protected from accidental exfiltration.]]></amg:twitter><amg:summary><![CDATA[A recent post from the Otto JS research team highlighted how spellcheck services can inadvertently exfiltrate sensitive user data, including passwords, from your site. To be honest, I found the post a tad alarmist and lacking when it came to recommending solid protections. Consider this your no-nonsense guide to protecting your users’ sensitive information.]]></amg:summary><summary type="html"><![CDATA[<p>A recent post from the Otto JS research team highlighted how spellcheck services can inadvertently exfiltrate sensitive user data, including passwords, from your site. To be honest, I found the post a tad alarmist and lacking when it came to recommending solid protections. Consider this your no-nonsense guide to protecting your users’ sensitive information.</p>]]></summary><category term="browsers" /><category term="forms" /><category term="HTML" /><category term="security" /><category term="privacy" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.aaron-gustafson.com/i/posts/2022-09-19/hero.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/publications/articles/from-url-to-interactive/</id><title type="html"><![CDATA[📄 From URL to Interactive]]></title><link href="https://alistapart.com/article/from-url-to-interactive/" rel="alternate" type="text/html" /><published>2018-10-25T00:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>When we think about it, our whole industry depends on our faith in a handful of “black boxes” few of us fully understand: browsers. We hand over our HTML, CSS, JavaScript, cross our fingers, and hope they render the experience we have in our heads.</p>]]></content><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9/</id><title type="html"><![CDATA[🔗 Building websites for Safari Reader Mode and other reading apps.]]></title><link href="https://www.aaron-gustafson.com/notebook/links/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9/" rel="alternate" type="text/html" /><link href="https://medium.com/@mandy.michael/building-websites-for-safari-reader-mode-and-other-reading-apps-1562913c86c9" rel="related" type="text/html" /><published>2018-09-10T22:13:10Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Mandy Michael has another great piece on the importance of HTML semantics, this time with a focus on browsers in “reader mode” (and apps that offer similar experiences). Give it a read, then go tend to your markup.</p>]]></content><amg:twitter><![CDATA[Here’s another great piece from @Mandy_Kerr on the importance of HTML semantics, this time with a focus on browsers in “reader mode” (and apps that offer similar experiences). Give it a read, then go tend to your markup.]]></amg:twitter><category term="HTML" /><category term="browsers" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://miro.medium.com/max/889/1*icqoUJN1E37T_bbi4gPHOg.png" /></entry><entry><id>https://www.aaron-gustafson.com/publications/articles/welcoming-progressive-web-apps-to-microsoft-edge-and-windows-10/</id><title type="html"><![CDATA[📄 Welcoming Progressive Web Apps to Microsoft Edge and Windows 10]]></title><link href="https://blogs.windows.com/msedgedev/2018/02/06/welcoming-progressive-web-apps-edge-windows-10/" rel="alternate" type="text/html" /><published>2018-02-06T00:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Some of my Microsoft colleagues and I did a run-down of how we are supporting Progressive Web Apps in Windows.</p>]]></content><category term="progressive web apps" /><category term="Microsoft" /><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/making-web-smoother-independent-rendering/</id><title type="html"><![CDATA[🔗 Making the web smoother with independent rendering]]></title><link href="https://www.aaron-gustafson.com/notebook/links/making-web-smoother-independent-rendering/" rel="alternate" type="text/html" /><link href="https://blogs.windows.com/msedgedev/2017/08/17/making-web-smoother-independent-rendering/" rel="related" type="text/html" /><published>2017-08-25T18:38:19Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Edge 16 brings independent rendering to every page on the Web.</p>]]></content><category term="browsers" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogs.windows.com/wp-content/themes/microsoft-stories-theme/img/theme/logos/windows.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/ios-11-safari-google-amp-sharing-url-scheme/</id><title type="html"><![CDATA[🔗 iOS 11 Safari will turn Google AMP links back into regular ones when sharing]]></title><link href="https://www.aaron-gustafson.com/notebook/links/ios-11-safari-google-amp-sharing-url-scheme/" rel="alternate" type="text/html" /><link href="https://www.theverge.com/2017/8/23/16193584/ios-11-safari-google-amp-sharing-url-scheme" rel="related" type="text/html" /><published>2017-08-25T18:15:43Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<blockquote><p>Nice one Safari team! <a href="https://t.co/YTO6rZR3dd">https://t.co/YTO6rZR3dd</a></p><p>—<a href="https://twitter.com/cramforce/status/900478709215281152">Malte Ubl (@cramforce)</a></p></blockquote><p>This is great to see! I think <code>link[rel=&quot;canonical&quot;]</code> is not used often enough. I’d love to see all sharing protocols adopt this approach for things like cross-posts, m-dot sites, and more.</p>]]></content><category term="browsers" /><category term="URLs" /><category term="HTML" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn.vox-cdn.com/thumbor/U0uctblrIw4SFBrfwGsPCAyJXmw=/0x0:842x474/1600x900/cdn.vox-cdn.com/uploads/chorus_image/image/56334257/Screen_Shot_2015-10-07_at_10.20.00_AM.0.0.png" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/my-top-takeaways-from-the-edge-web-summit-2016/</id><title type="html"><![CDATA[✍🏻 My Top Takeaways From the 2016 Edge Web Summit]]></title><link href="https://www.aaron-gustafson.com/notebook/my-top-takeaways-from-the-edge-web-summit-2016/" rel="alternate" type="text/html" /><published>2016-04-06T19:18:15Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Earlier this week, my colleagues on the Microsoft Edge team put on the second of what has now become an annual event: <a href="https://web.archive.org/web/http://lanyrd.com/2016/edgesummit/">the Edge Web Summit</a>. The format was a little different this year, with team members from across the organization delivering quick, punchy 30-minute talks on topics ranging from standard implementations to the user experience of a browser to real-time communications. I live-tweeted quite a few of the talks, but I thought I’d provide a bit of a round-up of what was revealed, discussed, and more so you can read it all in one place.</p><ul><li>Since launching Edge 8 months ago, the team has pushed 12 update releases, 128 new features, and 6,527 bug fixes!</li><li>The team has launched a new, highly transparent bug tracker for Edge: <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/">issues.microsoftedge.com</a>.</li><li>The Edge team has done a ton of research into what specs are being used and how they are being used on the open Web. They are starting to share this information on <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/data/">data.microsoftedge.com</a>. It currently consists of 2 parts: 1) <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/usage/">usage data</a> from real sites that looks at not only CSS properties in use, but values too; and 2) <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/catalog/">a catalog of available APIs</a> and a detailed analysis of browser support, down to specific configuration and property values.</li><li>Hot on the tails of <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/remote/">RemoteIE</a> opening up for Linux users, RemoteEdge is coming soon! Jacob Rossi showed <a href="https://twitter.com/aarongustafson/status/717022717652828163">a screenshot of an Edge instance running on Azure, within Chrome</a>. So cool!</li><li><a href="https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section">Text-to-speech</a> directly from within JavaScript!</li><li>The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API">Fetch API</a>!</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon">Beacons</a> as an alternative to blocking JavaScript requests for telemetry data: <code>navigator.sendBeacon( uri, data )</code>.</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API">Web notifications</a>!</li><li><a href="https://www.w3.org/TR/WOFF2/">WOFF 2</a> font support for better compression and faster downloads/decompression!</li><li>The team is currently prototyping and investigating <a href="https://www.w3.org/TR/service-workers/">Service Workers</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Push_API">Push Notifications</a>, <a href="https://www.w3.org/TR/shadow-dom/">Shadow DOM</a>, <a href="https://www.w3.org/TR/custom-elements/">Custom Elements</a>, <a href="https://www.w3.org/Payments/">Web Payments</a>, <a href="https://www.w3.org/community/webassembly/">Web Assembly</a>, and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import">ES Modules</a>.</li><li>Cortana in Edge has gotten some major upgrades, such as being able to “Ask Cortana” about an image to get more information (like a recipe for the cookies you saw on Pinterest that did’t include a link).</li><li>Microsoft open-sourced <a href="https://github.com/MicrosoftEdge/css-usage">the CSS crawler powering their data portal</a> so other browser vendors can run it too.</li><li><a href="https://en.wikipedia.org/wiki/FIDO_Alliance">FIDO</a>-based login (like <a href="http://windows.microsoft.com/en-us/windows-10/getstarted-what-is-hello">Windows Hello</a>) is coming to the Web!</li><li><a href="http://windows.microsoft.com/en-us/windows/hear-text-read-aloud-narrator">Microsoft’s Narrator</a> screen reader now supports a “Developer Mode” that blanks out the current app (such as your browser window) in order to enable you to more easily debug accessibility issues.</li><li>The F12 tools in Edge now enable you to view the previously mysterious <a href="https://www.paciellogroup.com/blog/2015/01/the-browser-accessibility-tree/">Accessibility Tree</a> in addition to allowing you to drill more deeply into the various properties of an element that relate to its accessibility.</li></ul><p>I didn’t take a ton of notes in the second half of the day as I was prepping for <a href="https://channel9.msdn.com/Events/WebPlatformSummit/edgesummit2016/ES1612">my own session on accessibility</a>, but other highlights included building &amp; debugging <a href="https://blogs.windows.com/msedgedev/2016/03/17/preview-extensions/">extensions for Edge</a> (tldr; you can easily port Chrome extensions) and cool things you can do using <a href="https://www.microsoft.com/en-us/windows/Continuum">Continuum</a>.</p><p>Overall, the event was incredibly informative and has me really excited about the work the Edge team is doing and where the browser is going. The new stuff that‘s ready for prime time will be out for the public in <a href="https://blogs.windows.com/windowsexperience/2016/03/30/windows-10-anniversary-update-brings-new-experiences-and-developer-opportunity/">the Anniversary Update of Windows 10</a> this Summer, but some of it is has already landed in <a href="https://insider.windows.com/">Windows Insider</a> builds.</p>]]></content><amg:twitter><![CDATA[My top takeaways from the 2016 Edge Web Summit: ]]></amg:twitter><amg:summary><![CDATA[Earlier this week, my colleagues on the Microsoft Edge team put on the second of what has now become an annual event: <a href="https://web.archive.org/web/http://lanyrd.com/2016/edgesummit/">the Edge Web Summit</a>. The format was a little different this year, with team members from across the organization delivering quick, punchy 30-minute talks on topics ranging from standard implementations to the user experience of a browser to real-time communications. I live-tweeted quite a few of the talks, but I thought I’d provide a bit of a round-up of what was revealed, discussed, and more so you can read it all in one place.]]></amg:summary><summary type="html"><![CDATA[<p>Earlier this week, my colleagues on the Microsoft Edge team put on the second of what has now become an annual event: <a href="https://web.archive.org/web/http://lanyrd.com/2016/edgesummit/">the Edge Web Summit</a>. The format was a little different this year, with team members from across the organization delivering quick, punchy 30-minute talks on topics ranging from standard implementations to the user experience of a browser to real-time communications. I live-tweeted quite a few of the talks, but I thought I’d provide a bit of a round-up of what was revealed, discussed, and more so you can read it all in one place.</p>]]></summary><category term="browsers" /><category term="conferences" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/ramblings-on-new-browser-features-interoperability-craft-and-the-future-of-the-web/</id><title type="html"><![CDATA[✍🏻 Ramblings on New Browser Features, Interop&shy;erability, Craft, and the Future of the Web]]></title><link href="https://www.aaron-gustafson.com/notebook/ramblings-on-new-browser-features-interoperability-craft-and-the-future-of-the-web/" rel="alternate" type="text/html" /><published>2015-08-07T14:14:23Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Last week <a href="http://www.quirksmode.org/about/">Peter-Paul Koch (PPK)</a> posted <a href="http://www.quirksmode.org/blog/archives/2015/07/stop_pushing_th.html">a lengthy treatise on why browsers should stop “pushing the web forward”</a>. I thoroughly enjoyed the read and agree with him on a number of points. I also agreed with the well-articulated responses from <a href="https://jakearchibald.com/2015/if-we-stand-still-we-go-backwards/">Jake Archibald (of Google)</a> and <a href="https://dev.opera.com/blog/on-a-moratorium-on-new-browser-features/">Bruce Lawson (of Opera)</a>. I guess I’m saying I see both sides. Like <a href="http://chriscoyier.net/">Chris Coyier</a>, I live in <a href="https://css-tricks.com/the-gray-gray-ghost-that-i-call-home/">a world filled with varying shades of grey</a> rather than stark black &amp; white.</p><h2 id="new-features-vs.-interoperability" tabindex="-1"><a class="header-anchor" href="#new-features-vs.-interoperability" aria-hidden="true">#</a> New Features vs. Interoperability</h2><p>One of the arguments PPK makes is against browsers competing on features. It really rang true to me:</p><blockquote><p>I call for a moratorium on new browser features of about a year. Let’s postpone all completely new features that as of right now don’t yet work in any browser.</p><p>Browsers are encouraged to add features that are already supported by other browsers, and to write bug fixes. In fact, finding time for these unglorious but necessary jobs would be an important advantage of the moratorium. As an added bonus it would decrease the amount of tools web developers need.</p></blockquote><p><a href="/notebook/competing-on-chrome/">Back in January</a>, I wrote about how I was excited by Microsoft’s announcement of “Project Spartan” (now “Microsoft Edge”) and it’s focus on interoperability. Interoperability’s a long word, so I’m gonna go with “interop” from here on out.</p><p>I was not on the Microsoft payroll at the time, but I was still stoked to see their focus on interop in the new rendering engine. They’d even gone, in my humble opinion, above and beyond in this regard—aliasing Webkit’s experimental, legacy CSS syntaxes to their modern, standards-based implementations. This ensured poorly coded sites worked well in their browser and didn’t penalize users for a designer’s mistake. Talk about being a good web citizen!</p><p>Of course, Microsoft Edge wasn’t the first browser to do this. <a href="http://snook.ca/archives/html_and_css/vendor-prefixes-competing">IE 7 Mobile implemented <code>-webkit-text-size-adjust</code> back in 2010</a>. <a href="https://dev.opera.com/articles/opera-mobile-emulator-webkit-prefix-support/">Opera</a> and <a href="https://wiki.mozilla.org/Platform/Layout/CSS_Compatibility#questions_and_methodology">Mozilla</a> also <a href="https://lists.w3.org/Archives/Public/www-style/2012Feb/0313.html">felt the pressure</a> and eventually implemented <code>-webkit-</code> vendors prefixes in versions of their browsers. It’s a weird world when one browser vendor is forced to implement another’s proprietary syntax just to make the web work, but it’s the sad state of things in our <a href="http://christianheilmann.com/2015/07/17/the-full-stackoverflow-developer/">full StackOverflow development</a> world.</p><p>With the move away from vendor prefixes in CSS to <a href="http://www.howtogeek.com/139736/how-to-change-hidden-advanced-settings-in-any-browser/">“feature flags”</a>, you’d think this sort of thing would be behind us, but it’s not. <a href="http://www.otsukare.info/">Karl Dubost</a>, of Mozilla, recently <a href="http://www.otsukare.info/2015/07/29/vendor-prefixes-market">bemoaned the implications of Apple’s latest vendor prefix silliness</a> on his blog. In that post, he made a keen observation:</p><blockquote><p>We have reached the point where browser vendors have to start implementing or aliasing these WebKit prefixes just to allow their users to browse the Web, see <a href="https://wiki.mozilla.org/Compatibility/Mobile/Non_Standard_Compatibility">Mozilla</a> in Gecko and <a href="https://twitter.com/jacobrossi/status/614544147941355520">Microsoft</a> in Edge. The same thing is happening over again. In the past, browser vendors had to implement the quirks of IE to be compatible with the Web. As much as I hate it, we will have to specify the current <code>-webkit-</code> prefixes to implement them uniformly.</p></blockquote><p>I completely understand PPK’s desire for browsers to apply the brakes a bit and focus on interop. With new features being added to “the web”—but in reality only browser X, Y, or Z—on the regular, without guaranteed interop, it feels like we’re stirring up the browser wars again. All the new shiny is exciting, but I lived through the browser wars the first time and they sucked for everyone involved. <span data-quotable>Web standards helped us get everyone on the same page and brokered what we’d hoped was going to be a lasting peace.</span></p><p>Now I’m not sure I agree with applying the brakes for a specific amount of time, but I do see great value in prioritizing interop over new features. And when browsers do implement new features, they should definitely put them behind feature flags (or some similar opt-in) to ensure we—the web development community—don’t start relying on some fancy new feature before it’s been vetted. Feature flags are awesome because they allow me, a designer, to experiment with a new technology <em>in my own browser</em> without affecting things for everyone else on the open web.</p><p><a href="http://alistapart.com/article/prefix-or-posthack">We used to think vendor prefixes were enough of a deterrent</a> to using a particular experimental CSS property or JavaScript method. Sadly that’s turned out to not be the case. I would bet good money on the sad reality that 80% of the working web designers out there don’t understand that <code>-*-</code> means “experimental” or even “proprietary”. We—the web design authors, speakers, educators, and other influencers—did a shitty job landing that message with the industry as a whole. But even if we’d hounded people about it, it probably wouldn’t have mattered: Vendor-prefixed properties work. And now they work even in browsers they were never meant to.</p><p>So, here’s what I’d love to see browser vendors do:</p><ol><li>Prioritize interop over new features. Don’t halt development on new features, just put them on the back burner so the rising tide can, as they say, lift <em>all</em> the ships. Web developers and end users all benefit when there’s feature parity and stability among browsers.</li><li>Put a ban on vendor-prefixes. They are not generally understood to be experimental. If you feel you must use a vendor prefix, ensure it’s only enabled by a corresponding feature flag.</li><li>Use feature flags (or some similar opt-in) to enable developers to test experimental features in their own browsers, but also to ensure they aren’t available on the “open web” before they’re ready.</li></ol><h2 id="the-web-vs.-platform-specific-development" tabindex="-1"><a class="header-anchor" href="#the-web-vs.-platform-specific-development" aria-hidden="true">#</a> The Web vs. Platform-Specific Development</h2><p>PPK has harped on this a few times. There is currently a palpable tension between platform-specific development and the web. It’s driving most of the new features in the web “platform”<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> and it’s giving many of us old-timers a touch of angina.</p><p>The reason is simple: The web was created as a massively interconnected document repository. A wealth of knowledge dependent on the hyperlink and the URL. The web was (and indeed still is) stateless by default, meaning it has no idea who you are or what you’ve done from request to request. This is very egalitarian: everyone has access and anyone can contribute.</p><p>As more businesses moved online, the web became necessarily transactional. Suddenly websites needed to know information about your “state” so they could sell you things and track your movements around their site and the rest of the web. With the advent of cookies and the Common Gateway Interface (CGI), a web server could adjust the content it sent in response to a request, based on what it knew about you and what you were doing.</p><p>Taking this simple capacity a step further, it became possible to write actual software on the web. Content management systems were probably the first big chunk of software to move online, but more soon followed. JavaScript came along and allowed us to add a bit of logic to the client side, reducing our reliance on round-trips to the server. Then we got Ajax and the whole JavaScript world exploded. We now have web-based photo editors, integrated development environments (IDEs), games, and more, all reliant on JavaScript’s ability to interact with the browser and manipulate what the user sees in real-time.</p><p>There were earlier machinations certainly, but the last ten years have seen the biggest push to bring more traditional software-like interactions to the web. Dozens of organizations, big and small, are trying to make their mark creating <em>the</em> framework for building these “next-generation” web-based app experiences. Honestly, I don’t have a problem with that. I don’t really have an interest in client-side frameworks, but I don’t have a problem with them either… provided developers who wish to bring their programming talents to the web take a little time to learn about the medium.</p><p><span data-quotable>If you don’t take the time to understand how the web works, you’ll spend half your time cursing it and the other half trying to work around the things that frustrate you (which you will probably write off as “poorly designed” or “ill-conceived”).</span> If you don’t understand how the web works, you’ll build fragile experiences that collapse like a house of cards when any one of your many dependencies—the network, JavaScript, some particular element or browser API—isn’t available. If you don’t understand how the web works, what you build will simply be <a href="https://adactio.com/journal/8245">on the web, not of it</a>.</p><p>I don’t particularly care much about bringing “native like” experiences to the web. It’s not that I don’t write software (I do), I just don’t really care if something I make for the web feels like a piece of installed software. I’ll do everything in my power to ensure my users have a great experience, but I know that each person’s experience will be a little bit different and I no longer feel the need to enforce my will on their experience. I’d rather create many ways for someone to interact with the things I build and hope one or more of those work well for whoever happens by and whatever device they happen to be using.</p><p>Platform-specific software and the web have always co-existed. We had installed software on computers long before the web even existed and we will continue to have installed software for as long as there are computers. Some software will move to the web if it makes sense for it to do so. Other software will remain platform-specific. Either option could be right or wrong depending on what you are trying to do. For instance, I would never personally write a photo editor in the browser because image processing requires a lot of memory and CPU cycles. Putting it in a browser moves it one more level away from the hardware. Abstraction eases development, but it invariably increases overhead and reduces performance.</p><p>Traditional software and the web can and should co-exist. They also can and should continue to inform one another. Ultimately, that will help us better serve the needs of our users, however they use our creations.</p><h2 id="change-vs.-stagnation" tabindex="-1"><a class="header-anchor" href="#change-vs.-stagnation" aria-hidden="true">#</a> Change vs. Stagnation</h2><p>Underpinning this whole “platform-specific vs. web” thing is, I think, a feeling many of us old-timers have that our web—the web we grew up building—is slipping away from us. We cling to the idea of the web as an open platform<sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup> for people to share their thoughts, passions, and cat photos. We like the web as it was originally. We like the web as we made it.</p><p>The web is changing. In some ways it’s changing for the better, in some ways for the worse. It’s a far different beast today than <a href="http://info.cern.ch/hypertext/WWW/TheProject.html">when Tim Berners-Lee typed that first <code>&lt;HEADER&gt;</code></a> and you can certainly do a lot more in the browser now than you could when I first picked up HTML. But I don’t think halting progress on the web is desirable.</p><p>As Jake points out in his response, stagnation is not a good policy. Stagnation pretty much killed BlackBerry. It also led to a lot of developer frustration in the guise of IE 6.</p><p>Change is not inherently bad. It’s pace can be quite frustrating at times, though. PPK certainly seems to be feeling that way about its speed now just as <a href="https://infrequently.org/2007/09/slides-from-my-standards-heresy-talk/">Alex Russell lamented its plodding progress back in 2007</a>. But when you take a step back, especially with a historical perspective, you see the changes are cyclical in many ways. The bandwidth issues we dealt with during the dial-up era are with us again in the form of mobile networks. The lessons we learned building a web for 640x480 screens are equally applicable in a world of wearables. And the text-based interactions we created in the very early days will serve as a template as we move boldly forward into the realm of voice-driven user experiences.</p><h2 id="cutting-edge-vs.-craft" tabindex="-1"><a class="header-anchor" href="#cutting-edge-vs.-craft" aria-hidden="true">#</a> Cutting Edge vs. Craft</h2><p>In his post, PPK also complained that we’re simply getting too many new features on the web, which makes it hard to keep up. More than that, however, it makes it hard to truly come to a deeper understanding of how these different pieces work. To really hone our craft. In other words, it’s becoming harder to be an expert generalist.</p><p>Jake and Bruce completely get this, as do I. <a href="https://web.archive.org/web/http://lanyrd.com/2015/web-design-day/sdpbgz/">Lyza Danger Gardener has even given an amazing talk on the topic</a>. The sheer volume of new drafts, specs, and concepts (not to mention tooling options) is overwhelming. I’m sure I don’t know half of the features that are in the HTML5 spec, let alone the umpteen CSS3 modules. I probably never will. And I’m ok with that. I’ll pick and choose the bits I’m interested in playing around with and find ways to integrate them into my practice a little at a time. That’s how we learn. That’s how we’ve always learned.</p><p>To assuage PPK’s fears, however, I would argue that there are a lot more of us working on the web now than there were in the more leisurely paced days he remembers so fondly. And we’re sharing what we learn. Whether driven by altruistic desire to spread knowledge or an interest in rockstar-like fame in the industry (or even a smidge of both), it doesn’t really matter how it happens—the fact is that it does. We learn and we share. And the tools we have today make it even easier to do so. Not only do we have the usual magazine and blogging outlets, but we also have CodePen and JS Bin and Github and more.</p><p>We each have the capacity to research the hell out of one specific area of web design and be the conduit for that knowledge into the web design hive mind. Look at <a href="https://www.google.com/search?q=sara+soueidan+svg">Sara Soueidan with SVG</a> or <a href="https://www.google.com/search?q=rachel+nabors+css+animation">Rachel Nabors with CSS Animation</a> or <a href="https://www.google.com/search?q=Zoe+Mickley+Gillenwater+flexbox">Zoe Mickley Gillenwater with flexbox</a>. <span data-quotable>Individually, we will never be able to learn it all, but collectively we can.</span> Together, we can tackle any problem by accessing what we need to know when we need to know it.</p><h2 id="developer-convenience-vs.-user-needs" tabindex="-1"><a class="header-anchor" href="#developer-convenience-vs.-user-needs" aria-hidden="true">#</a> Developer Convenience vs. User Needs</h2><p>Another angle in this very dense piece from PPK was around tooling and polyfills:</p><blockquote><p>We get ever more features that become ever more complex and need ever more polyfills and other tools to function—<a href="http://www.quirksmode.org/blog/archives/2015/05/tools_dont_solv.html">tools that are part of the problem</a>, and not of the solution.</p></blockquote><p>The whole “polyfill it and move on” movement has him a little annoyed. I share his sentiment. I don’t think a JavaScript-based solution should be considered “good enough” for interop. <a href="http://kryogenix.org/code/browser/everyonehasjs.html">JavaScript is not guaranteed.</a> Moreover, JavaScript implementations are also never going to be as fast as a browser implementation. If browsers want to pick up a polyfill and implement it behind the scenes, that’s fine because it will run faster, but loading up our websites with potentially megabytes worth of polyfills in order to use new “standards” seems ludicrous.</p><p>As an industry, we are doing an awful lot of navel gazing. <span data-quotable>We are spending more time solving our own development problems (legitimate in some cases, fabricated in others) by throwing more and more code at the problem.</span> As a consequence, our users are paying the price in <a href="http://www.theverge.com/2015/7/20/9002721/the-mobile-web-sucks">slower sites</a>, <a href="http://www.soasta.com/blog/page-bloat-average-web-page-2-mb/">heavier web pages</a>, <a href="http://www.yottaa.com/Why-Your-Website-Is-Slow-Poor-JavaScript-Performance">poor performance</a>, and <a href="https://web.archive.org/web/20150213090118/http://farukat.es/journal/2015/02/708-how-flipboard-chose-form-over-function-their-web-version">bad experiences</a> (or <a href="http://sighjavascript.tumblr.com/">no experience</a>). And, on top of that, we’re solving <em>our</em> problems not <em>their</em> problems.</p><h2 id="all-is-not-lost" tabindex="-1"><a class="header-anchor" href="#all-is-not-lost" aria-hidden="true">#</a> All is not lost</h2><p>We are designers. Design is about solving problems for our users, not creating new ones for them. Whether we are writing code, sketching interfaces, authoring copy, curating content, or building servers, we should make each and every decision based on what will benefit our users. If it means we can’t use some shiny new technology, so be it. We can still play with the new stuff in our own browser, on our personal sites, and on CodePen. We can learn about them in our own experimentation and share that knowledge with the rest of our industry. We can improve our craft. The web can get better.</p><p><em>Note: I no longer use “native” in this context, but it remains in quoted material.</em></p><hr class="footnotes-sep"><section class="footnotes"><h4 class="hidden">Footnotes</h4><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>I think I just threw up in my mouth a little. I hate using that word when speaking about the web, but there it is. <a href="#fnref1" class="footnote-backref">↩︎</a></p></li><li id="fn2" class="footnote-item"><p>In the other sense of the word. <a href="#fnref2" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content><amg:summary><![CDATA[A few thoughts and ramblings spurred by a post from PPK and reactions from Jake Archibald and Bruce Lawson.]]></amg:summary><summary type="html"><![CDATA[<p>A few thoughts and ramblings spurred by a post from PPK and reactions from Jake Archibald and Bruce Lawson.</p>]]></summary><category term="web design" /><category term="browsers" /><category term="the web" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/lines-in-the-sand/</id><title type="html"><![CDATA[✍🏻 Lines in the Sand]]></title><link href="https://www.aaron-gustafson.com/notebook/lines-in-the-sand/" rel="alternate" type="text/html" /><published>2015-03-11T13:21:29Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>A new site, <a href="http://breakupwithie8.com/">Break Up with Internet Explorer 8</a> by <a href="http://www.humaan.com/">Humaan</a>, has been making the rounds on the Interwebs of late. It’s cleverly done and an attractive site, but I don’t really agree with the premise:</p><blockquote><p>Join the intervention and stop supporting IE8. It’s time for an upgrade.</p></blockquote><p>The reality is that some users don’t have control over the browsers installed on their computers and <a href="http://www.networkworld.com/article/2224510/microsoft-subnet/some-windows-xp-users-just-can-t-afford-to-upgrade.html">IE8 may be the best they can muster</a>. Most of us have had the luxury of moving on, but they haven’t. Does that mean we should banish those users from our sites by treating IE8 like that ex who just won’t take a hint? I don’t think so.</p><p>Instead, we should approach this problem rationally. Be the bigger person. Call it <a href="http://bradfrost.com/blog/mobile/support-vs-optimization/">support vs. optimization</a>, call it <a href="http://responsivenews.co.uk/post/18948466399/cutting-the-mustard">cutting the mustard</a>, call it what you will, but by understanding how browsers work, we can reduce our own development headaches and serve more users in the process. Yes, even when they use aging browsers like IE8 or IE7 or (gasp) IE6.</p><p>When it comes to HTML and CSS, browsers ignore what they don’t understand. It’s why you can use the <code>section</code> element and the content will still be exposed in Lynx. It’s also why you can use RGBa without IE6 collapsing. <a href="http://adaptivewebdesign.info/1st-edition/chapter-1.html#the-rise-of-tolerance">Fault tolerance is a really powerful tool</a> and is the foundation of progressive enhancement in HTML and CSS. (In JavaScript things are a little more complicated… we have to use <a href="http://learn.jquery.com/code-organization/feature-browser-detection/">feature detection</a>.)</p><p>A simple way to rid yourself of IE8 related headaches is to embrace the idea that <a href="http://dowebsitesneedtolookexactlythesameineverybrowser.com/">web pages don’t need to look (or behave) the same in every browser</a> and look for ways to achieve this while still providing access to your content and tools for less-capable browsers and devices. For example:</p><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span><span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>stylesheet<span class="token punctuation">”</span></span><span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>simple.css<span class="token punctuation">”</span></span><span class="token punctuation">/&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span><span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>stylesheet<span class="token punctuation">”</span></span><span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>complex.css<span class="token punctuation">”</span></span><span class="token attr-name">media</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>only screen<span class="token punctuation">”</span></span><span class="token punctuation">/&gt;</span></span></code></pre><p>This simple stylesheet setup will deliver only the <code>simple.css</code> file to browsers that are incapable of understanding media queries. Browsers that do understand them will get both stylesheets. Media queries support is an easy line in the sand we can draw because <a href="http://www.slideshare.net/bryanrieger/rethinking-the-mobile-web-by-yiibu/79">lack of media query support is in fact the first media query</a>.</p><p>Once you’ve done that, it’s as simple as putting all of your advanced styles in the <code>complex.css</code> file. No drama.</p><p>On the JavaScript end, you can draw a line in the sand too. Let’s say you don’t want to spend your time debugging JavaScript in IE8. You can just skip it using <a href="http://www.quirksmode.org/css/condcom.html">Conditional Comments</a>:</p><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>!–[if</span><span class="token attr-name">gte</span><span class="token attr-name">IE</span><span class="token attr-name">9]</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>!–</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span><span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>not-for-ie8.js<span class="token punctuation">”</span></span><span class="token punctuation">&gt;</span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span><span class="token comment">&lt;!–&lt;![endif]–&gt;</span></code></pre><p>Using an approach like this avoids delivering the contained JavaScript files to IE8 at all, but all other browsers will see them.</p><p>If that’s too drastic, use <a href="http://learn.jquery.com/code-organization/feature-browser-detection/">feature detection</a> in your JavaScript files to determine if it is safe to rely on a particular method or capability. Program defensively.</p><p>Honestly, I’ve found that approaches like these lead to fewer grey hairs and a lower overall stress level. They make me a happier developer and let me concentrate on building for the future rather than worrying about the past.</p><p>But it’s not about breaking up with IE8, it’s about having a realistic and honest relationship with it.</p>]]></content><amg:summary><![CDATA[I don’t think we need to break up with IE8, we just need to define our relationship a bit better.]]></amg:summary><summary type="html"><![CDATA[<p>I don’t think we need to break up with IE8, we just need to define our relationship a bit better.</p>]]></summary><category term="web design" /><category term="browsers" /><category term="progressive enhancement" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/apple-business-and-standards/</id><title type="html"><![CDATA[✍🏻 Apple, Business, and Standards]]></title><link href="https://www.aaron-gustafson.com/notebook/apple-business-and-standards/" rel="alternate" type="text/html" /><published>2015-02-26T15:44:40Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>At <a href="http://www.codeandcreativity.com/events/2015-02-24">Tuesday night’s Code &amp; Creativity</a>, digital governance expert <a href="https://twitter.com/lwelchman">Lisa Welchman</a> equated digital projects to an atom. Content, IA, project management, networking, graphic design, application development, performance, and other concerns are flying this way and that like electrons—a swirling mass of energy and velocity. What holds this chaos together and keeps the electrons from flying off in all directions is the magnetic pull of protons in the nucleus of the atom.</p><figure id="fig-2015-02-26-01" class="media-container"><p><img src="https://www.aaron-gustafson.com/i/posts/2015-02-26/atom-lg.jpg" alt="A slide from Lisa Welchman’s talk showing Web Standards and KPI at the center of the project “atom”."></p></figure><p>In Lisa’s analogy, the protons of a digital project are Web standards and Key Performance Indicators (KPIs). She believes that without these key ingredients, projects will often career out of control. Her reasoning? We all need to know how we should be doing things in order to work together well (Web standards) and we need to know what our expectations are for the project to be successful (KPI).</p><p>This really resonated with me. Mainly, it resonated because I am a Web standards guy, but I also believe in the importance of standards across the board. I think projects need copywriting standards, design standards, performance standards, coding standards, and many other kinds of standards as well. Standards hold a project together. For real.</p><p>That’s why <em>Web</em> standards are so important.</p><p>Without standards, the Web was <a href="http://en.wikipedia.org/wiki/Browser_wars">an unruly mass of spaghetti code</a>. I started working on the Web in 1996. I know, I lived it.</p><p>We used to deliver separate browser-specific JavaScript and CSS files to different User Agents. Our HTML code had to be 3-4 times as hefty to support all of the various ways browsers had decided to implement the same features. It was horrible and made building anything remotely interesting a truly painful endeavor.</p><p>Then browser makers got together to codify HTML into a generally agreed-upon set of elements and attributes that would allow authors like me to write pages that would Just Work™. That work extended into CSS, and so on, and so forth. I can’t thank them enough for doing that.</p><p>Tuesday also saw the W3C officially make <a href="http://www.w3.org/TR/pointerevents/">Pointer Events</a> a recommendation. I’d always liked the idea of Pointer Events because it abstracts the traditional concept of a click into a generic interaction that could be triggered by a mouse, a finger, a pen, an eye movement, or any other interaction method we come up with in the future. Sure, I work for Microsoft now—they proposed this idea—but that isn’t the reason I like the concept. I like it because it doesn’t tie us down to a single way of interacting with Web content that necessitates the creation of new specs when new interaction methods are invented. It’s future friendly and embraces the “continuum of experience” I evangelize incessantly.</p><p>When Pointer Events were first proposed, there was a lot of support behind them. Obviously Microsoft was on board, but Mozilla was too. And Google was all about Pointer Events for a while and was already using them when <a href="https://code.google.com/p/chromium/issues/detail?id=162757#c64">they did an abrupt about-face and decided they were ripping them out of Blink in favor of overhauling Touch Events</a> (which Apple supports and which Pointer Events were intended to supersede).</p><p>And so now we have a recommendation from the W3C that browsers implement Pointer Events. <a href="http://blog.jquery.com/2015/02/24/getting-on-point/">Developers want them</a> and it seems Apple doesn’t. And because Apple doesn’t want them, Google doesn’t want them now either. To quote Rick Byers (of Google) in <a href="https://lists.w3.org/Archives/Public/public-pointer-events/2014JulSep/0071">a Pointer Events meeting in late 2014</a>:</p><blockquote><p>No argument that PE is more elegant. If we had a path to universal input that all supported, we would be great with that, but not all browsers will support PE. If we had Apple on board with PE, we’d still be on board too. The equation has shifted for us.</p></blockquote><p>So, effectively, Apple is holding the Web back. <a href="https://twitter.com/tkadlec">Tim Kadlec</a> wrote <a href="http://timkadlec.com/2015/02/apples-web/">a great piece discussing the core issue at play here</a>:</p><blockquote><p>Let’s set any opinions about Pointer Events aside. Frankly, I need to do a <em>lot</em> more digging here before I have any sort of strong opinion in one direction or another. There is a bigger issue here. We have a recurring situation where all vendors (save for Apple) show interest in standard, but because Apple does not express that same interest, the standard gets waylaid.</p></blockquote><figure id="fig-2015-02-25-02" class="media-container media-container--right"><p><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Yin_yang.svg/200px-Yin_yang.svg.png" alt="Yin and yang."></p></figure><p>This whole thing has caused quite a kerfuffle in the Web community. Obviously, some people are demonizing Apple (and, by proxy, Google) for holding us back. Others are quick to excuse Apple because of their history of pushing the Web forward (see CSS transitions, animations, etc.).<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> Personally, I don’t think anything is ever truly black and white. Every company does some good things and some bad things. To channel Lisa Welshman again, it’s like yin and yang: The light has a little bit of the dark in it, and the dark has a little bit of the light in it.</p><p>Generally, I’ve found that Apple tends to do what is best for Apple, without considering how it affects designers, developers, or the Open Web. On this issue however, I just haven’t figured out their angle yet.</p><p>Some of their past decisions have offered a clear view into their motivations. Take offline for instance. Apple supports the <a href="http://www.w3.org/TR/html5/browsers.html#offline">Application Cache API</a> (as <a href="http://caniuse.com/#feat=offline-apps">most modern browsers do</a>), but there’s a catch: You can’t store audio files in the cache. That makes it nearly impossible to build a decent game in HTML because you won’t get sound effects if you aren’t connected to the Web. But for Apple it makes perfect sense: They sell games in the App Store.</p><p>Their motivations behind other decisions are more murky, however. For example, Safari implements the <a href="https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation">HTML5 Form Validation API</a>, which means it knows if a field is valid or invalid. The catch? It won’t halt the submission of an invalid form. <a href="http://caniuse.com/#search=form%20validation">Every other modern browser acts as you’d expect.</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup> I don’t get it. I used to think/hope they just had not figured out how they wanted to handle notifying the user of the error, but it’s been like this for about 5 years.</p><p>I’ll let Tim jump in again here:</p><blockquote><p>Apple has a very, very strong influence over what standards get adopted and what standards do not. Partly it’s market share, partly it’s developer bias (see, for example, how other vendors eventually felt forced to start supporting the <code>webkit</code> prefix due to vendor prefix abuse).</p></blockquote><blockquote><p>Apple simply does not play well with other vendors when it comes to standardization. The same sort of things we once criticized Microsoft for doing long ago, we give Apple a pass on today. They’re very content to play in their own little sandbox all too often.</p></blockquote><p>He’s channeling <a href="https://adactio.com/journal/5442/#comment438">a bit of Remy Sharp there</a> (circa 2012):</p><blockquote><p>When are we, as a web development community, going to stop giving Apple a free fucking pass?</p></blockquote><blockquote><p>They’re consistently lacking in the open discussion in to improving the gateway to the web: the browser. Sure, they landed an impressive mobile browsing experience back when the iPhone launched and it’s a great device, but there’s some serious questioning about whether they’re purposely cock-blocking web development and purposely hindering our advancement as a web industry.</p></blockquote><blockquote><p>WebGL is in mobile Safari, yet only available if accessed via a WebView object, not the real Safari (which is a WebView anyway…). It was recently discovered that they moved all web data storage (Web Storage, Appcache, etc) in a temporary data store meaning that it can be wiped at any time without warning.</p></blockquote><blockquote><p>Even the mighty PPK who tells entire browser vendors “fuck you”, doesn’t call Apple out, allowing them to slither on.</p></blockquote><blockquote><p>Why is it we continue to allow Apple to get away with it? And can this ever change?</p></blockquote><p>As Tim points out, Apple certainly isn’t the only company that plays games when it comes to standards:</p><blockquote><p>The other vendors aren’t exactly perfect either. The Microsoft folks, no doubt reeling from all the negativity aimed at them over the years, have more than once been content to let everyone else duke it out over a standard, only getting involved late when a consensus has been reached. The Blink folks, despite being the best positioned to take a stand, have been happy to play the “Apple won’t do it so I guess we won’t either” card on multiple occasions.</p></blockquote><p>But he’s also quick to highlight the disappointing reality about Apple with respect to the other browser vendors:</p><blockquote><p>It’s easy to reach the Mozilla, Google and Microsoft folks to discuss their thoughts on these emerging standards. That’s a much harder thing to do with the Apple crew.</p></blockquote><p>Apple is very much a black box and their processes are incredibly opaque. Now I’m no hater, I use their products daily.<sup class="footnote-ref"><a href="#fn3" id="fnref3">3</a></sup>, but I am also not an apologist. I think relationships are improved with honesty and openness. I honestly wish Apple’s processes—at least when it comes to the Web—were more open.<sup class="footnote-ref"><a href="#fn4" id="fnref4">4</a></sup> Heck, they often don’t even show up to meetings at the W3C. If we knew what they were thinking or why they were doing things, we could at least understand where they were coming from rather than having to speculate about their motivations. Whether we agree or not is irrelevant.</p><p>Regardless, we are where we are and I can’t help but wonder one thing: <em>If we stop giving Apple a free pass and continue marching forward without them, will they eventually be forced to scramble to catch up like Microsoft did when IE6 sat on the shelf for so long?</em> I don’t know what the answer is, but I sincerely hope they come around and begin to treat the Web with the respect it deserves before that happens.</p><p>When browsers refuse to implement Web standards, we all lose. And we take one step closer to the swirling pit of chaos and spaghetti code we thought we’d put behind us.</p><hr class="footnotes-sep"><section class="footnotes"><h4 class="hidden">Footnotes</h4><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>All of which were (in true Apple style) developed in secret and then bestowed upon the world in a grand spectacle. <a href="#fnref1" class="footnote-backref">↩︎</a></p></li><li id="fn2" class="footnote-item"><p>Ok, Opera Mini doesn’t, but Opera Mini is also a different sort of browser. It is a proxy browser and the proxy handles all of the back and forth between the browser and the website’s origin server(s). <a href="#fnref2" class="footnote-backref">↩︎</a></p></li><li id="fn3" class="footnote-item"><p>I am composing this post on a Mac… provided by Microsoft. Yes, you read that correctly. <a href="#fnref3" class="footnote-backref">↩︎</a></p></li><li id="fn4" class="footnote-item"><p>I have felt the same way about Microsoft for years because I knew the great work they were doing behind the curtains. Part of the reason <a href="/notebook/ch-ch-ch-changes/">I joined them earlier this month</a> was because they have been opening up and I want to encourage and nurture that. <a href="#fnref4" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content><amg:summary><![CDATA[With Pointer Events now officially a W3C Recommendation, Apple is playing the role of the Web standards and interoperability party pooper.]]></amg:summary><summary type="html"><![CDATA[<p>With Pointer Events now officially a W3C Recommendation, Apple is playing the role of the Web standards and interoperability party pooper.</p>]]></summary><category term="web design" /><category term="web standards" /><category term="business" /><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/the-one-weird-trick-that-takes-the-pain-out-of-cross-browser-testing/</id><title type="html"><![CDATA[✍🏻 The One Weird Trick That Takes the Pain Out of Cross-browser Testing]]></title><link href="https://www.aaron-gustafson.com/notebook/the-one-weird-trick-that-takes-the-pain-out-of-cross-browser-testing/" rel="alternate" type="text/html" /><published>2015-01-26T16:24:25Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Love this!</p><blockquote><p>You’ll never believe this one weird trick that takes the pain out of cross browser testing: Progressive enhancement.</p><p>—<a href="https://twitter.com/decadecity/status/559693419808034816">Orde Saunders 🔟 (@decadecity)</a></p></blockquote>]]></content><amg:summary><![CDATA[Orde Saunders nails it!]]></amg:summary><summary type="html"><![CDATA[<p>Orde Saunders nails it!</p>]]></summary><category term="web design" /><category term="web development" /><category term="browsers" /><category term="progressive enhancement" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/competing-on-chrome/</id><title type="html"><![CDATA[✍🏻 Competing on “Chrome”]]></title><link href="https://www.aaron-gustafson.com/notebook/competing-on-chrome/" rel="alternate" type="text/html" /><published>2015-01-21T20:20:40Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Watching the <a href="http://news.microsoft.com/windows10story/">Windows 10 announcement</a> today and the “unveiling” of its new browser, codenamed “Project Spartan”, I was amazed… not by what was said so much as what wasn’t.</p><p>Let me back up a bit here. As many of you know, I’ve been working on the Web for a long time and, like many old codgers, lived through the first browser wars and remember not only the unveiling of Internet Explorer 6—which was pretty amazing for its time—but I also worked on the Web for the entire 5 years that browser sat on the shelf.<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup></p><p>By the time Internet Explorer 7 came out in late 2006, there had been a number of advancements on the Web. And there was more competition for user and developer mindshare. Safari popped up shortly after IE6’s launch and was gaining traction on the Mac with its port of Konqueror’s layout engine, KHTML, which they renamed WebKit. Netscape was in it’s death throes, but Firefox arose from the ashes<sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup> and was capturing an ever-growing share of the market with its improved security, extensibility through browser plug-ins, and tabbed browsing. Not only that, but the Mozilla core of Firefox had also been spun into several other browsers that were similarly taking off: Camino, Flock, SeaMonkey, Galeon, and Epiphany. And then, of course, the Opera browser was still going strong on the desktop and growing rapidly in the mobile space.<sup class="footnote-ref"><a href="#fn3" id="fnref3">3</a></sup></p><p>When IE7 finally made it out into the world, developers were at peak frustration when it came to dealing with standards-compatibility issues in IE. So it’s no surprise that the messaging focus for IE7 was, at least in terms of the Web designer/developer audience, focused on <a href="http://www.zdnet.com/article/ie7-and-standards-compliance-microsofts-chris-wilson-charts-progress/">apologizing for the past and promising that they cared about (and were supporting) interoperable Web standards</a>.</p><p>And this was an earnest sentiment, it wasn’t bullshit. I remember <a href="https://twitter.com/cwilso">Chris Wilson</a>—then Platform Architect of Internet Explorer Platform team—telling me he had personally printed out <a href="http://www.w3.org/TR/CSS2/">the entire CSS 2.1 spec</a> and put it on the desk of each developer working on Trident, the browser’s rendering engine.</p><p>And IE7, for all of its faults, was an improvement over IE6. A few years later, IE8 was an improvement over that. And, a little later, IE9 gave us a completely reborn Internet Explorer, largely free of the layout and rendering quirks we had earned so much grey hair fighting. And so on. And so on. But all the while, the drumbeat from the IE team was this: Now with more standards support!</p><p>And it wasn’t just IE that was making this claim. Other browsers began to tout their support of one particular standard or another that the others didn’t in hopes of getting developers to pay more attention to them.</p><p>Some time before the launch of IE8, I remember having a conversation with Chris Wilson over drinks at a conference. We talked at length about the state of Web standards, browsers, and the like. During the course of our chat, he offered up his dream:</p><blockquote><p>I’ll be happy when browsers stop competing on standards support and start competing on chrome.<sup class="footnote-ref"><a href="#fn4" id="fnref4">4</a></sup></p></blockquote><p>It stuck with me because what he was saying made a lot of sense: Standards-compliance should be a given; browsers should be competing on the extra stuff they offer.</p><p>Which brings me back to today’s announcement. Standards-compliance wasn’t mentioned<sup class="footnote-ref"><a href="#fn5" id="fnref5">5</a></sup> by <a href="https://twitter.com/joebelfiore">Joe Belfiore</a> in his walkthrough of “Project Spartan”. Instead, Joe focused on the value adds in the browser: in-app note taking, a focused reading mode, cross-device synchronization, and Cortana integration.</p><p>This is a major milestone for IE in my opinion and it makes me wonder if we’ve finally reached the place that Chris dreamed about all those years ago. I certainly hope so.</p><hr class="footnotes-sep"><section class="footnotes"><h4 class="hidden">Footnotes</h4><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>I was told that, internally, decision-makers felt the browser was “done” and there would be no more advancements on the Web that would require a new browser. <a href="#fnref1" class="footnote-backref">↩︎</a></p></li><li id="fn2" class="footnote-item"><p>An apt metaphor, Firefox was originally Phoenix, then later Firebird, before eventually becoming Firefox. <a href="#fnref2" class="footnote-backref">↩︎</a></p></li><li id="fn3" class="footnote-item"><p>You may not realize it, but Opera Mobile predated even IE6. And it’s Opera Mini variant touts big numbers too: In April 2014, there were over 267 million Opera mobile browser users (244 million of whom used Opera Mini) and Opera Mini users viewed over 177 billion pages in that same month. (<a href="http://www.operasoftware.com/smw/2014-04">Source</a>) <a href="#fnref3" class="footnote-backref">↩︎</a></p></li><li id="fn4" class="footnote-item"><p>The Chrome browser, from Google, did not exist at this time. By “chrome” he meant the window around a webpage—it toolbars, buttons, menus, and other browser-based functionality. <a href="#fnref4" class="footnote-backref">↩︎</a></p></li><li id="fn5" class="footnote-item"><p>The only phrases that even hint at standards compliance were “modern Web” and “a new rendering engine… that is compatible with how the Web is written today” (starting at around 59:05 in <a href="https://ll.ms-studiosmedia.com/events/2015/1501/Windows10CP/live/Windows10CP.html?title=Windows10CP-mscom">the video</a>). <a href="#fnref5" class="footnote-backref">↩︎</a></p></li></ol></section>]]></content><amg:summary><![CDATA[Watching the Windows 10 announcement and the “unveiling” of its new browser, codenamed “Project Spartan”, I was amazed… not by what it was so much as what it wasn’t.]]></amg:summary><summary type="html"><![CDATA[<p>Watching the Windows 10 announcement and the “unveiling” of its new browser, codenamed “Project Spartan”, I was amazed… not by what it was so much as what it wasn’t.</p>]]></summary><category term="browsers" /><category term="web design" /><category term="web standards" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/the-native-vs-stylable-tug-of-war/</id><title type="html"><![CDATA[✍🏻 The “Native” vs. “Stylable” Tug of War]]></title><link href="https://www.aaron-gustafson.com/notebook/the-native-vs-stylable-tug-of-war/" rel="alternate" type="text/html" /><published>2014-07-20T08:14:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>In his astute post <a href="https://www.brucelawson.co.uk/2014/native-experience-vs-styling-select-boxes/"><span class="initial quote">“</span>‘Native experience’ vs styling select boxes<span class="final quote">”</span></a>, Bruce Lawson correctly identified a common tension in the web world:</p><blockquote><p>But why this urge to re-style page elements that end-users are familiar with? … Or is it that we love native look and feel, except when we don’t?</p></blockquote><p>Speaking as the guy who not only wrote JavaScript to help me create an accessible <code>select</code> element alternative, but who also made it <a href="http://d1b14unh5d6w7g.cloudfront.net/1590598563.01.S0ER.LXXXXXXX.jpg?Expires=1405686346&amp;Signature=DCT4Z0l75JQESDNyP0PVGVonuJYwY9XYtaTI3grX/RhdlLcXGRAVADJCB/N/fAj7GxLhEVzuXqstMebJIJ9Ip5I6kE7IKYt2F20F5EGD+1ghua9zKwyjS1e4KBgumMKzQytbcfIVX4dMr7XFzj26mScFKz9bSKtZT5jU1LU6hWM=&amp;Key-Pair-Id=APKAIUO27P366FGALUMQ">the focus of a case study (image)</a> in <a href="http://amzn.to/TaoffD">AdvancED DOM Scripting</a>, I am fully aware of the desire to have it both ways. I have not often seen the desire for both in a single individual, but it does happen in one particular instance occasionally.</p><p>Based on my own experience, I see the following arguments in favor of changing the display of a native control quite often:</p><ol><li>It doesn’t look good to me.</li><li>It is not “on brand”.</li><li>It clashes with our brand’s color scheme.</li><li>We want the web experience to feel like a native app.</li><li>It doesn’t behave how we think it should.</li></ol><p><em>(<abbr lang="it" title="nota bene: please note">n.b.</abbr> Browsers have done a pretty good job reducing the amount of color and the overall visual strength used in native controls to help them better blend in with a wide variety of designs, so clashes as mentioned in #3 happen far less often than they did nearly a decade ago.)</em></p><p>As the weathered, battle tested (and, admittedly, somewhat jaded) front-end dev that I am, I typically push back with one or more of the following:</p><h2>In Addressing Desired Design Changes</h2><p>In terms of aesthetics (addressing arguments 1, 2, and 3), I understand where you’re coming from. Native controls are not the most appealing things, but they are familiar to your users. A <code>select</code> box they see on your site that looks like the one they see on Wikipedia or their banking site will be immediately recognizable. Sure, the looks and feel may differ from browser to browser, but most people use only a small number of browsers throughout the day—at work, at home, on their device—and if you want to ensure the design of a form control feels “right” in the browser they are using, sometimes it’s best to let go of that control.</p><h2>In Addressing OS Parity</h2><p>I can understand the desire to have a form control in a web page look and feel like the same (or a similar) control within the native operating system (argument 4), but I am not sure that’s a rabbit hole you want to go down. Here’s why: Achieving exact design and functional parity between a native control and a web control quite often requires extra markup, a bunch of CSS, and a bit of JavaScript. Anything is achievable with unlimited time and budget, so it’s completely doable, but it would be good to estimate the cost to see if you still think it is a worthwhile endeavor.</p><p>Assuming it is, we then have the question of which operating system to model the control after. Or maybe you want to offer a different take on the control based on the operating system your user is using. In that case, we may need to multiply the original estimate by the number of operating systems you want to support. But it’s worth noting that, in the Android world, different device manufacturers often “skin” the operating system to look different from other ones. Sometimes they even do it on a device-by-device basis. We’ll need to figure out which ones you want to include in your native control matrix and multiply the estimate accordingly.</p><p>Then there’s maintenance. We’ll need to test these native-like controls on each of their corresponding platforms and test the script that determines which experience gets delivered to which device to make sure we’re not accidentally sending the wrong experience. We’ll also need to test the delivery script on every other browser in our test matrix to ensure it is not causing issues there.</p><p>What should we do when a new operating system version is rolled out? iOS, for example, has made radical shifts in the design of their native controls in each major release. We’ll probably want to create unique versions of the control for each version of each OS we support and we’ll need to keep tabs on upgrades so we don’t end up confusing our users if they visit our site in iOS 7 and have a control that looks like it’s from iOS 6. We’ll need to add the number of OS versions into the multiplier as well.</p><p>Ok, and finally: How many controls did you want to apply this approach to again?</p><p>Or we could use the native form control and it will just work.</p><h2>In Addressing Altered Behavior</h2><p>I completely agree that not all native controls work exactly how I would like, but there are several risks in changing the expected behavior of a native control.</p><p>First of all, there’s the possibility we could actually end up making the interface more confusing or that the change in behavior might not be exactly what our user’s wanted (either based on what they are used to or our mental model not aligning with theirs). In order to rule out these issues, we should run a few rounds of usability tests. These could be quick café tests or more formal studies depending on the budget.</p><p>Assuming our tests go well, we will need to maintain this code and do all of the requisite browser testing. And potentially upgrade our code as new browsers and browser versions come out. Depending on the complexity of the code, this could become a large requirement, but if it is ultimately in the service of making the web a better, more usable interaction environment, it could be worth it.</p><p>For what it’s worth, if we go this route and are successful, we should consider getting involved in the spec-writing process at the <a href="http://w3.org">W3C</a> or <a href="http://whatwg.org">WhatWG</a>. We should contribute our recommended changes back to the community and share what we learned. If we make a compelling argument, perhaps our idea will become part of some future standard and we can taper off our browser testing when the change goes native.</p><hr/><p>As you can probably tell, I’m not a really big fan of changing existing controls as I feel it can amount to a wasted effort. That said, if there are design improvements to be made—“design” in the true sense: being about how usable something is, not just how aesthetically-pleasing it is to someone (e.g. improving contrast, making the control more intuitive, etc.)—I’m willing to accept the change as something we <em>should</em> do and then work to make sure that change has been vetted and, if successful, given away for inclusion in other projects. If it solves a major issue on the web, I want to give that change every opportunity to make it into the appropriate spec by talking to the appropriate folks about it both in-person, in blog posts, and on the appropriate mailing list. If the change solves a problem in a specific browser, I want to see it incorporated into said browser and will file a bug report and try to build momentum around it by engaging the community.</p><p>Anyway, that’s my general position on augmenting native controls. What are your thoughts on the topic?</p>]]></content><amg:summary><![CDATA[In his astute post “ ‘Native experience’ vs styling select boxes ” , Bruce Lawson correctly identified a common tension in the web world:]]></amg:summary><summary type="html"><![CDATA[<p>In his astute post “ ‘Native experience’ vs styling select boxes ” , Bruce Lawson correctly identified a common tension in the web world:</p>]]></summary><category term="web standards" /><category term="HTML" /><category term="CSS" /><category term="browsers" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/native-vs-stylable-tug-of-war/</id><title type="html"><![CDATA[✍🏻 The “Native” vs. “Stylable” Tug of War]]></title><link href="https://www.aaron-gustafson.com/notebook/native-vs-stylable-tug-of-war/" rel="alternate" type="text/html" /><published>2014-07-17T12:21:47Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>In his astute post <a href="https://www.brucelawson.co.uk/2014/native-experience-vs-styling-select-boxes/">“‘Native experience’ vs styling select boxes”</a>, Bruce Lawson correctly identified a common tension in the web world:</p><blockquote><p>But why this urge to re-style page elements that end-users are familiar with? … Or is it that we love native look and feel, except when we don’t?</p></blockquote><p>Speaking as the guy who not only wrote JavaScript to help me create an accessible <code>select</code> element alternative, but who also made it <a href="https://books.google.com/books/content?id=Wmg6dkBJd50C&amp;pg=PA507&amp;img=1&amp;zoom=3&amp;hl=en&amp;bul=1&amp;sig=ACfU3U2DB7JkEBRWEjSwZLHwIJnpGqgq9w&amp;w=1280">the focus of a case study (PNG, 128kB)</a> in <a href="https://amzn.to/TaoffD">AdvancED DOM Scripting</a>, I am fully aware of the desire to have it both ways. I have not often seen the desire for both in a single individual, but it does happen in one particular instance occasionally.</p><p>Based on my own experience, I see the following arguments in favor of changing the display of a browser-delivered UI control quite often:</p><ol><li>It doesn’t look good to me.</li><li>It is not “on brand”.</li><li>It clashes with our brand’s color scheme.</li><li>We want the web experience to feel like a platform-specific app.</li><li>It doesn’t behave how we think it should.</li></ol><p><em>(<abbr lang="it" title="nota bene: please note">n.b.</abbr> Browsers have done a pretty good job reducing the amount of color and the overall visual strength used in their UI controls to help them better blend in with a wide variety of designs, so clashes as mentioned in #3 happen far less often than they did nearly a decade ago.)</em></p><p>As the weathered, battle tested (and, admittedly, somewhat jaded) front-end dev that I am, I typically push back with one or more of the following:</p><h2 id="in-addressing-desired-design-changes" tabindex="-1"><a class="header-anchor" href="#in-addressing-desired-design-changes" aria-hidden="true">#</a> In Addressing Desired Design Changes</h2><p>In terms of aesthetics (addressing arguments 1, 2, and 3), I understand where you’re coming from. Browser-delivered UI controls are not the most appealing things, but they are familiar to your users. A <code>select</code> box they see on your site that looks like the one they see on Wikipedia or their banking site will be immediately recognizable. Sure, the looks and feel may differ from browser to browser, but most people use only a small number of browsers throughout the day—at work, at home, on their device—and if you want to ensure the design of a form control feels “right” in the browser they are using, sometimes it’s best to let go of that control.</p><h2 id="in-addressing-os-parity" tabindex="-1"><a class="header-anchor" href="#in-addressing-os-parity" aria-hidden="true">#</a> In Addressing OS Parity</h2><p>I can understand the desire to have a form control in a web page look and feel like the same (or a similar) control within the operating system (argument 4), but I am not sure that’s a rabbit hole you want to go down. Here’s why: Achieving exact design and functional parity between a platform-specific control and a web control quite often requires extra markup, a bunch of CSS, and a bit of JavaScript. Anything is achievable with unlimited time and budget, so it’s completely doable, but it would be good to estimate the cost to see if you still think it is a worthwhile endeavor.</p><p>Assuming it is, we then have the question of which operating system to model the control after. Or maybe you want to offer a different take on the control based on the operating system your user is using. In that case, we may need to multiply the original estimate by the number of operating systems you want to support. But it’s worth noting that, in the Android world, different device manufacturers often “skin” the operating system to look different from other ones. Sometimes they even do it on a device-by-device basis. We’ll need to figure out which ones you want to include in your platform-like control matrix and multiply the estimate accordingly.</p><p>Then there’s maintenance. We’ll need to test these platform-like controls on each of their corresponding platforms and test the script that determines which experience gets delivered to which device to make sure we’re not accidentally sending the wrong experience. We’ll also need to test the delivery script on every other browser in our test matrix to ensure it is not causing issues there.</p><p>What should we do when a new operating system version is rolled out? iOS, for example, has made radical shifts in the design of their platform-specific controls in each major release. We’ll probably want to create unique versions of the control for each version of each OS we support and we’ll need to keep tabs on upgrades so we don’t end up confusing our users if they visit our site in iOS 7 and have a control that looks like it’s from iOS 6. We’ll need to add the number of OS versions into the multiplier as well.</p><p>Ok, and finally: How many controls did you want to apply this approach to again?</p><p>Or we could use the browser-delivered form control and it will just work.</p><h2 id="in-addressing-altered-behavior" tabindex="-1"><a class="header-anchor" href="#in-addressing-altered-behavior" aria-hidden="true">#</a> In Addressing Altered Behavior</h2><p>I completely agree that not all browser-delivered UI controls work exactly how I would like, but there are several risks in changing the expected behavior.</p><p>First of all, there’s the possibility we could actually end up making the interface more confusing or that the change in behavior might not be exactly what our user’s wanted (either based on what they are used to or our mental model not aligning with theirs). In order to rule out these issues, we should run a few rounds of usability tests. These could be quick café tests or more formal studies depending on the budget.</p><p>Assuming our tests go well, we will need to maintain this code and do all of the requisite browser testing. And potentially upgrade our code as new browsers and browser versions come out. Depending on the complexity of the code, this could become a large requirement, but if it is ultimately in the service of making the web a better, more usable interaction environment, it could be worth it.</p><p>For what it’s worth, if we go this route and are successful, we should consider getting involved in the spec-writing process at the <a href="https://w3.org">W3C</a> or <a href="https://whatwg.org">WhatWG</a>. We should contribute our recommended changes back to the community and share what we learned. If we make a compelling argument, perhaps our idea will become part of some future standard and we can taper off our browser testing when the change lands in the platform.</p><hr><p>As you can probably tell, I’m not a really big fan of changing existing controls as I feel it can amount to a wasted effort. That said, if there are design improvements to be made—“design” in the true sense: being about how usable something is, not just how aesthetically-pleasing it is to someone (e.g. improving contrast, making the control more intuitive, etc.)—I’m willing to accept the change as something we <em>should</em> do and then work to make sure that change has been vetted and, if successful, given away for inclusion in other projects. If it solves a major issue on the web, I want to give that change every opportunity to make it into the appropriate spec by talking to the appropriate folks about it both in-person, in blog posts, and on the appropriate mailing list. If the change solves a problem in a specific browser, I want to see it incorporated into said browser and will file a bug report and try to build momentum around it by engaging the community.</p><p>Anyway, that’s my general position on augmenting browser-delivered UI controls. What are your thoughts on the topic?</p><p><em>Note: I no longer use “native” in this context, but it remains in quoted material.</em></p>]]></content><amg:summary><![CDATA[In his astute post “‘Native experience’ vs styling select boxes”, Bruce Lawson correctly identified a common tension in the web world: wanting better form controls vs. wanting to throw away what the browser does. Here are my thoughts.]]></amg:summary><summary type="html"><![CDATA[<p>In his astute post “‘Native experience’ vs styling select boxes”, Bruce Lawson correctly identified a common tension in the web world: wanting better form controls vs. wanting to throw away what the browser does. Here are my thoughts.</p>]]></summary><category term="web design" /><category term="browsers" /><category term="design" /><category term="mobile" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/presto-change-o/</id><title type="html"><![CDATA[✍🏻 Presto Change-o]]></title><link href="https://www.aaron-gustafson.com/notebook/presto-change-o/" rel="alternate" type="text/html" /><published>2013-03-04T15:11:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>As you’ve probably heard, <a href="http://www.opera.com/press/releases/2013/02/13/">Opera has announced that they are abandoning their Presto rendering engine in favor of Webkit</a>. CTO Håkon Wium Lie (you know, one of the guys who invented CSS) has stated that this will allow Opera’s resources to assist with the continued development and improvement of Webkit:</p><blockquote cite="http://www.opera.com/press/releases/2013/02/13/"><p><span class="initial quote">“</span>It makes more sense to have our experts working with the open source communities to further improve WebKit and Chromium, rather than developing our own rendering engine further. Opera will contribute to the WebKit and Chromium projects, and we have already submitted our first set of patches: to improve multi-column layout.<span class="final quote">”</span></p></blockquote><p>I am hopeful that Opera’s eagerness to help improve Webkit does not peter out over time. After all, it’s tempting to just take the Webkit core and just drop it into your own browser’s chrome, allowing your team to focus on the browser itself rather than the rendering engine. That is, after all, the dream from many authors’ and implementors’ standpoints: browsers compete on features, not standards support.</p><p>So, on the surface, this sounds great: Opera adopts Webkit. Chrome and Safari are already Webkit. Blackberry, Palm, Android, iOS, Symbian, <a href="https://en.wikipedia.org/wiki/List_of_web_browsers#WebKit-based">and many more</a> all use Webkit. That means fewer headaches for me, right? Well, not really. As <a href="http://www.quirksmode.org/webkit.html">PPK informed us years ago there is no one Webkit (on mobile or desktop)</a>.</p><h2>Webkit is what you what you want it to be</h2><p>You see, as an open source project, Webkit is constantly evolving. That’s a good thing as it means newly-proposed features roll quickly into it. As open source software, however, it is also modifiable. That means not only will you have differences between nightly builds of Webkit as new features are added and bugs are fixed, but <a href="https://trac.webkit.org/wiki/FeatureFlags">each browser built on it can choose to jettison certain features or add ones of their own</a>.</p><p>Apple, creators of the Webkit engine (who based their own work on the KHTML rendering engine) for example, have implemented the HTML5 form validation API for JavaScript, but have yet to expose it in the UI. Chrome, on the other hand, implements both. Similarly, Apple also disabled the “file” input type on iOS versions prior to 6. From an implementor standpoint, it’s nice because they can pick and choose their build to be tailored to highlight the strengths (or mask the weaknesses) of their browser or OS, but there is a dark side too: A company can choose to opt-out of specific standards in order to undermine the web as a platform.</p><p>One of the most egregious (in my opinion at least) examples of this is how Apple has treated multimedia on iOS. First, they made it impossible to cache audio &amp; video files for offline use. You could make an argument that this keeps sites from bogging down a device with lots of files, but if you put a user in control of what’s cached &amp; how much room it can take, that’s completely avoidable. But, when you consider that you can’t control the playback of media files solely via JavaScript (without requiring user interaction such as a tap), it becomes clear that Apple doesn’t really want competition from web-based apps. Want to make a web-based game that works offline on iOS and includes sound? Sorry!</p><p>Now Apple isn’t the only company to have tweaked their Webkit instances. HTC is pretty infamous for monkeying around with both Android in general and Webkit specifically too, and they are by no means alone in that. Along the way many of implementors have augmented Webkit for one reason or another and a few introduced serious bugs in the process. Here’s are just a few implementation issues I’ve come across, but there are hundreds more:</p><ul><li>in early versions of webOS, use of optimizeLegibility caused text to disappear entirely;</li><li>in Chrome, when using a font with ligatures, words containing the letter “q” disappeared entirely (it wasn’t a font issue either, the font was from Google’s service and worked fine in other Wekbit browsers including Chromium for Linux); and</li><li>the native Android browser has an incredibly difficult time dealing with overlays, light boxes, and the like when any sort of interactive element (e.g. a link or form control) sits under that layer, often leading to inadvertent taps.</li></ul><p>But the implementors are not the only ones introducing bugs.</p><h2>Webkit itself suffers from numerous long-standing, serious bugs</h2><p>Overall, Webkit is a pretty awesome rendering engine. It’s fast, lightweight, and does a damn good job laying out pages. But it’s not a panacea. It has its issues.</p><p>A brief sojourn through the <a href="https://bugs.webkit.org/">Webkit bug tracker</a> (and <a href="http://code.google.com/p/chromium/issues/">Chromium’s</a> if you’re up for it) reveals a litany of well-documented, long-standing, serious usability, accessibility, and standards-implementation bugs that have not been touched. Here are a couple I’ve been tracking:</p><ul><li><strong><a href="https://bugs.webkit.org/show_bug.cgi?id=5566">Webkit Issue 5566 (October 2005)</a>:</strong> Alt text is not always displayed when the image is missing. That’s a big deal.</li><li><strong><a href="https://bugs.webkit.org/show_bug.cgi?id=15816">Webkit Issue 15816</a> (November 2007):</strong> You cannot select multiple non adjacent items in a multiple select control with the keyboard only.</li><li><strong><a href="http://code.google.com/p/chromium/issues/detail?id=37721">Chromium Issue 37721</a> (March 2010):</strong> When you trigger an anchor link (e.g. a “skip to”), focus never leaves the link and travels to the target, which is <a href="http://www.w3.org/WAI/WCAG20/quickref/#qr-navigation-mechanisms-skip">a big no-no according to the WCAG</a> (Web Content Accessibility Guidelines).</li></ul><p>Now, as the number of companies using (and forking) the Webkit core has increased, the capacity to address these bugs has increased as well. Still, it seems bug fixes are always lagging behind new feature implementations. And then there’s always the folks who want to use a piece of open source software as-is, with little concern for making it better. Hopefully the addition of the incredibly smart developers from Opera to the mix (many of whom are accessibility experts) will bode well for issues like these to be remedied.</p><h2>What does this mean for standards?</h2><p>Webkit is pretty solid in its standards support. It has also been the testing ground for countless HTML5 and CSS3 proposals, many of which have gained traction. With Opera ditching Presto for Webkit, however, I’m a little concerned this may not bode well for the ratification of future standards.</p><p>You see, the web standards process requires that Proposed Recommendation at the W3C <a href="http://www.w3.org/2005/10/Process-20051014/tr#cfr">should have at least 2 interoperable implementations before it can become a Recommendation</a>. With the Opera moving to Webkit, we are left with one less potential implementor as I don’t think you can consider the same Webkit implementation in Safari, Chrome, and Opera to be anything more than the one aggregate implementation. If you considered it as 3 independent implementations, it would essentially grant Webkit license to deem pretty much anything they come up with a standard, making a mockery of the whole process. And so we are more reliant than ever on the Internet Explorer, Mozilla, and Webkit teams being on the same page (and timeline) when it comes to implementations or the whole process will stall.</p><p>From what I gather—granted, it’s been a while since I sat through a W3C Working Group meeting, so my impression could be misguided—things at the W3C seem to be moving along much more smoothly than they have in the past, so perhaps my concern for the standards development process is unwarranted. I hope so, but only time will tell.</p><h2>Further reading:</h2><ul><li><a href="http://techcrunch.com/2013/02/17/the-pros-and-cons-of-a-webkit-monoculture/">The Pros and Cons of a Webkit Monoculture</a></li><li><a href="http://www.informationweek.com/software/infrastructure/operas-webkit-move-isolates-mozilla/240148741">Opera’s WebKit Move Isolates Mozilla</a></li><li><a href="http://www.webmonkey.com/2013/02/think-one-less-browser-means-less-work-think-again/">Think One Fewer Browser Means Less Work? Think Again</a></li><li><a href="http://techcrunch.com/2013/02/09/apple-and-google-still-lead-webkit-development-but-more-smaller-companies-contributing/">Apple And Google Still Lead WebKit Development But More Smaller Companies Contributing</a></li><li><a href="http://ejohn.org/blog/webkit-is-the-jquery-of-browser-engines/">WebKit is the jQuery of Browser Engines</a></li><li><a href="http://robertnyman.com/2013/02/13/the-webkit-culture-web-rendering-engine-diversity/">The WebKit Culture Web Rendering Engine Diversity</a></li><li><a href="http://robertnyman.com/2013/02/14/webkit-an-objective-view/">WebKit: An Objective View</a></li></ul>]]></content><amg:summary><![CDATA[As you’ve probably heard, Opera has announced that they are abandoning their Presto rendering engine in favor of Webkit . CTO Håkon Wium Lie (you know, one of the guys who invented CSS ) has stated that this will allow Opera’s resources…]]></amg:summary><summary type="html"><![CDATA[<p>As you’ve probably heard, Opera has announced that they are abandoning their Presto rendering engine in favor of Webkit . CTO Håkon Wium Lie (you know, one of the guys who invented CSS ) has stated that this will allow Opera’s resources…</p>]]></summary><category term="browsers" /><category term="web standards" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/this-must-not-happen/</id><title type="html"><![CDATA[✍🏻 This Must Not Happen!]]></title><link href="https://www.aaron-gustafson.com/notebook/this-must-not-happen/" rel="alternate" type="text/html" /><published>2012-02-09T11:56:54Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>When I opened my inbox this morning, I nearly fell over. According to <a href="http://glazman.org">Daniel Glazman</a>, co-chair of the <a href="http://www.w3.org/Style/CSS/members.en.php3">CSS Working Group at the W3C</a>, <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2012/02/09/CALL-FOR-ACTION:-THE-OPEN-WEB-NEEDS-YOU-NOW">browser makers are considering supporting the WebKit vendor prefix (<code>-webkit-<em></code>) because the web development community can’t be bothered to use the equivalent experimental properties for other browsers</a>:</p><blockquote cite="http://www.glazman.org/weblog/dotclear/index.php?post/2012/02/09/CALL-FOR-ACTION:-THE-OPEN-WEB-NEEDS-YOU-NOW"><p>WebKit, the rendering engine at the heart of Safari and Chrome, living in iPhones, iPads and Android devices, is now the over-dominant browser on the mobile Web and technically, the mobile Web is full of <em>works-only-in-WebKit</em> web sites while other browsers and their users are crying. Many sites are sniffing the browser’s User-Agent string and filtering out non-WebKit browsers. As in the past with IE6, it’s not a question of innovation but a question of hardware market dominance and software bundled with hardware. But there is an aspect of the problem we did not have during the IE6 era: these web sites are also WebKit-specific because they use only “experimental” CSS properties prefixed with <code>-webkit-</em></code> and not their Mozilla, Microsoft or Opera counterparts. So even if the browser sniffing goes away, web sites will remain broken for non-WebKit browsers…</p><p>In many if not most cases, the <code>-webkit-<em></code> properties WebKit-specific web sites are using do have <code>-moz-</em></code>, <code>-ms-<em></code>, <code>-o-</em></code> equivalents. Gradients, Transforms, Transitions, Animations, border-radius, all interoperable enough to be browser-agnostic. Their web authors need only a few minutes to make the site compatible with Mozilla, Microsoft or Opera. But they never did it.</p><p>Without your help, without a strong reaction, this can lead to one thing only and we’re dangerously not far from there: other browsers will start supporting/implementing themselves the <code>-webkit-<em></code> prefix, turning one single implementation into a new world-wide standard. It will turn a market share into a <em>de facto</em> standard, a single implementation into a world-wide monopoly. Again. It will kill our standardization process. That’s not a question of <em>if</em>, that’s a question of <em>when</em>.</p></blockquote><p>This idea has been floated in conversations for a few years, but this portion of Dan’s post represents an official discussion at the CSS Working Group. An <strong>official discussion</strong> that Adobe, Apple, Disruptive Innovations, Google, HP, Microsoft, Mozilla, Opera and the W3C were all participating in.</p><p>While it is true that writing them all out is tedious, <a href="http://www.alistapart.com/articles/prefix-or-posthack/">vendor-specific prefixes serve a very valuable purpose: they allow a browser manufacturer to experiment with a property before it becomes an official part of the spec</a>. And during that experimental phase, the syntax can (and often does) change. If you use vendor-specific prefixes, <strong>you do so at your own risk</strong>. That’s not to say you shouldn’t use them, but it is to say that you should be careful about when and how you use them.</p><p>The value of vendor-specific prefixes is not really in question here though; they are not the problem. <strong>We are. </strong>We are apparently too lazy to implement CSS in a consistent cross-browser fashion. WTF?!</p><p>Please, I beg you: <strong>Take 10 minutes out of your day today and update every site you can to use the other vendor-specific prefixes (and non-prefixed) versions of each <code>-webkit-</em></code> property you find, even if you’re not sure it exists yet</strong>. And if you need help, ask.</p><p><strong>UPDATE:</strong> If you want to scan your server for files that might need adjustment, try this from the command line:</p><code>sh   find /var/www -type f -name &quot;*.css&quot; -exec grep -il &quot;webkit&quot; {} \; </code><p>If you want to run it locally on a Mac, you should change the folder to <code>~/Sites</code>.</p><p><strong>UPDATE #2:</strong> I created a petition and a pledge:</p><ol><li>Tell Microsoft, Mozilla, and Opera not to implement the <code>-webkit-<em></code> vendor prefix, and</li><li>Pledge to update every site you can to use the other vendor-specific prefixed (and non-prefixed) versions of each <code>-webkit-</em></code> property you find, even if you’re not sure it exists yet</li></ol><p><a href="http://www.change.org/petitions/microsoft-mozilla-opera-dont-make-webkit-prefixes-a-de-facto-standard">Sign the petition “Don’t make -webkit- prefixes a de facto standard” on Change.org</a>.</p>]]></content><amg:summary><![CDATA[When I opened my inbox this morning, I nearly fell over. According to Daniel Glazman , co-chair of the CSS Working Group at the W3C , browser makers are considering supporting the WebKit vendor prefix ( -webkit-* ) because the web…]]></amg:summary><summary type="html"><![CDATA[<p>When I opened my inbox this morning, I nearly fell over. According to Daniel Glazman , co-chair of the CSS Working Group at the W3C , browser makers are considering supporting the WebKit vendor prefix ( -webkit-* ) because the web…</p>]]></summary><category term="web standards" /><category term="CSS" /><category term="browsers" /></entry></feed>