Jak połączyć obrazek tła i gradient CSS3 na tym samym elemencie?

Jak użyć gradientów CSS3 dla mojego background-color, a następnie zastosować background-image, Aby zastosować jakąś jasną przezroczystą teksturę?

Author: John, 2010-03-24

17 answers

Wiele tła!

body {
  background: #eb01a5;
  background-image: url("IMAGE_URL"); /* fallback */
  background-image: url("IMAGE_URL"), linear-gradient(#eb01a5, #d13531); /* W3C */
}

Te 2 linie są alternatywą dla każdej przeglądarki, która nie robi gradientów. Zobacz Uwagi do układania obrazów tylko IE

  • Linia 1 ustawia płaski kolor tła.
  • Linia 2 ustawia rezerwowy obraz tła.

Ostatnia linia ustawia obraz tła i gradient dla przeglądarek, które mogą je obsługiwać.

  • Linia 3 jest przeznaczona dla wszystkich stosunkowo nowoczesnych przeglądarek.

Prawie wszystkie obecne przeglądarki obsługują wiele obrazów tła i tła css. Zobacz http://caniuse.com/#feat=css-gradients do obsługi przeglądarki. Aby uzyskać dobry post na temat tego, dlaczego nie potrzebujesz wielu prefiksów przeglądarki, zobacz http://codepen.io/thebabydino/full/pjxVWp/

Stos Warstw

Należy zauważyć, że pierwszy zdefiniowany obraz będzie znajdował się najwyżej na stosie. W takim przypadku obraz znajduje się na szczycie gradientu.

Aby uzyskać więcej informacji na temat warstwowanie tła zobacz http://www.w3.org/TR/css3-background/#layering .

Układanie obrazów tylko (bez gradientów w deklaracji) dla IE

IE9 i up mogą układać obrazy w taki sam sposób. Możesz użyć tego do stworzenia gradientowego obrazu dla ie9, choć osobiście bym tego nie zrobił. należy jednak zauważyć, że przy użyciu tylko obrazów, ie warunkowego elementu HTML wraz z kodem zapasowym:

.lte9 #target{ background-image: url("IMAGE_URL"); }

Położenie tła, rozmiar itp.

Inne właściwości, które mają zastosowanie do pojedynczego obrazu, mogą być również rozdzielane przecinkami. Jeśli podano tylko 1 wartość, zostanie ona zastosowana do wszystkich ułożonych obrazów łącznie z gradientem. background-size: 40px; ograniczy zarówno obraz, jak i gradient do wysokości i szerokości 40px. Jednak użycie background-size: 40px, cover; sprawi, że obraz 40px i gradient pokryje element. Aby zastosować ustawienie Tylko do jednego obrazu, Ustaw domyślne dla drugiego: background-position: 50%, 0 0; lub dla przeglądarek, które go obsługują użyj initial: background-position: 50%, initial;

Można również użyć skrótu tła, jednak usuwa to kolor zapasowy i obraz.

body{
    background: url("IMAGE_URL") no-repeat left top, linear-gradient(#eb01a5, #d13531);
}

To samo dotyczy background-position, background-repeat, itp.

 1347
Author: Gidgidonihah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-01 00:31:32

Jeśli chcesz również ustawić Pozycja tła dla Twojego obrazu, niż możesz użyć tego:

background-color: #444; // fallback
background: url('PATH-TO-IMG') center center no-repeat; // fallback

background: url('PATH-TO-IMG') center center no-repeat, -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
background: url('PATH-TO-IMG') center center no-repeat, -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
background: url('PATH-TO-IMG') center center no-repeat, -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
background: url('PATH-TO-IMG') center center no-repeat, -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
background: url('PATH-TO-IMG') center center no-repeat, linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10

Lub możesz również utworzyć mniej mixin (styl bootstrap):

#gradient {
    .vertical-with-image(@startColor: #555, @endColor: #333, @image) {
        background-color: mix(@startColor, @endColor, 60%); // fallback
        background-image: @image; // fallback

        background: @image, -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
        background: @image, -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
        background: @image, -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
        background: @image, -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
        background: @image, linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
    }
}
 77
Author: Tamás Pap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 19:45:33

Należy sobie uświadomić, że pierwszy zdefiniowany obraz tła znajduje się najwyżej na stosie. Ostatni zdefiniowany obraz będzie najniższy. Oznacza to, że aby mieć gradient tła za obrazem, potrzebujesz:

  body {
    background-image: url("http://www.skrenta.com/images/stackoverflow.jpg"), linear-gradient(red, yellow);
    background-image: url("http://www.skrenta.com/images/stackoverflow.jpg"), -webkit-gradient(linear, left top, left bottom, from(red), to(yellow));
    background-image: url("http://www.skrenta.com/images/stackoverflow.jpg"), -moz-linear-gradient(top, red, yellow);
  }

Można również zdefiniować pozycje tła i rozmiar tła dla obrazów. Stworzyłem post na blogu o kilku ciekawych rzeczach, które można zrobić z CSS3 gradients

 40
Author: Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 17:08:15

Możesz po prostu wpisać:

background: linear-gradient(
    to bottom,
    rgba(0,0,0, 0),
    rgba(0,0,0, 100)
  ),url(../images/image.jpg);
 17
Author: Nejmeddine Jammeli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-21 18:35:42

Miałem implementację, w której musiałem posunąć tę technikę o krok dalej i chciałem zarysować moją pracę. Poniższy kod robi to samo, ale używa SASS, Bourbon i Sprite obrazu.

    @mixin sprite($position){
        @include background(url('image.png') no-repeat ($position), linear-gradient(#color1, #color2));
    }
    a.button-1{
        @include sprite(0 0);
    }
    a.button-2{
       @include sprite (0 -20px);  
    }
    a.button-2{
       @include sprite (0 -40px);  
    }
SASS i Bourbon dbają o Kod między przeglądarkami, a teraz muszę tylko zadeklarować pozycję sprite ' a na przycisk. Łatwo jest rozszerzyć tę zasadę dla przycisków aktywnych i stanów najazdu.
 13
Author: coreballs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-29 21:31:34

Moje rozwiązanie:

background-image: url(IMAGE_URL); /* fallback */

background-image: linear-gradient(to bottom, rgba(0,0,0,0.7) 0%,rgba(0,0,0,0.7) 100%), url(IMAGE_URL);
 13
Author: Shin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-15 12:39:37

Zawsze używam poniższego kodu, aby to działało. Jest kilka uwag:

  1. Jeśli umieścisz adres URL obrazka przed gradientem, ten obrazek zostanie wyświetlony powyżej gradientu zgodnie z oczekiwaniami.

.background-gradient {
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, -moz-linear-gradient(135deg, #6ec575 0, #3b8686 100%);
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, -webkit-gradient(135deg, #6ec575 0, #3b8686 100%);
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, -webkit-linear-gradient(135deg, #6ec575 0, #3b8686 100%);
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, -o-linear-gradient(135deg, #6ec575 0, #3b8686 100%);
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, -ms-linear-gradient(135deg, #6ec575 0, #3b8686 100%);
  background: url('http://trungk18.github.io/img/trungk18.png') no-repeat, linear-gradient(135deg, #6ec575 0, #3b8686 100%);
  height: 500px;
  width: 500px;
}
<div class="background-gradient"></div>
  1. Jeśli umieścisz gradient przed adresem URL obrazka, ten obrazek zostanie wyświetlony Pod gradient.

.background-gradient {
  background: -moz-linear-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  background: -webkit-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  background: -webkit-linear-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  background: -o-linear-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  background: -ms-linear-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  background: linear-gradient(135deg, #6ec575 0, #3b8686 100%), url('http://trungk18.github.io/img/trungk18.png') no-repeat;
  width: 500px;
  height: 500px;
}
<div class="background-gradient"></div>

Ta technika jest taka sama, jak mamy wiele obrazów tła, jak opisujemy tutaj

 9
Author: trungk18,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 07:21:05

I made an example with enjoycss

Tutaj wpisz opis obrazka

Http://enjoycss.com/5q#background

W edytorze enjoycss możesz stworzyć dowolną ilość tła, linear, repeating-linear, radial, repeating-radial,images,colors

Dostosowujesz swoje tła za pomocą GUI i automatycznie generuje kod

Kod jest tutaj http://enjoycss.com/5q/code/0/background#background

 5
Author: Nedudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-12 15:24:43

Próbowałem zrobić to samo. Podczas gdy kolor tła i obraz tła istnieją na oddzielnych warstwach wewnątrz obiektu - co oznacza, że mogą współistnieć - gradienty CSS wydają się współdzielić warstwę tło-obraz.

Z tego co wiem, border-image wydaje się mieć szersze wsparcie niż wiele tła, więc może to jest alternatywne podejście.

Http://articles.sitepoint.com/article/css3-border-images

Aktualizacja: trochę więcej badań. Seems Petra Gregorova coś tu działa -- > http://petragregorova.com/demos/css-gradient-and-bg-image-final.html

 2
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-06 04:37:29

Oto MIXIN, który stworzyłem, aby obsługiwać wszystko, czego ludzie chcieliby użyć:

.background-gradient-and-image (@fallback, @imgUrl, @background-position-x, @background-position-y, @startColor, @endColor) {
    background: @fallback;
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat; /* fallback */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat, -webkit-gradient(linear, left top, left bottom, from(@startColor) @background-position-x @background-position-y no-repeat, to(@endColor)); /* Saf4+, Chrome */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat, -webkit-linear-gradient(top, @startColor, @endColor); /* Chrome 10+, Saf5.1+ */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat,    -moz-linear-gradient(top, @startColor, @endColor); /* FF3.6+ */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat,     -ms-linear-gradient(top, @startColor, @endColor); /* IE10 */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat,      -o-linear-gradient(top, @startColor, @endColor); /* Opera 11.10+ */
    background: url(@imgUrl) @background-position-x @background-position-y no-repeat,         linear-gradient(top, @startColor, @endColor); /* W3C */
}

To może być użyte TAK:

.background-gradient-and-image (#f3f3f3, "../images/backgrounds/community-background.jpg", left, top, #fafcfd, #f2f2f2);
Mam nadzieję, że to wam pomoże. Podziękowania dla @Gidgidonihah za znalezienie początkowego rozwiązania.
 2
Author: lukehillonline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 10:33:28

Jeśli masz dziwne błędy podczas pobierania obrazów tła użyj W3C Link checker: https://validator.w3.org/checklink

Oto nowoczesne mixiny, których używam (kredyty: PSA: nie używaj generatorów gradientu):

.buttonAkc
{
    .gradientBackground(@imageName: 'accept.png');
    background-repeat: no-repeat !important;
    background-position: center right, top left !important;
}

.buttonAkc:hover
{
    .gradientBackgroundHover('accept.png');
}

.gradientBackground(@startColor: #fdfdfd, @endColor: #d9d9db, @imageName)
{
    background-color: mix(@startColor, @endColor, 60%); // fallback
    background-image: url("@{img-folder}/@{imageName}?v=@{version}"); // fallback
    background: url("@{img-folder}/@{imageName}?v=@{version}") no-repeat scroll right center, -webkit-linear-gradient(top, @startColor 0%, @endColor 100%) no-repeat scroll left top; // Chrome 10-25, Safari 5.1-6
    background: url("@{img-folder}/@{imageName}?v=@{version}") no-repeat scroll right center, linear-gradient(to bottom, @startColor 0%, @endColor 100%) no-repeat scroll left top;
}

.gradientBackgroundHover(@imageName)
{
    .gradientBackground(#fdfdfd, #b5b6b9, @imageName);
}
 2
Author: Mateusz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 17:18:28

Jako pewny sposób, można po prostu zrobić obraz tła, który jest powiedzmy 500x5 pikseli, w css Użyj:

background-img:url(bg.jpg) fixed repeat-x;
background:#<xxxxxx>;

Gdzie xxxxxx odpowiada kolorowi odpowiadającemu końcowemu kolorowi gradientu.

Można również naprawić to na dole ekranu i dopasować go do początkowego koloru gradientu.

 0
Author: Epicus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 04:46:49

Jeśli musisz uzyskać gradienty i obrazy tła współpracujące ze sobą w IE 9( HTML 5 & HTML 4.01 Strict), dodaj następującą deklarację atrybutów do swojej klasy css i powinno to załatwić sprawę:

filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#000000', endColorstr='#ff00ff'), progid:DXImageTransform.Microsoft.AlphaImageLoader(src='[IMAGE_URL]', sizingMethod='crop');

Zauważ, że używasz atrybutu filter i że istnieją dwie instancje progid:[val] oddzielone przecinkiem, zanim zamkniesz wartość atrybutu średnikiem. Oto skrzypce . Zauważ również, że gdy spojrzysz na skrzypce gradient wykracza poza zaokrąglone rogi. I nie ma poprawki dla tego innego, nie używając zaokrąglonych narożników. Zauważ również, że podczas używania ścieżki względnej w atrybucie src [IMAGE_URL], ścieżka jest względna do strony dokumentu, a nie do pliku css (Zobacz source).

Ten artykuł ( http://coding.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer / ) jest tym, co doprowadziło mnie do tego rozwiązania. Jest to bardzo pomocne dla CSS3 specyficznych dla IE.

 0
Author: KSev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 21:48:20

Chciałem zrobić przycisk span z obrazem tła, kombinacją gradientu tła.

Http://enjoycss.com / pomógł mi wykonać moje zadanie. Tylko muszę usunąć jakiś automatycznie wygenerowany dodatkowy CSS. Ale to naprawdę fajna strona, Zbuduj swoją pracę.

#nav a.link-style span {
    background: url("../images/order-now-mobile.png"), -webkit-linear-gradient(0deg, rgba(190,20,27,1) 0, rgba(224,97,102,1) 51%, rgba(226,0,0,1) 100%);
    background: url("../images/order-now-mobile.png"), -moz-linear-gradient(90deg, rgba(190,20,27,1) 0, rgba(224,97,102,1) 51%, rgba(226,0,0,1) 100%);
    background: url("../images/order-now-mobile.png"), linear-gradient(90deg, rgba(170,31,0,1) 0, rgba(214,18,26,1) 51%, rgba(170,31,0,1) 100%);
    background-repeat: no-repeat;
    background-position: 50% 50%;
    border-radius: 8px;
    border: 3px solid #b30a11;
}
 0
Author: Chatura Dinesh Halwatura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-04 15:35:33

W ten sposób rozwiązuję problem. Definiuję Gradient w HTML i obraz tła w ciele

html {
  background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0.31, rgb(227, 227, 227)), color-stop(0.66, rgb(199, 199, 199)), color-stop(0.83, rgb(184, 184, 184)));
  background-image: -moz-linear-gradient(left bottom, rgb(227, 227, 227) 31%, rgb(199, 199, 199) 66%, rgb(184, 184, 184) 83%);
  height: 100%
}
body {
  background: url("http://www.skrenta.com/images/stackoverflow.jpg");
  height: 100%
}
 0
Author: vander2000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 18:34:17

Dla mojego responsywnego projektu, Moja rozwijana strzałka w dół po prawej stronie pudełka (Akordeon pionowy), przyjęta procent jako pozycja. Początkowo strzałka w dół brzmiała " position: absolute; right: 13px;". Przy 97% pozycjonowaniu działało to następująco:

> background: #ffffff;
> background-image: url(PATH-TO-arrow_down.png); /*fall back - IE */
> background-position: 97% center; /*fall back - IE */
> background-repeat: no-repeat; /*fall back - IE */
> background-image: url(PATH-TO-arrow_down.png)  no-repeat  97%  center;  
> background: url(PATH-TO-arrow_down.png) no-repeat 97% center,  -moz-linear-gradient(top, #ffffff 1%, #eaeaea 100%); 
> background: url(PATH-TO-arrow_down.png) no-repeat 97% center,  -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ffffff), color-stop(100%,#eaeaea)); 
> background: url(PATH-TO-arrow_down.png) no-repeat 97% center,  -webkit-linear-gradient(top, #ffffff 1%,#eaeaea 100%); 
> background: url(PATH-TO-arrow_down.png) no-repeat 97% center,  -o-linear-gradient(top, #ffffff 1%,#eaeaea 100%);<br />
> filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eaeaea',GradientType=0 ); 

P. S. Sorry, Nie wiem jak poradzić sobie z filtrami.

 0
Author: mugé,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 12:54:28

Jeśli chcesz, aby obrazy były całkowicie połączone ze sobą, gdzie nie wygląda na to, że elementy ładują się oddzielnie z powodu oddzielnych żądań HTTP, użyj tej techniki. Tutaj ładujemy dwie rzeczy na ten sam element, który ładuje się jednocześnie...Po prostu upewnij się, że najpierw przekonwertujesz wstępnie renderowany 32-bitowy przezroczysty obraz/teksturę png na ciąg base64 i użyj go w wywołaniu CSS background-image. Użyłem tej techniki, aby połączyć teksturę wyglądającą na wafel ze standardową przezroczystością rgba / linear gradient css rule. Działa lepiej niż nakładanie wielu grafik i marnowanie żądań HTTP, co jest złe dla urządzeń mobilnych.

 div.imgDiv   {
      background: linear-gradient(to right bottom, white, rgba(255,255,255,0.95), rgba(255,255,255,0.95), rgba(255,255,255,0.9), rgba(255,255,255,0.9), rgba(255,255,255,0.85), rgba(255,255,255,0.8) );
      background-image: url("data:image/png;base64,INSERTIMAGEBLOBHERE");
 }
 0
Author: Paul Latour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 06:40:58