LoginSignup
8
5

More than 5 years have passed since last update.

Android の Chrome で input type=date の ShadowDOM を制御する

Last updated at Posted at 2016-07-12

要約

PC の Chrome ではスタイルの変更が効くが、 Android 上だと効かなかった。
生成される ShadowDOM が異なることが原因で、Android 上では
input[type=date]::-webkit-date-and-time-value で制御できる。

困ったこと

<input type="date" style="width: 7em;" />

を Android の Chrome で見ると次のように表示されます。
※Chrome 51.0.2704.81 で確認しています

Screenshot_basic.png

ここで▼を消したいと考え、Chrome のデベロッパー ツールで
ShadowDOM を確認しながら、次のように CSS を書きました。

input[type=date],
input[type=date]::-webkit-calendar-picker-indicator {
    -webkit-appearance: none;
}

Screenshot_before.png

さて、あとはこの右端のスペースで文字が切れてしまっているのを直せばOK
という話なのですが、この右側のスペースがなかなか消せませんでした。
PC の Chrome では消せるのですが、Android の Chrome では消えてくれません。

解決策

次の指定でスペースを調整できます。

input[type=date]::-webkit-date-and-time-value { 
   margin-right: 1px;
}

Screenshot_after.png

無事、文字切れを解消できました。

種明かしをすると、PC の Chrome ( Toggle device toolbar でスマホっぽく表示しても無駄 )
と、Android の Chrome で生成される ShadowDOM が異なることが原因です。

Android の Chrome で生成される ShadowDOM と適用されている style は次の通りです。
PC のものと比べてみてください。結構異なっているはずです。

shadow_dom.png

styles.png

では、どうやってこの DOM と style を知るの?という話ですが、
Android と PC を USB ケーブルで繋げ、 Android 上の Chrome をデベロッパー ツールで覗きます。

ケーブルで繋げる方法についてはネットに情報が載っているので確認してみてください。
一番しっかり書かれているのはたぶんコレ https://developer.chrome.com/devtools/docs/remote-debugging

いちいち繋げて確認するのは大変なので、どこかに情報がまとまっていれば良いんですけどね。
(2016/07/18 追記)
しっかり確認とれてませんが、あたっている user agent stylesheet の style 一覧は
PC版 https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css
Android版 https://trac.webkit.org/browser/trunk/Source/WebCore/css/html.css
と予想。

補足

ShadowDOM は、デベロッパー ツール の Settings の下図の場所にチェックをつけると表示されるようになります。

show_shadow_dom.png

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5