#html #css #border-image
#HTML #css #border-image
Вопрос:
Я хотел бы смоделировать эффект тени, используя border-image и linear-gradient (по соображениям производительности прокрутки я не использую собственный эффект тени).
Как видно из примера ниже и в скрипке, мой попытавшийся подход включает использование border-image для градиента, border-image-beginning для перемещения тени за пределы поля содержимого и border-width для отображения только нижнего края.
По общему признанию, я не очень хорошо понимаю border-image, особенно когда дело доходит до его использования с линейными градиентами. Методом проб и ошибок я добился того, что казалось удовлетворительным результатом. Но, как выясняется, когда ширина div достаточно мала, «тень» полностью исчезает.
Что я могу сделать, чтобы получить тень, как в верхнем поле, но которая работает независимо от размера поля? Ваша помощь в этом действительно ценится!
.box
{
/* the "shadow" */
border-image: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.5) 10%, rgba(0,0,0,0) 100%) 100 repeat;
border-image-outset: 0px 0px 6px 0px;
border-width: 0px 0px 6px 0px;
border-style: solid;
/* other stuff */
font-family: sans-serif;
font-size: 20px;
color: #FEFEFE;
background: #007277;
margin: 10px 0px;
float: left;
clear: left;
padding: 50px;
}
<div class="box">
Here's longer text, where the "shadow" appears how I want it to.
</div>
<div class="box">
Short
</div>
Комментарии:
1. Используйте box-shadow. developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
2. @pol Не использует его по соображениям производительности прокрутки. Я отредактировал описание, чтобы лучше объяснить это.
Ответ №1:
Чтобы короткая граница работала, вам нужно изменить
100 repeat;
Для
0 0 100 0 repeat;
.box
{
/* the "shadow" */
border-image: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.5) 10%, rgba(0,0,0,0) 100%) 0 0 100 0 repeat;
border-image-outset: 0px 0px 6px 0px;
border-width: 0px 0px 6px 0px;
border-style: solid;
/* other stuff */
font-family: sans-serif;
font-size: 20px;
color: #FEFEFE;
background: #007277;
margin: 10px 0px;
float: left;
clear: left;
padding: 50px;
}
<div class="box">
Here's longer text, where the "shadow" appears how I want it to.
</div>
<div class="box">
Short
</div>
Эта ссылка может немного помочь вам с отображением границ https://css-tricks.com/understanding-border-image /
Комментарии:
1. Отлично, спасибо! Я буду лучше разбираться в border-image. Что меня немного смущает, так это то, что linear-gradient не имеет размера изображения, так к чему относятся проценты среза? Определяет ли ширина границы «размер изображения» линейного градиента?
2. Я провел небольшое исследование, и я считаю
border-image-width
, что именно это определяет процентное соотношение фрагментов. Я нашел эту другую ссылку наиболее полезной для понимания того, какborder-image
это работает. tympanus.net/codrops/css_reference/border-image