Czy istnieje prosty sposób CSS na uczynienie granicy elementu półprzezroczystym za pomocą czegoś takiego?
border-opacity: 0.7;
Jeśli nie, to czy ktoś ma pomysł, jak to zrobić bez użycia obrazów?
Niestety ten opacity
element sprawia, że cały element (w tym dowolny tekst) jest półprzezroczysty. Najlepszym sposobem na uczynienie obramowania półprzezroczystym jest użycie formatu kolorów rgba. Na przykład dałoby to czerwoną ramkę z 50% kryciem:
div {
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Problem z tym podejściem polega na tym, że niektóre przeglądarki nie rozumieją rgba
formatu i nie wyświetlają żadnych ramek, jeśli jest to cała deklaracja. Rozwiązaniem jest dostarczenie dwóch deklaracji granicznych. Pierwszy z fałszywym kryciem, a drugi z faktycznym. Jeśli przeglądarka jest w stanie, użyje drugiego, jeśli nie, użyje pierwszego.
div {
border: 1px solid rgb(127, 0, 0);
border: 1px solid rgba(255, 0, 0, .5);
-webkit-background-clip: padding-box; /* for Safari */
background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}
Pierwsza deklaracja na granicy będzie miała kolor równoważny 50% nieprzezroczystej czerwonej ramce na białym tle (chociaż grafika pod ramką nie będzie się przeciekać).
AKTUALIZACJA: Dodałem „klip w tle: padding-box;” na tę odpowiedź (zgodnie z sugestią SooDesuNe w komentarzach), aby zapewnić, że ramka pozostanie przezroczysta, nawet jeśli zastosowany zostanie jednolity kolor tła.
border-radius
, wtedy zaokrąglają rogi. Jeśli nie, to nie. Treść jest nadal dostępna, nadal wygląda dobrze, po prostu wygląda lepiej, jeśli używają sprawnej przeglądarki. Nigdy nie miałem jednego klienta, który narzekałby na to w ciągu ostatnich 1,5 roku działania w ten sposób na każdym projekcie.background-clip:padding-box;
.To proste, użyj jednolitego cienia z przesunięciem 0:
Ponadto, jeśli ustawisz promień obramowania dla elementu, daje to dość zaokrąglone granice
jsFiddle Demo
źródło
box-shadow
nie ma rozmiaru i może zepsuć układ, powodując nierówne marginesy! jsfiddle.net/bj81hew7/2Jak wspomnieli inni: CSS-3 mówi, że możesz użyć
rgba(...)
składni, aby określić kolor obramowania z wartością krycia (alfa).Oto szybki przykład, jeśli chcesz to sprawdzić.
Działa w Safari i Chrome (prawdopodobnie działa we wszystkich przeglądarkach internetowych).
Działa w przeglądarce Firefox
Wątpię, czy w ogóle działa w IE, ale podejrzewam, że jest jakiś filtr lub zachowanie, które sprawi, że będzie działać.
Jest też ten post z przepełnieniem stosu , który sugeruje kilka innych problemów - mianowicie, że obramowanie wyświetla na wierzchu dowolnego określonego przez ciebie koloru tła (lub obrazu tła); ograniczając w ten sposób przydatność granicy alfa w wielu przypadkach.
źródło
background-clip: padding-box;
(i dopóki nie będzie obsługiwany, możesz użyć rozszerzeń dostawców -webkit i -moz).Jeśli sprawdzisz kodowanie CSS za pomocą walidatora W3C, zobaczysz, czy Twój kod CSS jest akceptowalny, nawet jeśli działał w głównych przeglądarkach.
Tworzenie przezroczystej ramki za pomocą CSS, jak napisano powyżej,
nie jest akceptowany przez standardy W3C, nawet dla CSS3. Użyłem walidatora bezpośredniego wprowadzania z następującym kodem CSS,
Rezultaty były
Niestety, wartość alfa (litera „a” na końcu „rgb”) nie jest jeszcze akceptowana przez W3C jako część wartości kolorów obramowania. Zastanawiam się, dlaczego nie jest znormalizowany, ponieważ działa we wszystkich przeglądarkach. Jedynym problemem jest to, czy chcesz trzymać się standardów W3C, czy odejść od tego, aby stworzyć coś w CSS.
Aby korzystać z walidatora CSS online W3C / wprowadzania bezpośredniego .
Zawsze dobrym pomysłem jest użycie sprawdzania poprawności do sprawdzenia pracy, naprawdę pomaga znaleźć małe lub nawet duże błędy w kodowaniu, gdy spojrzysz sobie w oczy po godzinach pracy nad kodowaniem.
źródło
* O ile wiem, nie ma co normalnie robię w takich okolicznościach, to utworzyć blok o większym rozmiarze ((rozmiar * 2) + rozmiar oryginału) i uczynić go przezroczystym za pomocą
Oto przykład
Aktualizacja:
Ta odpowiedź jest nieaktualna, ponieważ w końcu to pytanie ma ponad 8 lat. Obecnie wszystkie aktualne przeglądarki obsługują rgba, shadows'y i tak dalej. Ale to jest dobry przykład, jak było ponad 8 lat temu.
źródło
rgba(...)
kolory obramowania. możesz to wypróbować tutaj .Jako alternatywne rozwiązanie, które może pracować w niektórych przypadkach: zmiana
border-style
dodotted
.Posiadanie naprzemiennych grup pikseli między kolorem pierwszego planu i kolorem tła to nie to samo, co ciągła linia częściowo przezroczystych pikseli. Z drugiej strony wymaga to znacznie mniej CSS i jest o wiele bardziej kompatybilny w każdej przeglądarce bez żadnych dyrektyw specyficznych dla przeglądarki.
źródło
Inne odpowiedzi dotyczą technicznego aspektu problemu z kryciem granic, podczas gdy chciałbym przedstawić hack (tylko CSS i HTML). Zasadniczo utwórz div pojemnika, mający div granicy, a następnie div zawartości.
A następnie CSS: (ustaw granicę zawartości na none, zadbaj o takie pozycjonowanie, aby uwzględnić grubość ramki)
źródło
Nie, nie ma sposobu, aby ustawić tylko krycie granicy za pomocą css.
Na przykład, jeśli nie znasz koloru , nie ma sposobu, aby zmienić krycie obramowania za pomocą zwykłego użycia
rgba()
.źródło
Spróbuj tego:
I oto nasz magiczny CSS ..
Sprawdź wersję demo tutaj.
źródło