擬似要素で背景画像が表示されない時の備忘録

CSSでH1やH2などの見出しに対して背景色やボーダーなどで装飾をすることは良くある事かと思います。

今回は見出しに対して背景画像を入れて、さらに真ん中の下に三角形(▼)を入れるようなデザインを表現しようとした際に起きた問題とその解決方法の備忘録になります。

こういう感じのやつです↓
見出しのサンプル

以下のように記述してみたところ、なぜかFirefox以外のブラウザ(Chrome、Edge、Safari)では表示されませんでした。

  .classname {
    position: relative;
    background: url("bgimage.jpg");
  }
  .classname::before {
    position: absolute;
    top: 100%;
    left: 50%;
    content: "";
    background: url("bgimage.jpg");
    border: 25px solid white;
    border-top-color: transparent;
    margin-left: -25px;
  }

なので、以下のように修正したところ、無事にChrome、Edge、Safariでも表示されました。

  .classname {
    position: relative;
    background: url("bgimage.jpg");
  }
  .classname::before {
    position: absolute;
    top: 100%;
    left: 50%;
    content: "";
    background: url("bgimage.jpg");
    width: 50px;
    height: 50px;
    margin-left: -25px;
  }
  .classname::after {
    position: absolute;
    top: 100%;
    left: 50%;
    content: "";
    border: 25px solid white;
    border-top-color: transparent;
    margin-left: -25px;
  }

ひとつの擬似要素だけでは背景画像にボーダーで作った(▼)がマスクとしてうまく機能しないため、擬似要素を2つ使って四角い背景画像に(▼)でマスクをかけています。

ボックスモデルをよくよく考えてみたら最初の方法では表示されないのは当然の事だと思いますが、Firefoxでは表示できてしまっていたので、ブラウザの仕様の違いって事なんでしょうかね。。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする