背景画像の上に半透明のカラーレイヤーがありますか?


213

DIVがあり、パターンを背景として使用したいと思います。このパターンは灰色です。もう少し素敵にするために、薄い透明色の「レイヤー」を重ねます。以下は私が試したものですが、うまくいきませんでした。背景画像の上に色付きのレイヤーを配置する方法はありますか?

ここに私のCSSがあります:

background: url('../img/bg/diagonalnoise.png');
background-color: rgba(248, 247, 216, 0.7);

回答:


217

ここにあります:

.background {
    background:url('../img/bg/diagonalnoise.png');
    position: relative;
}

.layer {
    background-color: rgba(248, 247, 216, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

このためのHTML:

<div class="background">
    <div class="layer">
    </div>
</div>

もちろん、.backgroundクラス内に他の要素がない場合は、クラスの幅と高さを定義する必要があります


10
相対的および絶対的な位置付けの理由は絶対にありません。
Sven Bieder

2
ええ、もちろん、私はモーダルポップアップに少し興味を持っていましたが、理由はわかりません。もちろん、答えはよりクリーンで簡単です。
JohannesKlauß、2012

@JohannesKlaußなぜ彼の答えはよりクリーンで簡単ですか?少なくとも私の場合は機能していません。
Danny22

2
これはもっときれいだと思います。BGなどよりもコンテンツが長くない場合は、ボックスの影には問題があります
ジャック

1
完璧なソリューション!
ロイショア2018

299

これは非常に古いスレッドであることは知っていますが、Googleの上部に表示されるため、別の方法を紹介します。

これは純粋なCSSであり、追加のHTMLを必要としません。

box-shadow: inset 0 0 0 1000px rgba(0,0,0,.2);

ボックスシャドウ機能には、驚くほど多くの用途があります。


3
非常に素晴らしい!これはパフォーマンスの点で優れたアイデアですか?ボックスシャドウのパフォーマンスは調べていません
ミゲルスティーブンス

18
素晴らしいハックですが、パフォーマンスを大幅に向上させます。これにより、すべてのモバイルデバイスの速度が低下します。ボックスシャドウは、モバイルデバイスでパフォーマンスの問題を引き起こします。特に他の方法がある場合は、回避することをお勧めします。
Hexodus

4
あなたは天才です!
ミカ

7
数年後の更新です。現在、kotulas.com全体でこの方法を使用しており、気づいたほどの速度低下はありません。何百もの要素で使用している場合は問題になる可能性がありますが、150以上の画像があるページでも、私にとっては問題ではありません。(そして、これは仕事用のコンピューター上にあります。)当然、それを事前にテストして、それが自分に適していることを確認する必要があります。そして、古いブラウザーの互換性に関しては、フォールバックはユーザーにホバーオーバー効果が表示されない(他の問題はない)ことなので、私はそれで大丈夫です。
BevansDesign 2017

8
個人的には次のように使用しますbox-shadow: inset 0 0 0 100vmax rgba(0, 0, 0, .2)
神経伝達物質

135

CSS-Tricksから... z-indexingと疑似要素を追加せずにこれを行う1つのステップの方法があります-線形グラデーションが必要です、つまりCSS3サポートが必要だと思います

.tinted-image {
  background-image: 
    /* top, transparent red */
    linear-gradient(
      rgba(255, 0, 0, 0.45), 
      rgba(255, 0, 0, 0.45)
    ),
    /* your image */
    url(image.jpg);
}

これはうまくいきました。グラデーションをアニメーション化することはできませんが、色をパルス化したい場合は、どの方法でも可能だとは思わないでください。
2015

1
私はこの要素background-size:cover;background-position:center center;設定しました。これはその効果をキャンセルするようです。
Solace

background-size:coverでうまく機能します。あと。少なくともクロム。
davidbonachera 2016年

背景パターンや画像に色を付ける最も確実な方法ですが、特にbodyタグに適用すると、Chromeはかなりの遅れでスクロールします。FFはそれをうまく処理します。
Hastig Zusammenstellen 2016

4
トムの参照を取得するのに十分古いのは私だけですか?
エイブラム

46

線形グラデーションと画像を使用することもできます:http : //codepen.io/anon/pen/RPweox

.background{
  background: linear-gradient(rgba(0,0,0,.5), rgba(0,0,0,.5)),
    url('http://www.imageurl.com');
}

これは、線形グラデーション関数が背景スタックに追加される画像を作成するためです。https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient


ツールボックスに追加する素晴らしいハック!
Adam Yost

26

次に、bg画像を含むラッピング要素と、その中にbg色を含むcontent要素が必要です。

<div id="Wrapper">
  <div id="Content">
    <!-- content here -->
  </div>
</div>

そしてCSS:

#Wrapper{
    background:url(../img/bg/diagonalnoise.png); 
    width:300px; 
    height:300px;
}

#Content{
    background-color:rgba(248,247,216,0.7); 
    width:100%; 
    height:100%;
}

