2015-09-16 3 views
0

Мне нужно увеличить height (то есть не определено a priori) от +50px на :hover.Возможно ли это в CSS: height: height + 50px?

.foo{ 
 
    background: red; 
 
    width: 50%; 
 
    text-align: center; 
 
} 
 
.foo:hover{ 
 
    height: height+50px; 
 
    color: white; 
 
}
<div class="foo">foo text</div>

  • Можно только css?
  • Возможно ли использование less?

PS.

Практических (более сложный) нужно: у меня есть «спрайты» изображение

1234 
HHHH 
5678 
HHHH 

где Н представляет собой парение изображения для соответствующего исходного изображения.
enter image description here
я могу вычислить X и Y координат для каждого класса (1,2,3), но для :hover я хотел бы просто спуститься с ImageHeight:

:hover {background-position-y: background-position-y - @imgheight} 
+2

это невозможно с чистым css, но вы можете сделать это с меньшим или с javascript – Chris

+0

, как я могу сделать это с меньшим количеством? – Serge

+0

@Serge На самом деле у меня может быть решение, но хотелось бы знать, почему вы хотите добиться этого. Это подходит для большего количества контента или просто для цели или эффекта. – divy3993

ответ

2

Следуя моему замечанию: советую другой подход. Просто установите бокс-тень к элементу контейнера, например, так:

a { 
 
    text-indent: -9999px; 
 
    overflow: hidden; 
 
    background: url('http://nationalevents.cityofhope.org/images/content/pagebuilder/facebook-icon.png'); 
 
    background-size: cover; 
 
    width: 32px; 
 
    height: 32px; 
 
    display: block; 
 
    /*border: 1px solid white;*/ 
 
    box-sizing: border-box; 
 
    border-radius: 50%; 
 
} 
 
a:hover { 
 
    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.3); 
 
}
<a href="#">Some text</a>

Обратите внимание, что коробка-проклейки и границы радиуса устанавливаются на, а не при наведении курсора мыши. Это делается для предотвращения любого дополнительного времени обработки при зависании. Лучше всего сохранять изменения при наведении минимальным.

0

Если у вас есть переменная высота как это:

@foo-height : 50px; /* here goes your initial height value */ 

вы можете написать эти правила в файле .less:

.foo { 
    background: red; 
    width: 50%; 
    height: @foo-height; 
    text-align: center; 
} 
.foo:hover { 
    height: ~'calc(@{foo-height} + 50px)'; 
    color: white; 
} 
+0

нет, проблема в том, что высота не определена – Serge

+1

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

+0

, так что это невозможно ... – Serge

2

Может быть, вы могли бы рассмотреть возможность использования псевдо-элементов:

http://jsfiddle.net/pjr7wbhk/2/

.foo{ 
    background: red; 
    width: 50%; 
    text-align: center; 
} 

.foo:hover{ 
    color: white; 
} 

.foo:hover::after { 
    content: ''; 
    display: block; 
    height: 50px; 
} 
+0

Мне нужно ** увеличить ** высоту, не устанавливать ее на 50 пикселей ... попробуйте установить '.foo {height: 100px;}' – Serge

+0

Как вы см., я не трогаю высоту вашего драгоценного '.foo' напрямую. Я устанавливаю высоту псевдоэлемента ':: after'. Прочтите, пожалуйста. – biziclop

+2

@Serge Этот _does_ увеличивает высоту, он в основном добавляет еще один элемент под текстом высотой 50px, так что это фактически ** высота текста ** + ** высота псевдоэлемента **. –

0

Использование дополнительного элемента HTML и некоторые ABS/отн позиционирование:

http://jsfiddle.net/pjr7wbhk/6/

<div class="foo"> 
    <div class="inner-helper">foo text</div> 
</div> 

CSS:

.foo { 
    position: relative; 
} 
.foo .inner-helper { 
    position: absolute; 
    top:0; 
    bottom: 0; 
    left:0; 
    right: 0; 
} 
.foo:hover .inner-helper { 
    bottom: -50px; 
}