This is the web platform

Feature On Desktop On Mobile PNG alpha transparency Yes Yes querySelector/querySelectorAll Yes getElementsByClassName Yes CSS3 Multiple backgrounds Yes CSS3 Background-image options Yes CSS Table display Yes CSS Generated content Yes CSS 2.1 selectors Yes Yes CSS3 selectors Yes CSS3 Text-shadow Yes CSS3 Colors Yes CSS3 Box-sizing Yes CSS3 Media Queries Yes CSS3 Multiple column layout Yes Canvas (basic support) Yes Cross-document messaging Yes Data URIs Yes XHTML served as application/xhtml+xml Yes CSS3 Opacity Yes Yes JSON parsing Yes Yes CSS3 Text-overflow Yes CSS3 Overflow-wrap Yes Yes CSS min/max-width/height Yes Yes CSS inline-block Yes Yes dataset & data-* attributes Yes Yes CSS Counters Yes getComputedStyle Yes contentEditable Yes Drag and Drop Yes Pretty damning.


This content originally appeared on Modern Web Development with Chrome and was authored by Paul Kinlan

<table> <thead> <tr> <th>Feature</th> <th>On Desktop</th> <th>On Mobile</th> </tr> </thead> <tbody> <tr> <td>PNG alpha transparency</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>querySelector/querySelectorAll</td> <td></td> <td>Yes</td> </tr> <tr> <td>getElementsByClassName</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Multiple backgrounds</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Background-image options</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS Table display</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS Generated content</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS 2.1 selectors</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 selectors</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Text-shadow</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Colors</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Box-sizing</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Media Queries</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Multiple column layout</td> <td></td> <td>Yes</td> </tr> <tr> <td>Canvas (basic support)</td> <td></td> <td>Yes</td> </tr> <tr> <td>Cross-document messaging</td> <td></td> <td>Yes</td> </tr> <tr> <td>Data URIs</td> <td></td> <td>Yes</td> </tr> <tr> <td>XHTML served as application/xhtml+xml</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Opacity</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>JSON parsing</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Text-overflow</td> <td></td> <td>Yes</td> </tr> <tr> <td>CSS3 Overflow-wrap</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS min/max-width/height</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS inline-block</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>dataset & data-* attributes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Counters</td> <td></td> <td>Yes</td> </tr> <tr> <td>getComputedStyle</td> <td></td> <td>Yes</td> </tr> <tr> <td>contentEditable</td> <td>Yes</td> <td></td> </tr> <tr> <td>Drag and Drop</td> <td>Yes</td> <td></td> </tr> </tbody> </table> <p>Pretty damning.</p> <p>At "100%" coverage of features that are in all browsers split by Mobile and Desktop then this is all we have to play with.</p> <p>Ok, this is actually misleading. If you are <a href="http://ondesktop.iwanttouse.com/#cors">willing to miss out on 1% extra reach for your desktop</a> audience then you can get similar feature parity with mobile. But still the feature support that is ubiquitous across the web is actually pretty small especially if you are supporting IE8.</p> <h2 id="how-do-i-know-what-the-web-platform-is">How do I know what the web platform is?</h2> <p>Last year I built <a href="http://iwanttouse.com">iwanttouse.com</a> to make it easier for you to determine the cost on your userbase supporting certain features will have. <em>If I support X, I can only reach Y% of the web's users</em></p> <p>The project is pretty simple. It is a projection of the data on <a href="http://caniuse.com">CanIUse.com</a>. For a given "feature" it looks for the earliest version on a platform that it was supported on and sums the "usage".</p> <p>I split the feature set by <a href="http://onmobile.iwanttouse.com">Mobile</a> and <a href="http://ondesktop.iwanttouse.com">Desktop</a> and it gives you some pretty interesting nuggets of data.</p> <p>Two things that fell out of this:</p> <ul> <li><strong>Features for Free</strong>. If I choose <a href="http://www.iwanttouse.com/#audio-api">Web Audio</a> (43% on mobile) I can also safely use other features such as <a href="http://www.iwanttouse.com/#eventsource">Server-sent DOM Events</a> because all browsers that support the former support the latter. (Note: the inverse relationship is not always true)</li> <li><strong>Ubiquitous Platform features</strong>. As above but platform features that we can rely on being present in all browsers with any significant share.</li> </ul> <p>I want to focus on <strong>Ubiquitous Platform features</strong>.</p> <h2 id="how-do-we-improve-the-web-platform">How do we improve the web platform?</h2> <p>As a web developer today I face a couple of problems: Legacy browsers that aren't updated and inconsistent implementation across browsers.</p> <p>The web feels like a pirate ship, everyone is hacking and slashing in different directions and we are lucky enough that the ship goes forwards. Slowly. How do we become a <a href="http://en.wikipedia.org/wiki/Ben_Ainslie">Ben Ainslie</a> America's Cup winning yacht?... (Ack, I can't believe I said that). Point is, how can we improve the modern mobile web consistently if there are multiple large players in the eco-system?</p> <ol> <li>Wait it out and let the Browser vendors do their thing. This will change over time as people move off the platforms that have stopped progressing as their devices are renewed.</li> <li>Ignore the old browsers and the users that use them and go for it.</li> <li>Push for consistency across the platform.</li> </ol> <p>My preference is for 2 and 3. But actually 1 is what we <em>really</em> <strong>really</strong> need to solve.</p> <p>I like to solve level 1 problems — problems with a technical solution — they're the things I can fix. I can meet developers and work with them on their sites to measurably make the web better one large site at a time, but it is all small scale...</p> <p>I decided to take a peek at the features that are supported across the latest mobile browsers and the reach that will have: <strong><a href="http://onmobile.iwanttouse.com/#geolocation,flexbox">44%</a></strong>. We can't honestly say to a business that you should build experiences for 44% of your potential user base (well, it depends who you want to sell or attract - your demographics might be highly skewed - i.e.. Government legislation, Business demands.)</p> <p>If you look at the head of the mobile web (44%) there is a compelling feature set. You can build some amazing applications with it.</p> <table> <thead> <tr> <th>Feature</th> <th>Android Browser 4.4</th> <th>iOS Safari 7.0</th> <th>Chrome for Android 32.0</th> <th>IE Mobile 10.0</th> <th>Opera Mobile 16.0</th> <th>Firefox for Android 26.0</th> <th>Blackberry Browser 10.0</th> </tr> </thead> <tbody> <tr> <td>XHTML served as application/xhtml+xml</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>XMLHttpRequest 2</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>WOFF - Web Open Font Format</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Web Workers</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Web Sockets</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Video element</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>ECMAScript 5 Strict Mode</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Typed Arrays</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Transforms</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Text-overflow</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>SVG in HTML img element</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Inline SVG in HTML5</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>SVG filters</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>SVG in CSS backgrounds</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>SVG (basic support)</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>defer attribute for external scripts</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>async attribute for external scripts</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>requestAnimationFrame</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>rem (root em) units</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>querySelector/querySelectorAll</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>PNG alpha transparency</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Page Visibility</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS outline</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Offline web applications</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Web Storage - name/value pairs</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Multiple backgrounds</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS min/max-width/height</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>matchMedia</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>JSON parsing</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Range input type</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>input placeholder attribute</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS inline-block</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>sandbox attribute for iframes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>New semantic elements</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Session history management</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Hashchange event</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>getElementsByClassName</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>getComputedStyle</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Geolocation</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>@font-face Web fonts</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>FileReader API</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Colors</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Transitions</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Text-shadow</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Table display</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 selectors</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS 2.1 selectors</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Repeating Gradients</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Opacity</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Media Queries</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Gradients</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Generated content</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Counters</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Box-shadow</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Animation</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Cross-Origin Resource Sharing</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>contenteditable attribute (basic support)</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>classList (DOMTokenList )</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Text API for Canvas</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Canvas (basic support)</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>calc() as CSS unit value</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Border-radius (rounded corners)</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Background-image options</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Audio element</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Cross-document messaging</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 3D Transforms</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>MPEG-4/H.264 video format</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> </tr> <tr> <td>Data URIs</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>dataset & data-* attributes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS position:fixed</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Content Security Policy</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Blob constructing</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Overflow-wrap</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> </tr> <tr> <td>Progress & Meter</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Flexible Box Layout Module</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> </tr> </tbody> </table> <p>But like I said. <em>44%</em>. It's a big head but not a feasible platform for the vast majority of companies. I produced the following breakdown of features that we should get Chrome and other vendors to fix feature support at a tactical level to make for a more consistent web and make developers lives easier. The problem is we are only fixing it for <em>44%</em> of the web's users. <em>Documented below for consistency</em></p> <table> <thead> <tr> <th>Feature</th> <th>Android Browser 4.4</th> <th>iOS Safari 7.0</th> <th>Chrome for Android 32.0</th> <th>IE Mobile 10.0</th> <th>Opera Mobile 16.0</th> <th>Firefox for Android 26.0</th> <th>Blackberry Browser 10.0</th> </tr> </thead> <tbody> <tr> <td>TTF/OTF - TrueType and OpenType font support</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Unknown</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Touch events</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Navigation Timing API</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Mutation Observer</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Intrinsic & Extrinsic Sizing</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Font feature settings</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>File API</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Server-sent DOM events</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 tab-size</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Channel messaging</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>CSS3 Border images</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Blob URLs</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Viewport units: vw, vh, vmin, vmax</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> </tr> <tr> <td>SVG SMIL animation</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>IndexedDB</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Partial</td> </tr> <tr> <td>CSS3 word-break</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> </tr> <tr> <td>SVG fonts</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>Download attribute</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Details & Summary elements</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>CSS Filter Effects</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>CSS3 Multiple column layout</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> </tr> <tr> <td>Date/time input types</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>Partial</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>HTML5 form features</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> </tr> <tr> <td>Form validation</td> <td>No</td> <td>No</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS3 Box-sizing</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> </tr> <tr> <td>WAI-ARIA Accessibility features</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>SVG effects for HTML</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>matches() DOM method</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> </tr> <tr> <td>HTML templates</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Strict Transport Security</td> <td>Yes</td> <td>Unknown</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>getUserMedia/Stream API</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Color input type</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>CSS Feature Queries</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Clipboard API</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> <td>Yes</td> <td>Partial</td> </tr> <tr> <td>Canvas blend modes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Ruby annotation</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> </tr> <tr> <td>Number input type</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> </tr> <tr> <td>DeviceOrientation events</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> </tr> <tr> <td>WebGL - 3D Canvas graphics</td> <td>No</td> <td>No</td> <td>Partial</td> <td>No</td> <td>Yes</td> <td>Partial</td> <td>Yes</td> </tr> <tr> <td>Web Notifications</td> <td>Partial</td> <td>No</td> <td>No</td> <td>No</td> <td>Partial</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Full Screen API</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Partial</td> <td>Partial</td> </tr> <tr> <td>WebP image format</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> </tr> <tr> <td>SVG fragment identifiers</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Shadow DOM</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> </tr> <tr> <td>WebRTC Peer-to-peer connections</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>MathML</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Filesystem & FileWriter API</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>CSS Masks</td> <td>Partial</td> <td>Partial</td> <td>Partial</td> <td>No</td> <td>Partial</td> <td>No</td> <td>Partial</td> </tr> <tr> <td>Web Audio API</td> <td>No</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>WebM video format</td> <td>Partial</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Partial</td> <td>Partial</td> <td>No</td> </tr> <tr> <td>Datalist element</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>CSS Hyphenation</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>CSS Regions</td> <td>No</td> <td>Yes</td> <td>No</td> <td>Partial</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>Promises</td> <td>No</td> <td>No</td> <td>Partial</td> <td>No</td> <td>No</td> <td>Partial</td> <td>No</td> </tr> <tr> <td>Scoped CSS</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Shared Web Workers</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> </tr> <tr> <td>Opus</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Ogg/Theora video format</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>JPEG XR image format</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>Drag and Drop</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>CSS resize property</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>CSS Grid Layout</td> <td>No</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>Pointer events</td> <td>No</td> <td>No</td> <td>No</td> <td>Partial</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>CSS3 object-fit/object-position</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>Toolbar/context menu</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>CSS Variables</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> </tr> <tr> <td>Blending of CSS image</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> <td>No</td> </tr> </tbody> </table> <p>Getting these features implemented would be cool but there is no additional reach at all. More users will not be affected by these new features. We didn't increase the size of the user base. Yes we might get an amazing WebGL based WebComponents app that people use but will they upgrade their browser or phone to be able to use it? Probably not.</p> <h2 id="so-what-do-we-do">So what do we do?</h2> <p>How do we move the web platform forward in a meaningful way?</p> <p>It is hard.</p> <p>Do we want to get back to a world where this is a thing?</p> <p><img src="https://paul.kinlan.me/images/ienetscape.jpg" alt="best viewed in"></p> <p>Maybe.???</p> <p>At a minimum we should:</p> <ul> <li><a href="http://www.iwanttouse.com/#css-boxshadow">Build for the 90%</a> and get your partners and customers to see at a minimum the experience that you can build with a huge amount of reach.</li> <li><a href="http://caniuse.com">Understand the choices</a> you make and the <a href="http://iwanttouse.com">impact they have</a>. Push your customers and partners to use progressive enchancement. Don't exclude a huge number of users for a single feature.</li> <li>Push for consistency over new platform features across all browser vendors.</li> </ul> <p><a href="https://twitter.com/intent/tweet?text=.%40Paul_Kinlan+you+are+wrong+about+the+web+because...">Tell me I am wrong</a></p>


