Hiratake Web ロゴ

左右にだけ影をつけたいときにoverflow-yにclipを指定したらいい感じになった

投稿した日
更新した日
書いたひと
icon
ひらたけ

CSS で 水平方向にだけ影をつけたい ときに色々試していたときに、overflow-yclip を指定したらいい感じになったので、調べたこと含め自分用のメモとして残しておこうと思います。そもそも overflow プロパティに clip という値があることを認識していなかったとこある。


要素の左右にだけ影を表示したいときに、以下のように外側を囲んでいる要素の overflow-y プロパティに hidden を指定して影だけ消せないかとやっていたのですが、これだとうまくいかず。(以下のコードでは Tailwind CSS のクラスを使用しています)

<!-- overflow-y: hidden; を指定した場合 -->
<div class="overflow-y-hidden">
  <div
    class="flex size-20 items-center justify-center bg-red-600 text-white"
    style="box-shadow: #333 0 0 16px"
  >
    <span>hidden</span>
  </div>
</div>

MDN でドキュメントを読んでいたときに overflow プロパティに clip という値があることを知り、使ってみると上下に表示された影が消えて左右の影だけが残りました。(以下のコードでは Tailwind CSS のクラスを使用しています)

<!-- overflow-y: clip; を指定した場合 -->
<div class="overflow-y-clip">
  <div
    class="flex size-20 items-center justify-center bg-green-600 text-white"
    style="box-shadow: #333 0 0 16px"
  >
    <span>clip</span>
  </div>
</div>

以下ドキュメントによると、overflow-x もしくは overflow-y の値が visible でも clip でもない場合、もう一方に指定された visibleauto に、cliphidden として計算されるとのこと。

1 つ目のコードで overflow-yhidden を指定したとき、これは visible でも clip でもないため overflow-x に指定されている初期値の visibleauto として計算されることになります。auto の場合、コンテナの外側にはみ出した影は表示されない(ブラウザによる?)ようなので、上下の影だけを消したいのに左右の影まで消えてしまう、という状態になっていたっぽい。

以下に実際にブラウザで表示を確認できるようコードを置いてありますので、必要があればご確認ください。

当たり前のように使っていた overflow プロパティですが、普通に知らない値があって驚き。知ってると思ってるものでも、ちゃんと情報をアップデートしていかないとダメですね…。