2013-04-23 9 views
24

Предполагая, что элемент находится на 100% насыщенности, непрозрачности и т. Д. ... как я могу получить его фон станет чуть светлее, когда он завис?CSS: lighten a element on hover

Вариант использования - это то, что я разрешаю пользователю нависнуть над любым элементом на странице. Я не хочу обходиться, определяя каждый эквивалент цвета при непрозрачности 80%.

Один из способов - изменить opacity: 0.4, но я хочу, чтобы фон менялся.

+0

тусклый все остальное, так как элемент уже так ярко, как он мог бы получить. –

+0

Используйте RGBA вместо непрозрачности, если вы не используете какой-либо образ. – Michael

+0

Это цвет, который вы хотите изменить или фоновое изображение? Если в цвете вы можете использовать значение HSL() и увеличить значение яркости (последнее). –

ответ

7

вы должны использовать метод RGBA (background-color:rgba(R,G,B,alpha);), чтобы сделать это:

.element{ 
    background-color:rgba(0,0,0,1); /*where 1 stands for 100% opacity*/ 
} 
.element:hover{ 
    background-color:rgba(0,0,0,0.5); /*where 0.5 stands for 50% opacity*/ 
} 

FIDDLE

И если сильно нужно, чтобы сделать его работу в IE8 или ниже тоже вот как он приходит:

.element:hover{ 
background: transparent; 
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#7F000000,endColorstr=#7F000000)"; /* IE8 */ 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7F000000,endColorstr=#7F000000); /* IE6 & 7 */ 
     zoom: 1; 
} 

отмечают, что значения startColorstr и endColorstr построены как этот #AARRGGBB (где AA является альфа-каналом) и должен быть таким же, если вы не хотите, чтобы эффект градиента от цвета к другому.

+0

Это лучшее решение, чем мое, но 'rgba()' не поддерживается в IE8: http://caniuse.com/#search=rgba – 2013-04-23 20:29:43

+0

@Ghodmode Этот вопрос отмечен 'CSS3' –

+0

@roXon как псевдо- элементы и 'rgba()' включены в спецификацию CSS3. Использование CSS3 не обязательно исключает поддержку IE8. Я просто указывал на возможный недостаток использования 'rgba()'. – 2013-04-23 20:44:22

3

Я использовал бы псевдоэлемент :after вместо обычного фона. Он поддерживается в IE8, где rgba() нет.

HTML:

<div class="hoverme"> 
    <p>Lorem ipsem gimme a dollar!</p> 
</div> 

CSS:

.hoverme { 
    position: relative; 
} 
.hoverme:after { 
    content: ""; 
    position: absolute; 
    top: 0; 
    left: 0; 
    bottom: 0; 
    right: 0; 
    background-color: #fff; 
    z-index: -1; 
} 

.hoverme:hover:after { 
    background-color: #ddd; 
} 

или что-то подобное.

http://caniuse.com/#search=%3Aafter

Для более гладкого результата, добавить CSS3 переход:

.hoverme:after { 
    -webkit-transition: all 0.3s ease-out; /* Chrome 1-25, Safari 3.2+ */ 
    -moz-transition: all 0.3s ease-out; /* Firefox 4-15 */ 
     -o-transition: all 0.3s ease-out; /* Opera 10.50–12.00 */ 
      transition: all 0.3s ease-out; /* Chrome 26, Firefox 16+, IE 10+, Opera 12.10+ */ 
} 

Предыдущий фрагмент кода был скопирован и вставлен из http://css3please.com

http://jsfiddle.net/ghodmode/6sE9E/

2

Вы хотите изменить background-color легкость любого элемента, который витает без использования непрозрачности. К сожалению. Я не думаю, что это возможно без установки конкретных значений background-color для ваших зависаний.

Прецедент в том, что я позволяю пользователю наведите курсор мыши на какой-либо элемент на странице. Я не хочу обойти определение каждого эквивалента цветов при непрозрачности 80%.

Существует одна альтернатива, о которой я могу думать, но для всего элемента потребуется полупрозрачный наложение PNG, который также будет охватывать любое содержимое элемента. Таким образом, вы не решаете свою проблему.

Связанные Вопрос: Dynamically change color to lighter or darker by percentage CSS (Javascript)

3

Вы можете сделать это только с помощью CSS с помощью filter: brightness(); но только в настоящее время поддерживается в WebKit браузерах. См http://jsfiddle.net/jSyK7/

+1

Обратите внимание, что это также изменяет яркость дочерних элементов зависающего элемента. –

41

Это давно, но вы можете сделать что-то вроде этого:

.element { 
    background-color: red; 
} 
.element:hover { 
    box-shadow: inset 0 0 100px 100px rgba(255, 255, 255, 0.1); 
} 

Вы можете изменить 100px в номер, который вы хотите. Я взял большой, чтобы покрыть весь элемент.

Это не очень красивое решение, но оно работает!

Вот пример: http://jsfiddle.net/6nkh3u7k/5/

+2

Это абсолютно мило! лучше всего это работает с элементами с любым фоном или градиентом и т. д. Это должен быть принятый ответ IMO. Обратите внимание, что значение 'inset' должно быть последним не первым. – beercohol

+0

Это давно, но спасибо. Используется сегодня. –

9

Вот простой способ сделать это:

.myElement:hover { 
    filter: brightness(150%); 
} 
+0

Это действительно быстрое и простое решение, если вам не нужно поддерживать IE11. Однако фильтр - это будущее, а не использование взлома псевдоэлементов. Однако ответ нужно отредактировать, чтобы удалить префикс -webkit. – Trevor