Arka plan görüntüsü üzerinde yarı saydam renk katmanı?


213

Bir DIV var ve arka plan olarak bir desen koymak istiyorum. Bu desen gridir. Bu yüzden biraz daha güzel yapmak için, üzerine açık şeffaf bir renk "katmanı" koymak istiyorum. Aşağıda denedim ama işe yaramadı. Renkli katmanı arka plan resminin üzerine koymanın bir yolu var mı?

İşte benim CSS:

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

Yanıtlar:


217

İşte burada:

.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%;
}

Bunun için HTML:

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

İçinde .backgroundbaşka bir öğe yoksa, elbette sınıfa bir genişlik ve yükseklik tanımlamanız gerekir


10
göreceli ve mutlak konumlandırma için kesin bir neden yoktur.
Sven Bieder

2
Ah evet, elbette, modal pop-up'a girdim, nedenini bilmiyorum. Cevabınız elbette daha temiz ve daha kolay.
Johannes Klauß

@ JohannesKlauß cevabı nasıl daha temiz ve daha kolay? en azından benim durumum için çalışmıyor.
Danny22

2
Bence bu daha temiz. İçerik
Jack

1
Mükemmel çözüm!
Roy Shoa

300

Bunun gerçekten eski bir konu olduğunu biliyorum, ancak Google'da en üstte görünüyor, bu yüzden başka bir seçenek var.

Bu, saf CSS'dir ve fazladan HTML gerektirmez.

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

Kutu-gölge özelliği için şaşırtıcı sayıda kullanım vardır.


3
Çok hoş! Bu performans açısından iyi bir fikir mi? Box-shadow performansına bakmadım
Miguel Stevens

18
Güzel bir hack ama büyük bir performans katili. Bu, her mobil cihazı yavaşlatır. Kutu gölgesi mobil cihazlarda performans sorunlarına neden olur. Özellikle de gidilecek başka yollar varsa bundan kaçınmak daha iyidir.
Hexodus

4
Sen bir dahisin efendim!
Mika

7
Sadece birkaç yıl sonra bir güncelleme: Şu anda kotulas.com'un her yerinde bu yöntemi kullanıyorum ve fark ettiğim önemli bir yavaşlama yok. Yüzlerce öğe üzerinde kullanıyorsanız sorun olabilir, ancak 150'den fazla resim içeren bir sayfada bile, bu benim için sorun değil. (Ve bu bir iş bilgisayarında.) Doğal olarak, bunun sizin için doğru olduğundan emin olmak için önceden test etmek isteyeceksiniz. Ve eski tarayıcı uyumluluğuna gelince, geri dönüş, kullanıcının bir fareyle üzerine gelme efekti görmemesi (başka bir sorun olmadan), bununla iyiyim.
BevansDesign

8
Ben şahsen bu gibi kullanmak: box-shadow: inset 0 0 0 100vmax rgba(0, 0, 0, .2).
Nörotransmitter

135

CSS-Tricks'ten ... bunu z-endeksleme ve sahte öğeler eklemeden yapmanın tek adımlı bir yolu var - bence CSS3 desteğine ihtiyacınız olduğu anlamına gelen doğrusal degrade gerekiyor

.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);
}

Bu harika çalıştı, degradeleri canlandıramazsınız, ancak bir rengi atmak istiyorsanız, bunun herhangi bir yöntemle mümkün olduğunu düşünmeyin.
sricks

1
Ben background-size:cover;ve background-position:center center;bu unsur üzerinde ayarlayın. Bu etkiyi iptal ediyor gibi görünüyor.
Solace

Arka plan boyutu ile harika çalışma: cover; sonra. En azından krom üzerinde.
davidbonachera

Arka plan desenlerini ve resimleri renklendirmenin kesinlikle en uygun yolu, ancak Chrome ve diğerleriyle kontrol etmeye dikkat edin, özellikle gövde etiketine uygulanırsa, krom bir ton gecikme ile kayar. FF iyi idare eder.
Hastig Zusammenstellen

4
Tom referansını alacak kadar yaşlı mıyım?
Abram


26

Daha sonra bg görüntüsüyle bir sarma öğesine ve içinde bg rengiyle içerik öğesine ihtiyacınız vardır:

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

ve 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

Bunu dene. Benim için çalışıyor.

.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
Bu, ek HTML öğeleri gerektirmeyen gerçekten harika bir cevaptır. Teşekkürler!
patr1ck

16

Bunu, görüntü renk profillerini kontrol edemediğinizde dinamik bindirme metninin okunaklı olmasını kolaylaştırmak için görüntülere renk tonlarının yanı sıra degradeleri uygulamanın bir yolu olarak kullandım. Z-endeksi konusunda endişelenmenize gerek yok.

