Czy można ustawić krycie obrazu tła bez wpływu na krycie elementów potomnych?
Przykład
Wszystkie linki w stopce wymagają niestandardowego punktora (obrazu tła), a krycie niestandardowego punktu powinno wynosić 50%.
HTML
<div id="footer">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
</ul>
</div>
CSS
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
}
Co próbowałem
Próbowałem ustawić krycie elementów listy na 50%, ale potem krycie tekstu linku również wynosi 50% - i wydaje się, że nie ma sposobu na zresetowanie krycia elementów potomnych:
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
/* will also set the opacity of the link text */
opacity: 0.5;
}
Próbowałem także użyć rgba, ale nie ma to żadnego wpływu na obraz tła:
#footer ul li {
/* rgba doesn't apply to the background image */
background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}
Odpowiedzi:
Możesz używać CSS
linear-gradient()
zrgba()
.źródło
Przenieś obraz do edytora obrazów, zmniejsz krycie, zapisz go jako plik .png i użyj go zamiast tego.
źródło
Będzie to działać z każdą przeglądarką
Jeśli nie chcesz, aby przezroczystość wpływała na cały kontener i jego dzieci, sprawdź to obejście. Musisz mieć dziecko o absolutnej pozycji z rodzicem o względnej pozycji.
Sprawdź wersję demo na http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/
źródło
position:relative;
i img naposition:absolute;
NIE pozwala mi przesłonić odziedziczonego krycia na img, i nie mogę użyć bezwzględnego pozycjonowania dla samych <li> (to bałagan ;-). W Javascript próbowałemimgs[i].style.opacity = '1';
, ale to również nie działa, aby zastąpić odziedziczone nieprzezroczystość. Jeśli dobrze rozumiem, nie mogę również używać rgba, ponieważ muszę wpływać na same zdjęcia, a nie tylko na kolor tła. Czy ktoś ma dla mnie zalecenie?Jeśli używasz obrazu jako punktora, możesz rozważyć pseudoelement: before.
źródło
*zoom: expression( … );
(patrz : po i: przed hakowaniem pseudoelementów css dla IE 7 ), ale IE7 w końcu staje się pasywny.Możesz umieścić obraz w div: after lub div: before i ustawić krycie na tym „wirtualnym div”
znaleziono tutaj http://css-tricks.com/snippets/css/transparent-background-images/
źródło
Hack z kryciem 0,99 (mniej niż 1) tworzy kontekst indeksu Z, więc nie możesz się martwić o globalne wartości indeksu Z. (Spróbuj go usunąć i zobacz, co się stanie w następnej wersji demonstracyjnej, w której opakowanie nadrzędne ma dodatni indeks Z).
Jeśli twój element ma już indeks Z, to nie potrzebujesz tego hacka.
Demo tej techniki .
źródło
Niestety w chwili pisania tej odpowiedzi nie ma bezpośredniego sposobu, aby to zrobić. Musisz:
źródło
Inną opcją jest podejście CSS Tricks polegające na wstawieniu pseudoelementu dokładnego rozmiaru oryginalnego elementu tuż za nim, aby uzyskać fałszywy efekt nieprzezroczystego tła, którego szukamy. Czasami trzeba ustawić wysokość pseudoelementu.
źródło
Właściwość „filter” wymaga liczby całkowitej dla procentowego krycia zamiast podwójnego, aby działała w IE7 / 8.
PS: Publikuję to jako odpowiedź, ponieważ SO potrzebuje co najmniej 6 zmienionych znaków do edycji.
źródło
Aby naprawdę dostroić rzeczy, zalecam umieszczenie odpowiednich opcji w opakowaniach kierowanych na przeglądarkę. To była jedyna rzecz, która działała dla mnie, gdy nie mogłem zmusić IE7 i IE8 do „ładnej zabawy z innymi” (ponieważ obecnie pracuję dla firmy programistycznej, która nadal je wspiera).
Mogę mieć zwolnienia w powyższym kodzie - jeśli ktoś chce go dalej posprzątać, nie krępuj się!
źródło
-moz-border-radius
w Firefox 13 i po prostu szukaborder-radius
teraz standardowej właściwości). IE7 i IE8 to inna historia, ale to tylko IE :-p-khtml-opacity
ponieważ nie rozumie zapytania medialnego, co czyni go bezużytecznym 2) IE jest bardziej stabilny niż myślisz; nie zostanie „wysadzony” tylko dlatego, że dodajesz przedrostki inne niż IE do reguły odnoszącej się do IE. Problem, z którym się zmierzyłeś, musiał pochodzić z innych źródeł.Jeśli musisz ustawić krycie tylko na punktor, dlaczego nie ustawisz kanału alfa bezpośrednio na obrazie? Nawiasem mówiąc, nie sądzę, że istnieje sposób, aby ustawić krycie obrazu tła za pomocą css bez zmiany krycia całego elementu (i jego dzieci również).
źródło
Aby dodać do powyższego ... możesz użyć kanału alfa z nowymi atrybutami kolorów, np. rgba (0,0,0,0) ok, więc jest czarny, ale z zerowym kryciem, więc jako rodzic nie wpłynie na dziecko. Działa to tylko w Chrome, FF, Safari i .... ja cienki O.
przekonwertować kolory heksadecymalne na RGBA
źródło
background-image
zgodnie z żądaniem PO.Znalazłem całkiem niezły i prosty samouczek na temat tego problemu. Myślę, że działa świetnie (i chociaż obsługuje IE, po prostu mówię moim klientom, aby używali innych przeglądarek):
Przezroczystość tła CSS bez wpływu na elementy potomne, poprzez RGBa i filtry
Stamtąd możesz dodać obsługę gradientów itp.
źródło
Możesz wypróbować ten kod. Myślę, że to zadziała. Możesz odwiedzić wersję demonstracyjną
źródło