下記ブログを参考にしてアクセシビリティを維持したままCheckboxやRadioボタンを作ろうとしたが、特定のサイズ以下でずれる問題に遭遇した。
Building a Checkbox Component with React and styled-components
以下がそのずれているときの画像。 16pxにしたとき親要素に対して少し下側にずれている。
しかし、20pxにしたときには以下のように親要素とぴったり揃う。
サイズによって変わるので割と謎だったが、調べてみるとtextの descender
が原因だった。
inline要素は g
や y
といったベースラインより下に突き抜ける文字用のために下側のスペースを確保してしまうようで、それが原因でSVGが下側にずれていた。
原因がわかったので、上記の問題は line-height: 0;
をSVGをラップしている要素に当て、 descender
が確保されないようにすることで解決した。