CSS - Как изменить высоту границы в линейном градиенте?

У меня есть следующая таблица:

CSS - Как изменить высоту границы в линейном градиенте?

и этот css для границы таблицы:

border-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #B3B3B3 20%) 0 0 0 1;

я хочу, чтобы граница заканчивалась там, где заканчивается последний элемент списка. Могу ли я добиться этого с помощью свойства border-image? Или это вообще возможно? Кстати, высота элементов списка может различаться, не все элементы имеют одинаковую высоту.

Итак, это должно быть результатом:

CSS - Как изменить высоту границы в линейном градиенте?

Есть ли способ установить или узнать высоту самого последнего элемента?

wlh 22.01.2019 19:31

Если бы вы знали высоту, я бы сказал, что да. Если нет, вы можете использовать JavaScript для установки изображения рамки на основе высоты последнего элемента. И добавьте значение, подобное этому: border-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #b3b3b3 20%, #b3b3b3 calc(100% - 25px), rgba(0,0,0,0) calc(100% - 25px)) 0 0 0 1; Где вы изменяете значение 25px, чтобы оно было изменено на любое значение элемента стиля списка снизу.

wlh 22.01.2019 19:38

я бы принял ответ, если бы вы могли написать его как ответ на вопрос;)

akcasoy 23.01.2019 07:02

кстати, вы знаете, как я могу сделать длину градиентной части постоянной? В настоящее время градиент является процентным, и если у меня есть 1000 элементов, верхняя часть границы не будет видна. На самом деле я хотел бы иметь постоянную высоту для части градиента, только 20 пикселей, т.е. на самом деле он больше не должен быть градиентом: /

akcasoy 23.01.2019 08:32
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
4
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если бы вы могли узнать высоту либо ul, либо, по крайней мере, последнего li, то решение только css определенно возможно; в противном случае это становится сложным.

Функция linear-gradient принимает четыре значения (см. https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient#Values), одно из которых — color-stop-list. Если вы установите одну остановку на конец, а другую на начало в той же точке (процент или длину, например пиксели), вы получите сплошную линию на этой остановке с заданным углом или углом по умолчанию.

Таким образом, вы можете заставить градиент останавливаться в фиксированной точке пикселя следующим образом:

linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #b3b3b3 20%, #b3b3b3 calc(100% - 25px), rgba(0,0,0,0) calc(100% - 25px))

Здесь я меняю основной цвет на цвет с opacity: 0 в точке 25px от полной высоты коробки (поскольку мы используем to bottom). Вы можете попробовать посмотреть это для своего проекта или использовать JavaScript через Element.getBoundingClientRect().height (см. https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) на последнем li, чтобы вычислить позицию list-item-type на основе того, как вы определяете это в своем css.

Чтобы ответить на вопрос в вашем последнем комментарии, используйте ту же логику и установите точку остановки 20px в:

linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 20px, #b3b3b3 20px, #b3b3b3 calc(100% - 25px), rgba(0,0,0,0) calc(100% - 25px))

Сказав это, вы можете рассмотреть возможность обработки границы на каждом отдельном li, а не на ul, что значительно упростило бы обработку без JavaScript. Затем вам нужно будет только предоставить значения linear-gradient на ul>li:first-child и ul>li:last-child, используя приведенные выше принципы. Просто имейте в виду, что если вы используете margin-top или margin-bottom на любом li в списке, вы увидите пробелы в вашей границе.

Другие вопросы по теме