#html #css #html5 #css3
Нужно сверстать вот такую фигуру, но не знаю как правильно это сделать. Делал квадрат и через before добавлял обрезанный border, но на разных разрешениях экранов он как будто "отклеивался".
Ответы
Ответ 1
Первый вариант с градиентом: div { width: 500px; padding-bottom: 40%; max-width: 100%; background: #000; margin: 30px auto; border-top: 2px solid #000; background: linear-gradient(105deg, #000 0%, #000 25%, #ae0000 25%, #ae0000 100%); } И более объемный с :before div { position: relative; width: 500px; padding-bottom: 40%; max-width: 100%; background: #ae0000; margin: 30px auto; border-top: 2px solid #000; overflow: hidden; } div:before { content: ''; position: absolute; background: #000; width: 100%; height: 100%; right: 50%; transform: rotate(-80deg); -webkit-transform: rotate(-80deg); -moz-transform: rotate(-80deg); -o-transform: rotate(-80deg); -ms-transform: rotate(-80deg); } И вариант с SVG фоном: div { width: 500px; padding-bottom: 40%; max-width: 100%; margin: 30px auto; border-top: 2px solid #000; background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NjAuMDAwMSAzNjQuNDU3Ij48cG9seWdvbiBwb2ludHM9IjE4Ni44MzYgMCAxNzkuMzMzIDAgMTMyLjE0MyAzNjQuNDU3IDY2MCAzNjQuNDU3IDY2MCAwIDE4Ni44MzYgMCIgZmlsbD0iI2FlMWExNyIvPjxwb2x5Z29uIHBvaW50cz0iMCAwIDAgMzY0LjQ1NyAxMzIuMTQzIDM2NC40NTcgMTc5LjMzMyAwIDAgMCIvPjwvc3ZnPg==') no-repeat center / cover; } Для работы последнего варианта во всех браузерах необходимо перегнать SVG код через любой Base64 Encoder. Например, стиль такого вида: background: url('data:image/svg+xml;utf8,') no-repeat center / cover; Кодируем и заменяем, как в примере.Ответ 2
Если отвлечься от конкретного применения, где, по всей видимости, решение при помощи градиента является достаточным, такие фигуры можно верстать при помощи clip-path. .megablock { display: flex; } .block { height: 400px; flex-grow: 1; } .block--black { background-image: linear-gradient(#000, #999); clip-path: url(#polygon-1); clip-path: polygon(0 0, 80% 0, 100% 100%, 0% 100%); } .block--color { background-image: linear-gradient(rgba(0, 192, 255, 0.8), #ff9); clip-path: url(#polygon-2); clip-path: polygon(0 0, 100% 0, 100% 100%, 20% 100%); }Ответ 3
Решение через градиент: /* Чтобы не было скролла */ body { margin: 0; } .with-gradient { background: linear-gradient(100deg, #000 30%, #ac0000 0); /* Просто для демонстрации */ height: 100vh; }Небольшая заметка: Я использую 0 как ступенях градиентов, чтобы не дублировать предыдущие значения, так как по спецификации ступенька градиента не может быть меньше предыдущего значения. If a color-stop has a position that is less than the specified position of any color-stop before it in the list, set its position to be equal to the largest specified position of any color-stop before it.
Комментариев нет:
Отправить комментарий