This content originally appeared on Modern Web Development with Chrome and was authored by Paul Kinlan


Print Share Comment Cite Upload Translate Updates
APA

Paul Kinlan | Sciencx (2014-02-24T00:00:00+00:00) This is the web platform. Retrieved from https://www.scien.cx/2014/02/24/this-is-the-web-platform/

MLA
" » This is the web platform." Paul Kinlan | Sciencx - Monday February 24, 2014, https://www.scien.cx/2014/02/24/this-is-the-web-platform/
HARVARD
Paul Kinlan | Sciencx Monday February 24, 2014 » This is the web platform., viewed ,<https://www.scien.cx/2014/02/24/this-is-the-web-platform/>
VANCOUVER
Paul Kinlan | Sciencx - » This is the web platform. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2014/02/24/this-is-the-web-platform/
CHICAGO
" » This is the web platform." Paul Kinlan | Sciencx - Accessed . https://www.scien.cx/2014/02/24/this-is-the-web-platform/
IEEE
" » This is the web platform." Paul Kinlan | Sciencx [Online]. Available: https://www.scien.cx/2014/02/24/this-is-the-web-platform/. [Accessed: ]
rf:citation
» This is the web platform | Paul Kinlan | Sciencx | https://www.scien.cx/2014/02/24/this-is-the-web-platform/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.