NextJS で RGBA が HSLA に変換されたせいで linear-gradient に嵌った 🎨
CSSNext.js
Next.js で SSG すると、いろいろなものが圧縮されて静的ファイルができあがるのですが、CSS で RGBA でカラー指定をしていると、 HSLA に変換されるようです。 それ自体はいいのですが、下記のような問題が発生しました。
問題
今回のブログの背景は、青時に白い格子柄のパターンを CSS background-image の repeating-linear-gradient
で作っています。
- ビルド前
background-image: repeating-linear-gradient( 0deg, rgba(255, 255, 255, 0.43) 0 1px, transparent 1px 20px ), repeating-linear-gradient( 90deg, rgba(255, 255, 255, 0.43) 0 1px, transparent 1px 20px );
- ビルド後
background-image: repeating-linear-gradient( 0deg, hsla(0,0%,100%,.43) 1px, // 0 が抜けている👀 transparent 1px 20px ), repeating-linear-gradient( 90deg, hsla(0,0%,100%,.43) 1px, // 0 が抜けている👀 transparent 1px 20px );
0 が省かれている?ためにグラデーションが効かなくなっていました。
解決策?
deg
指定を、to <side-or-corner>
に変えたところ、0 が省かれなくなり、グラデーションが表示されました。
- ビルド前
background-image: repeating-linear-gradient( to bottom, rgba(255, 255, 255, 0.43) 0 1px, transparent 1px 20px ), repeating-linear-gradient( to left, rgba(255, 255, 255, 0.43) 0 1px, transparent 1px 20px );
- ビルド後
background-image: repeating-linear-gradient( 180deg, hsla(0,0%,100%,.43) 0 1px, // 0 がついている transparent 1px 20px ), repeating-linear-gradient( 270deg, hsla(0,0%,100%,.43) 0 1px, // 0 がついている transparent 1px 20px );
記述を変えたことで解決したのですが、結局 deg
に変換されるので、なんでなのかなぁという感じでした。