25

これを試して。私のために働く。

.background {
    background-image: url(images/images.jpg);
    display: block;
    position: relative;
}

.background::after {
    content: "";
    background: rgba(45, 88, 35, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
}

.background > * {
    z-index: 10;
}

2
これは、追加のHTML要素を必要としない本当に素晴らしい答えです。ありがとう!
patr1ck 2014

16

私はこれを画像にカラーティントとグラデーションの両方を適用する方法として使用し、画像のカラープロファイルを制御できない場合にダイナミックオーバーレイテキストを読みやすくするためのスタイルを設定しやすくしました。z-indexについて心配する必要はありません。

HTML

<div class="background-image"></div>

SASS

.background-image {
  background: url('../img/bg/diagonalnoise.png') repeat;
  &:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(248, 247, 216, 0.7);
  }
}

CSS

.background-image {
  background: url('../img/bg/diagonalnoise.png') repeat;
}

.background-image:before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    background: rgba(248, 247, 216, 0.7);
  }

それが役に立てば幸い


これは機能しますが、2番目の「左:0;」を変更する必要があります。「下:0;」に
Matthew Hudson

1
これは不必要な要素の作成を回避するため、受け入れられる答えになるはずです。.background-image divが少なくとも次の位置にあることを確認してください:relative
mjsarfatti

6

可能な解決策の包括的な概要については、https://stackoverflow.com/a/18471979/193494で私の回答を参照してください

  1. 線形グラデーションで複数の背景を使用し、
  2. 生成されたPNGを持つ複数の背景、または
  3. :after疑似要素を二次的な背景レイヤーとして機能するようにスタイル設定する。

4
回答としてリンクを投稿しないでください。ここに関連するコードを入力しますが、それからコピーしたソースにリンクします。
Blazemonger 2014

4

なぜそんなに複雑なのですか?パターンが透明になり、背景色が塗りつぶされやすくなることを除いて、ソリューションはほぼ適切でした。PNGには透明度を含めることができます。フォトショップを使用して、レイヤーを70%に設定し、画像を再保存して、パターンを透明にします。その場合、必要なセレクタは1つだけです。クロスブラウザで動作します。

CSS:

.background {
   background: url('../img/bg/diagonalnoise.png');/* transparent png image*/
   background-color: rgb(248, 247, 216);
}

HTML:

<div class="background">
   ...
</div> 

これが基本です。私は切り替えどこ使用例は、以下backgroundbackground-image両方の性質は同じように動作します。

body { margin: 0; }
div {
   height: 110px !important;
   padding: 1em;
   text-transform: uppercase;
   font-family: Arial, Helvetica, sans-serif;
   font-weight: 600;
   color: white;
   text-shadow: 0 0 2px #333;
}
.background {
   background-image: url('https://www.transparenttextures.com/patterns/arabesque.png');/* transparent png image */
   }
