Я пытаюсь избежать использования фонового изображения (или любого решения на основе изображений) для эффективного создания этого:
Примечание: красная стрелка просто указывает на соответствующую границу. Стрелка не должна быть включена в ваш ответ.
Как я могу создать эту границу неправильной формы с чистым CSS (без изображений)? Если изображения неизбежны, наиболее краткий и читаемый ответ будет принят и принят.
:before
и:after
сохранить своюhtml
«чистоту».:before
Бы левый треугольник, то:after
правый.Ответ Йизелы твердый, но я решил, что предложу эту альтернативу: использование полигона или URI изображения с CSS-формами и клип-траекторией. Вот краткое руководство .
Обратите внимание, что этот метод будет работать с еще меньшим количеством браузеров, чем трюк с треугольной границей в данный момент. Однако, если вы хотите использовать более сложную форму или обернуть текст в форму, это будет путь.
источник
vw
модуля CSS . Это звучит возможно?Другим методом, который также может иметь ограниченную поддержку, является «встроенный SVG в CSS». Я не пробовал это сам, но идея в том, что вы предоставляете ресурс изображения в качестве URL-адреса в объявлении CSS для объекта и передаете ему правильно экранированный URL-адрес, который содержит данные.
SVG - это простой текстовый / xml формат. Пример полигона (из w3schools ):
Пример встроенного (встроенного) SVG (упрощенного) (из stackoverflow ):
Обратите внимание, что данные SVG должны быть должным образом "экранированы" для использования в строке, что делает их немного менее привлекательными, чем простая привязка файла SVG.
Существует некоторая дискуссия относительно жизнеспособности метода в вышеупомянутой связанной ветке. Я думаю, что встраивание чего-то такого простого, как белый треугольник, является простым решением, если есть поддержка. Сложные данные формата SVG должны храниться как файл SVG, а не как встроенный.
Файлы SVG являются векторными и могут масштабироваться в процентах, в отличие от метода «border». Они также (в настоящее время) имеют лучшую (по крайней мере, не встроенную) поддержку, чем перечисленный метод обтравочного контура. SVG, будучи простым текстом, может даже передаваться на лету, используя, например, PHP или другие сценарии на стороне сервера.
источник
Если ваша синяя область на изображении представляет собой прозрачный png, а белая область прозрачна, то вам нужно включить этот html, чтобы сделать его падающим в тени:
И используйте этот CSS на изображении:
Это идеальное кросс-браузерное решение.
источник