В этом посте я собираюсь объяснить, как можно добавить тень к элементу треугольной формы, используя только элементы HTML и чистый CSS. Вероятно, эту технику можно использовать для добавления тени к любой непрямоугольной фигуре ( если вы можете сделать это, вы можете добавить тень ), но я собираюсь использовать треугольники, потому что они кажутся наиболее популярными полигонами в наши дни. И я собираюсь использовать HTML и CSS, так что это кросс-браузер (в CSS-хитростях есть множество примеров о многоугольных, круглых и даже выполненных на заказ фигурах. Стоит прочитать).
В основном то, что я ищу, это:
(проверьте код в скрипке )
Вы можете использовать приведенный выше код, если хотите, не стесняйтесь изменять его в соответствии с вашими требованиями. В следующих строках я расскажу о ключевых аспектах стилей и о том, как вы можете настроить их для изменения ориентации стрелки и тени. Если это то, что вы хотите знать, продолжайте читать.
Основная структура
HTML состоит из двух основных элементов: один для изображения, другой для заголовка и треугольника (с классом наложения элементов ). Обратите внимание, что оверлей разделен еще на три деления, я собираюсь объяснить, почему мне нужно сделать это позже, но в основном у вас есть квадратный элемент, который содержит данные ( item-info ) и треугольник в верхней части для симуляции многоугольная форма (та, которая имеет класс многоугольников , не так много креативности в именах). Последние два элемента предназначены для тени, и поскольку в этом случае треугольник ориентирован вправо, я назвал классы polygon-shadow-top-left и polygon-shadow-bottom-right .
<div class="item">
<div class="item-image">
<img src="http://t.wallpaperweb.org/wallpaper/space/1920x1200/38133_1920x1200.jpg" />
</div>
<div class="item-overlay">
<div class="item-info">
<div class="title">Shuttle mission</div>
</div>
<div class="polygon-right"></div>
<div class="polygon-shadow-top-right"></div>
<div class="polygon-shadow-bottom-right"></div>
</div>
</div>
Я не собираюсь охватывать все примененные стили, но знаю, что я использовал z-index, чтобы расположить изображение ниже треугольника. И элементы div внутри оверлея размещаются рядом друг с другом, используя абсолютное позиционирование (в будущем мы могли бы достичь того же результата, используя компоновку сетки CSS3 )
Теперь давайте посмотрим на стили, чтобы создать многоугольную форму.
Многоугольная форма
Для создания этой формы я использовал два элемента: квадратный элемент (как обычно), который содержит данные (если есть) и треугольный элемент. Эти два элемента, помещенные вместе, моделируют многоугольную форму:
/* The square */
.item .item-overlay .item-info{
width: 140px;
height: 100%;
float: left;
background-color: #005482;
}
/* The triangle */
.item .item-overlay .polygon-right{
width: 0;
height: 0;
float: left;
border-top: solid 70px transparent;
border-bottom: solid 130px transparent;
border-left: solid 20px #005482;
position: relative;
z-index: 2;
}
Обратите внимание, что ширина и высота установлены в 0 в треугольнике. Это потому, что границы заботятся об окончательной ширине и высоте элемента. Вы можете поиграть с этими значениями, чтобы изменить кончик треугольника, в этом случае ближе к вершине.
Чтобы изменить ориентацию треугольника, необходимо обновить значения границ. Например:
.polygon-left{
border-top: solid 70px transparent;
border-bottom: solid 130px transparent;
border-left: solid 20px #005482;
}
.polygon-top{
border-left: solid 70px transparent;
border-right: solid 130px transparent;
border-bottom: solid 20px #005482;
}
.polygon-bottom{
border-left: solid 70px transparent;
border-right: solid 130px transparent;
border-top: solid 20px #005482;
}
Теперь, когда мы обсудили треугольники, пришло время тени.
Полигональная тень
Для этого мне нужно использовать два отдельных div. Я их стиль , используя ту же самую границу технику , как и раньше, но в этом случае я установил ширину . Причина проста: мне нужна точно такая же фигура, с тем же углом, но немного смещенная вправо (как на высоких каблуках). Г-индекс ниже , чем полигон, это расположить тень всегда ниже многоугольника.
.item .item-overlay .polygon-shadow-top-right{
position: absolute;
z-index: 1;
top: 0;
left: 140px;
width: 10px;
border-right: solid 20px transparent;
border-bottom: solid 70px rgba(0, 0, 0, 0.5);
}
.item .item-overlay .polygon-shadow-bottom-right{
position: absolute;
z-index: 1;
top: 70px;
left: 140px;
width: 10px;
border-right: solid 20px transparent;
border-top: solid 130px rgba(0, 0, 0, 0.5);
}
Для других ориентаций вам необходимо изменить значения границ и ширины / высоты.
/* Left */
.polygon-shadow-top-left{
width: 10px;
border-left: solid 20px transparent;
border-bottom: solid 130px rgba(0, 0, 0, 0.5);
}
.polygon-shadow-bottom-left{
width: 10px;
border-left: solid 20px transparent;
border-top: solid 130px rgba(0, 0, 0, 0.5);
}
/* Top */
.polygon-shadow-left-top{
height: 10px;
border-top: solid 20px transparent;
border-right: solid 70px rgba(0, 0, 0, 0.5);
}
.polygon-shadow-right-top{
height: 10px;
border-top: solid 20px transparent;
border-left: solid 130px rgba(0, 0, 0, 0.5);
}
/* Bottom */
.polygon-shadow-left-bottom{
height: 10px;
border-bottom: solid 20px transparent;
border-right: solid 70px rgba(0, 0, 0, 0.5);
}
.polygon-shadow-right-bottom{
height: 10px;
border-bottom: solid 20px transparent;
border-left: solid 130px rgba(0, 0, 0, 0.5);
}
