Использование свойства drop-shadow
css (как показано в других ответах) для имитации смещения требует создания большей тени с желаемым цветом, а затем накрытия более узкой тенью с цветом фона. Если мы хотим иметь универсальное решение, которое работало бы с любым изображением, размещенным на любом фоне, нам нужно было бы использовать фильтры SVG (для справки см. документацию по MDN ), поскольку css еще не дает нам такого возможностей. У него очень хорошее покрытие браузера (в основном IE10 +). Я создал такой фильтр во фрагменте ниже.
Узел <filter>
, встроенный в пример, был создан с помощью inkscape с использованием инструмента создания фильтра, а затем извлечен из сохраненного файла .svg. Комментарии внутри узла <filter>
указывают, какие параметры необходимо изменить, чтобы настроить размер и цвет конечного результата. Я также добавил небольшой фоновый цвет, чтобы показать, что эффект не зависит от фона и создает контур, игнорируя небольшую тень на исходном изображении (прямо под ноутбуком).
Если вам нужна дополнительная информация о том, как составляется эффект, дайте мне знать в комментариях.
img:hover{
filter:url(#outline);
}
html {
background-color: rgb(255, 244, 216);
}
<svg height="0">
<filter
style="color-interpolation-filters:sRGB"
id="outline">
<feComponentTransfer
result="result10">
<feFuncR
type="identity" />
<feFuncG
type="identity" />
<feFuncB
type="identity" />
<feFuncA
type="gamma"
tableValues=""
intercept="10"
amplitude="10"
exponent="7"
offset="0" />
</feComponentTransfer>
<!-- change the stdDeviation here for the outer diameter -->
<feGaussianBlur
stdDeviation="7"
in="result10" />
<feColorMatrix
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 500 0 "
result="result2" />
<!-- change the stdDeviation here for the inner diameter -->
<feGaussianBlur
stdDeviation="4"
in="result10"
result="result5" />
<feColorMatrix
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 500 0 "
result="result4" />
<!-- change the flood-color here the outline color -->
<feFlood
result="result1"
flood-color="rgb(255,165,0)" />
<feComposite
in="result2"
in2="result4"
operator="out"
result="result3" />
<feComposite
in2="result3"
operator="in"
in="result1"
result="result8" />
<!-- change the stdDeviation here to smooth out the final outline -->
<feGaussianBlur
stdDeviation="0.3"
result="result6" />
<feBlend
mode="overlay"
in2="SourceGraphic"/>
</filter>
</svg>
<img src="https://i.stack.imgur.com/tyyKx.png">