Цвет градиента CSS останавливается от конца в пикселях
Я работаю над проектом HTML/CSS/JS, где приложение является фиксированным размером, и элементы должны быть расположены точно на основе проектов. Поскольку размер окна исправлен, я могу легко работать с размерами пикселей в CSS и не беспокоиться об изменении размера браузера. У меня также есть роскошь не беспокоиться об IE или Opera: приложение должно работать только в webkit и firefox.
В нескольких местах мне нужно иметь градиентный фон, проходящий через определенное количество пикселей. Это можно было бы легко выполнить с помощью
background-image: linear-gradient(to top, #666666, #000000 60px);
(и его сопоставления -webkit-
и -moz-
). Это делает трюк для большинства элементов. Однако есть пара, где мне нужно иметь верхние и нижние позиции пикселей для прекращения цвета. Если бы это были процентные пункты, то это можно было бы сделать с чем-то вроде:
background-image: linear-gradient(to top, #666666, black 60px, transparent 60px, transparent 90%, black 90%, #666666);
(от серого до черного более 60 пикселей, затем прозрачный, а затем от черного до серого в течение последних 10%). Однако мне нужно сделать то же самое с пикселями, так как этот элемент в разное время имеет разные размеры. Я бы хотел избежать использования JS для повторного применения градиента в разных динамически рассчитанных процентных пунктах, если это необходимо.
Итак, мой вопрос: существует ли способ указать прекращение цвета x пикселей (не процент) от конца?
Ответы
Ответ 1
Я только что перешел через поисковую систему, я думаю, что лучшее решение уже было дано vals с использованием нескольких фоновых изображений, но вместо использования background-size
и background-position
я думаю, что это более гибкой и стабильной для использования альфа-цветов здесь (с rgba()
), как в примере ниже:
background-image:
/* top gradient - pixels fixed */
linear-gradient(to bottom, rgb(128,128,128) 0px,rgba(128,128,128,0) 16px),
/* bottom gradient - pixels fixed */
linear-gradient(to top, rgb(128,128,128) 0px, rgba(128,128,128,0) 16px),
/* background gradient - relative */
linear-gradient(to bottom, #eee 0%, #ccc 100%) ;
Это дает мне именно то поведение, которое я изначально искал.:)
Демо: http://codepen.io/Grilly86/pen/LVBxgQ
Ответ 2
Я не думаю, что это возможно, но наложение двух объектов, одно с непрозрачными пикселями снизу, а другое с пикселями сверху, все равно позволит избежать использования JS
.background {
position: absolute;
background-image: linear-gradient(to top, #666666, black 60px, transparent 60px);
}
.overlay {
position: relative;
background-image: linear-gradient(to bottom, #666666, black 60px, transparent 60px);
}
Ответ 3
В строке предыдущего ответа от po228, но в том же фон элемента.
Установите 2 разных градиента, один из которых начинается сверху, а другой снизу
.test {
background: linear-gradient(to top, red 10px, white 10px),
linear-gradient(to bottom, blue 10px, white 10px);
background-size: 100% 50%;
background-repeat: no-repeat;
background-position: bottom center, top center;
height: 150px;
width: 300px;
}
<div class="test"></div>