Staram się unikać używania obrazu tła (lub jakiegokolwiek rozwiązania opartego na obrazie) do skutecznego utworzenia tego:
Uwaga: czerwona strzałka wskazuje tylko daną granicę. Strzałka nie powinna być zawarta w odpowiedzi.
Jak mogę utworzyć tę nieregularną ramkę za pomocą czystego CSS (bez obrazów)? Jeśli zdjęć nie da się uniknąć, najbardziej zwięzła i czytelna odpowiedź zostanie oceniona i zaakceptowana.
:before
i:after
zachować swojąhtml
„czystość”.:before
Byłoby lewy trójkąt The:after
słuszna.Odpowiedź Yiseli jest solidna, ale pomyślałem, że zaproponuję tę alternatywę: użycie wielokąta lub URI obrazu z kształtami CSS i ścieżką przycinającą. Oto krótki samouczek .
Zauważ, że ta metoda będzie działać z jeszcze mniejszą liczbą przeglądarek niż sztuczka z trójkątną ramką. Jeśli jednak chcesz użyć bardziej złożonego kształtu lub owinąć tekst do kształtu, będzie to właściwa droga.
źródło
vw
jednostki CSS . Czy to brzmi możliwe?Inną metodą tego, która może mieć również ograniczoną obsługę, jest „osadzony SVG w CSS”. Nie próbowałem tego sam, ale pomysł polega na tym, że podajesz zasób obrazu jako adres URL w deklaracji css dla obiektu i przekazujesz mu odpowiednio uratowany adres URL, który zawiera dane.
SVG to zwykły format tekstowy / xml. Przykładowy wielokąt (z w3schools ):
Przykładowy wbudowany (osadzony) SVG (uproszczony) (z stackoverflow ):
Zauważ, że dane SVG muszą być „ucieczkowe” poprawnie do wbudowanego użycia, co czyni je nieco mniej atrakcyjnymi niż zwykłe łączenie pliku SVG.
W powyższym połączonym wątku znajduje się dyskusja na temat opłacalności metody. Myślę, że osadzenie czegoś tak prostego, jak biały trójkąt jest łatwą decyzją, pod warunkiem wsparcia. Złożone dane w formacie SVG powinny być przechowywane jako plik SVG, a nie wbudowany.
Pliki SVG są wektorowe i mogą być skalowane procentowo, w przeciwieństwie do metody „border”. Mają także (obecnie) lepsze (przynajmniej nieliniowe) wsparcie niż wymieniona metoda ścieżki obcinania. SVG, jako zwykły tekst, może być nawet emitowany w locie przy użyciu np. PHP lub innego skryptu po stronie serwera.
źródło
Jeśli niebieski obszar na obrazie jest przezroczysty png, a biały obszar jest przezroczysty, musisz dołączyć ten kod HTML, aby upuszczał cienie:
I użyj tego css na obrazku:
Jest to idealne rozwiązanie dla różnych przeglądarek.
źródło