HTML

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

SUKDÖ'nün

.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);
  }

Umarım yardımcı olur


Bu çalışıyor, ancak ikinci "left: 0;" "alt: 0;"
Matthew Hudson

1
Bu gereksiz unsurların yaratılmasını önlediğinden kabul edilen cevap olmalıdır. .Background resminizin diven azından bir pozisyonu olduğundan emin olun : relative
mjsarfatti

6

Benim cevap bakınız https://stackoverflow.com/a/18471979/193494 olası çözümleri kapsamlı bir bakış için:

  1. doğrusal bir gradyanla birden fazla arka plan kullanma,
  2. oluşturulan bir PNG ile birden fazla arka plan veya
  3. an: ikincil bir arka plan katmanı olarak işlev görmesi için sözde öğeden sonra.

4
Lütfen bağlantıları yanıt olarak göndermeyin. İlgili kodu buraya yazın, ancak ek olarak kopyaladığınız kaynağa bağlantı verin.
Blazemonger

4

Neden bu kadar karmaşık? Deseni şeffaf ve arka plan rengini sağlam hale getirmenin daha kolay olması dışında çözümünüz neredeyse haklıydı . PNG asetat içerebilir. Bu nedenle, katmanı% 70'e ayarlayıp görüntünüzü kaydederek deseni şeffaf hale getirmek için photoshop'u kullanın. O zaman sadece bir seçiciye ihtiyacınız var. Çapraz tarayıcı çalışır.

CSS:

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

HTML:

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

Bu temel. İ açık burada bir kullanım, örneğin, aşağıdaki backgroundiçin background-imageancak her iki özellikler aynı şekilde çalışır.

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> 

LÜTFEN BİR DAKİKA BEKLEYİNİZ! HARİCİ KALIPLARI YÜKLEMEK BAZI ZAMAN GEREKİR.

Bu web sitesi oldukça yavaş görünüyor ...


Örneğin arka plan rengini uygulayabilir misiniz :hoverve bu arka plan görüntüsünün üstüne bindirilir mi?
Efendim

birkaç satır kod eklemek yerine Photoshop'u başlatmak ve bunu yapmak daha uzun sürer.
nihiser

Bunu denedim ama şeffaf png dosya boyutunda oldukça büyük (~ 500kb) bulundu, bu da bu yaklaşımın bir dezavantajı olabilir
madz

@madz Büyük bir dosyayla sonuçlanmaması gereken bir desen yapmaktan bahsettim. 5kb kadar küçük bir 110x110 piksel görüntü kullanarak bir örnek ekledim. Gerçekten daha büyük bir resme ihtiyacınız varsa sıkıştırmak için tinypng.com'u kullanmayı deneyin .
Hexodus

2

Burada , örneğin base64'de bile oluşturabileceğiniz yarı saydam bir piksel kullanabilirsiniz64 İşte% 50 beyaza sahip bir örnek:

background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=),
url(../img/leftpanel/intro1.png);
background-size: cover, cover;
  • yüklemeden

  • ekstra html olmadan

  • Yüklemenin kutu-gölge veya doğrusal gradyandan daha hızlı olması gerektiğini düşünüyorum


2

İşte sadece css ile daha basit bir hile.

<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

Satır içi yer paylaşımı görüntüsü olarak SVG'ye sahip başka bir tane (not: #svg kodunun içinde kullanıyorsanız bunu urlencode etmeniz gerekir!):

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

Ben sadece hedef arka plan div arka plan görüntü css özelliğini kullandım .
Not arka plan resmi yalnızca degrade renk işlevlerini kabul eder.
Bu yüzden aynı istenen kaplama rengini iki kez ekleyerek doğrusal gradyanı kullandım (renk opaklığını kontrol etmek için son rgba değerini kullanın).

Ayrıca, bu iki yararlı kaynağı şunlar için buldu:

  1. Arka plan resminin üzerine metin ekleyin (veya başka bir içerikle div): Hero Image
  2. Div üstünü bulanıklaştırmadan yalnızca arka plan görüntüsünü bulanıklaştırın: Bulanık Arka Plan Görüntüsü

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

Ayrıca kaplama renginize opaklık da ekleyebilirsiniz.

Yapmak yerine

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

Yapabilirsin:

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

Ardından opaklık rengi için yeni bir stil oluşturun:

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

Opaklığı aşağıda istediğiniz sayıya çevirin. 1. Bu renk stilini görüntünüzle aynı boyuta getirin. İşe yaramalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.