いまだにIE11とAndroid4系サポートで苦しんでるフロントの人はいるんでしょうか。
かくいう私もこいつらにさんざん苦しめられたので、Can I Useを元に未対応なHTML/CSS/JSの仕様をざっくり一覧にしてみましたぞ。
「これだけ未対応なんだからサポート切らせてください」って言えるように。
Androidの保守終了時期
保守終了ラッシュが終わったAndroid……4.4、5.0、5.1は終了済み。 なんとなく綴ってみた/BIGLOBEウェブリブログ さんによる超わかりやすい保守状況リストによると、
Android 4.4.4 (2017年10月のアップデートで保守終了)
Android 5.0.2(2017年11月のアップデートを最後に終了)
Android 5.1.1(2018年3月のアップデートを最後に終了)
だそうです。
OSの保守自体が2年も前に終わってるなら、アプリやWebサイト界隈のサポートも終わってよろしくない?
個人的にはAndroid 5系も引導渡してもいいと思ってますけど、5系はまだ運用してるメディア系サイトで5%くらいシェアがあったので保留してあげました。
(4系はバージョン全体で3%いくかいかないかくらいだった)
Android 6.0の保守も終了か?2018年9月保守はなし。 を見るに6系も登場から4年経つので今年中に保守終わるかなという雰囲気があります。
iOSは昔からバージョンの切り替わりが優秀で、新モデル登場で一気に古いOSが淘汰されていく傾向があるので旧OS対応はさほど気にする必要ないかなと。
上記運用中サイトではiOS12のシェアが91.5%と大変美しい割合になっております。
HTML
IE11 | Edge | Android | |
---|---|---|---|
rel=noopener | × | × | 5 |
Minimum length attribute for input fields | × | 17 | 5 |
WebGL – 3D Canvas graphics | ○* | ○* | 5 |
Picture element | × | 13 | 5 |
Srcset and sizes attributes | × | 16 | 5 |
rel=”noopener”はLighthouseで推奨されるやつなので、これ未対応なのはなーって。
video要素やaudio要素はもう普通に使えるけど、Picture要素はご覧の有様です。
CSS
IE11 | Edge | Android | |
---|---|---|---|
CSS Flexible Box Layout Module | Partial | ○ | 4.4 |
CSS Variables | × | 16 | 5 |
calc() as CSS unit value | Partial | ○ | 4(Partial) |
CSS Grid Layout (level 1) | Partial | 16 | 5 |
CSS justify-content: space-evenly | × | 16(Partial) | 5 |
CSS Filter Effects | × | 13(Partial) | 4.4 |
::placeholder CSS pseudo-element | × | 12(Partial) | 2-4.4.4(Partial) 5 |
Media Queries: interaction media features | × | ○ | 5 |
Viewport units: vw, vh, vmin, vmax | Partial | 12-15(Partial) 16 |
4.4 |
最近よく紹介されてるのを見るナウいCSSのテクがだいたい未対応っていう…
なくても組めるけど「あれ使えばスッとできるのに」っていうつらみが蓄積する。
Grid LayoutはAutoprefixerが変換する機能つけてるんだけど、対応する書き方してないと変換してくれない。
これで某LPサイト作ったとき苦しめられたので運用中のメディアサイトではIE11を切りました。
Media Queries:interaction media features は @media(hover:hover) とかです。
マウスオーバーにだけなんかしたいって時に重宝するんだけど11は未対応。
JavaScript
IE11 | Edge | Android | |
---|---|---|---|
Array.prototype.find | × | 15 | 5 |
Array.prototype.includes | × | 14 | 5 |
Arrow functions | × | ○ | 5 |
Async functions | × | 15 | 5 |
ES6 classes | × | ○ | 5 |
ES6 Number | × | ○ | 5 |
ES6 Template Literals | × | 13 | 5 |
JavaScript modules via script tag | × | 16 | 5 |
let | Partial | ○ | 5 |
Object.entries | × | 14 | 5 |
Object.values method | × | 12 | 5 |
Promises | × | ○ | 4.4.4 |
Proxy object | × | ○ | 5 |
Rest parameters | × | ○ | 5 |
String.prototype.includes | × | ○ | 5 |
String.prototype.padStart() String.prototype.padEnd() |
× | 15 | 5 |
ナウい書き方したときはBabelかませないと動きませんよ。
つまりIE11とAndroid4系とEdge他の古いバージョンを切り捨てたらPolyfillなくなる分だけ手間と容量が減らせるわけです。
個人的には Promise、async/await 未対応なだけで切っていいと思ってる。