.col-one {
  background-color: rgb(255, 255, 0);
}
.col-two {
  background-color: rgb(0, 255, 255);
}
.col-three {
  background-color: rgb(0, 255, 0);
}
<div class="background col-one">
 1. Background
</div> 
<div class="background col-two">
 2. Background
</div> 
<div class="background col-three">
 3. Background
</div> 

ちょっと待ってください!外部パターンの読み込みに時間がかかります。

このウェブサイトはかなり遅いようです...


たとえば:hover、背景色を適用して、背景画像の上にオーバーレイできますか?
サー

数行のコードを追加するよりも、Photoshopを起動してこれを行うのに時間がかかります。
nihiser

私はこれを試しましたが、透明なpngはファイルサイズがかなり大きい(〜500kb)ことがわかりました。これは、このアプローチの欠点かもしれません
madz

@madz私はパターンを作ることについて話しました-それは大きなファイルにはならないはずです。5kb程度の110x110pxの画像を使用した例を追加しました。より大きな画像が本当に必要な場合は、tinypng.comを使用して圧縮してみてください。
Hexodus

2

あなたは、たとえば生成することができ、半透明ピクセル、使用することができ、ここにも、BASE64でここで白50%の例であります:

background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=),
url(../img/leftpanel/intro1.png);
background-size: cover, cover;
  • アップロードせずに

  • 追加のHTMLなし

  • 読み込みはボックスシャドウや線形グラデーションよりも速くなると思います


2

これは、CSSのみを使用したより単純なトリックです。

<div class="background"> </div>
    <style>
    .background {
      position:relative;
      height:50px;
      background-color: rgba(248, 247, 216, 0.7);
      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAJElEQVQYV2NctWrVfwYkEBYWxojMZ6SDAmT7QGx0K1EcRBsFAADeG/3M/HteAAAAAElFTkSuQmCC); 
    }

    .background:after {
        content:" ";
        background-color:inherit;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%; 
    }

    </style>


1

インラインオーバーレイ画像としてSVGを使用するもう1つ(注:#svg-code内で使用する場合は、それをurlencodeする必要があります!):

background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"><path fill="rgba(255, 255, 255, 0.4)" d="M0 0h1v1H0z"/></svg>')
                no-repeat center center/cover, 
            url('overlayed-image.jpg') no-repeat center center/cover;

0

私は単に使用背景画像の対象背景のdivにCSSプロパティを。
background-imageはグラデーションカラー関数のみを受け入れることに注意してください。
したがって、線形グラデーションを使用して同じ目的のオーバーレイカラーを2回追加しました(最後のRGBA値を使用して、色の不透明度を制御します)。

また、次の2つの有用なリソースが見つかりました。

  1. 背景画像の上にテキスト(または他のコンテンツを含むdiv)を追加します。ヒーロー画像
  2. 上のdivをぼかさずに、背景画像のみぼかし:ぼやけた背景画像

HTML

<div class="header_div">
</div>

<div class="header_text">
  <h1>Header Text</h1>
</div>

CSS

.header_div {
  position: relative;
  text-align: cover;
  min-height: 90vh;
  margin-top: 5vh;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  width: 100vw;
  background-image: linear-gradient(rgba(38, 32, 96, 0.2), rgba(38, 32, 96, 0.4)), url("images\\header img2.jpg");
  filter: blur(2px);
}

.header_text {
  position: absolute;
  top: 50%;
  right: 50%;
  transform: translate(50%, -50%);
}

0

オーバーレイの色に不透明度を追加することもできます。

する代わりに

background: url('../img/bg/diagonalnoise.png');
background-color: rgba(248, 247, 216, 0.7);

できるよ:

background: url('../img/bg/diagonalnoise.png');

次に、不透明色の新しいスタイルを作成します。

.colorStyle{
    background-color: rgba(248, 247, 216, 0.7);
    opacity: 0.8;
}

不透明度を1未満の任意の数に変更します。次に、このカラースタイルを画像と同じサイズにします。うまくいくはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.