Могу ли я рассчитать и использовать высоту элемента с Sass Compass

Я использую sass и compass в моем проекте RoR. Мне нужно назначить top CSS свойство элемента значение, которое является высота элемента делить на -2. Могу ли я сделать это с помощью Sass Compass?

3 ответов


Вы, кажется, получили XY проблема. У вас есть задача для решения, и вместо того, чтобы спрашивать нас о задаче, вы спрашиваете о решении, которое вы пробовали и уже нашли неуместным.

почему вы хотите, чтобы применить top свойство, равное половине высоты элемента и отрицаемое? Потому что вы хотите переместить абсолютно позиционированный элемент на половину его высоты вверх. Это первоначальная задача.

есть простое решение для достижения этого, а Сасс даже не нужна! (На самом деле, пока вы не знаете высоту элемента, SASS не может предоставить больше помощи, чем CSS.)

нам понадобится дополнительная обертка:

<div class=container>
  <div class=elements-wrapper>
    <div class=element>
    </div>
  </div>
</div>

чтобы поднять элемент на 50% его высоты, выполните два простых шага:

1) Нажмите полностью обертки из контейнера:

.elements-wrapper {
  position: absolute;
  bottom: 100%; }

2) теперь потяните элемент вниз на 50% его высоты:

.element {
  margin-bottom: -50%; }

вот именно!

когда вы margin-bottom: -50%, вы фактически тянете элемент на 50% вниз от его wrapper и высота. Но высота обертки равна высоте элемента!

Не забудьте применить position: relative в контейнер, в противном случае position: absolute будет относительно окна, а не контейнер.

здесь демо С хорошо прокомментированным кодом:http://jsbin.com/uwunal/4/edit

UPD 2013-04-16

Я только что понял, что это фальшивый.

в CSS проценты верхнего и нижнего полей относятся к ширина контейнера. Так что приведенный выше пример работает только потому, что контейнер квадратный.


Я нашел хороший способ сделать это. Он использует transform: translate(-50%, -50%)

здесь ссылка, детализирующая решение:центрирующий элемент


попробуйте это:

@mixin flexible-top($elementHeight) {
    top: ($elementHeight / (-2));
}

.yourElement {
    @include flexible-top(yourElementHeight); 
}