DIV со свойством padding-left перемещается вправо

Пример JSFiddle

Итак, моя проблема заключается в следующем. У меня есть сетка из 9 плиток, которую я хочу сделать отзывчивой.

Мне нужно, чтобы каждая плитка при наведении увеличивалась с 210x210px (включая поля 5px) до 420x420px, поэтому плитки A и B работают нормально, увеличиваясь в размере вправо и вниз, но когда я добираюсь до плитки C, возникает проблема. Несмотря на то, что все плитки имеют абсолютную позицию, когда я навожу курсор на C, его свойство padding-left не увеличивает его размер влево, а сдвигает его вправо. Есть ли решение этой проблемы?

Моя идея состоит в том, чтобы при наведении на каждую плитку открывать три слота для изображений гиперссылок. Левая и центральная плитки соответственно отображают по одному слоту ВПРАВО и два НИЖЕ от себя, а правые плитки - по одному слоту СЛЕВА от них и также два НИЖЕ.

Вот как выглядит CSS:

#row1-col1 {
    width: 200px;
    height: 200px;
    position: absolute;
    top: 0px;
    left: 0px;
    background: red;
    margin: 5px;
    -webkit-transition: padding-right .5s, padding-bottom .5s;
    transition: padding-right .5s, padding-bottom .5s;
    z-index: 98009;
}

#row1-col1:hover {
    padding-right: 210px;
    padding-bottom: 210px;
}

#row1-col2 {
    width: 200px;
    height:200px;
    position: absolute;
    top: 0px;
    left: 210px;
    background: red;
    margin: 5px;
    -webkit-transition: padding-right .5s, padding-bottom .5s;
    transition: padding-right .5s, padding-bottom .5s;
    z-index: 98008;
}

#row1-col2:hover {
    padding-right: 210px;
    padding-bottom: 210px;
}

#row1-col3 {
    width: 200px;
    height:200px;
    position: absolute;
    top: 0px;
    left: 420px;
    background: red;
    margin: 5px;
    float: right;
    -webkit-transition: padding-left .5s, padding-bottom .5s;
    transition: padding-left .5s, padding-bottom .5s;
    z-index: 98007;
}

#row1-col3:hover {
    padding-left: 210px;
    padding-bottom: 210px;
}

Заранее спасибо за любой совет, который вы можете предложить, потому что я всю ночь бился головой, пытаясь решить эту проблему, но безуспешно. Лучшее, что я мог получить, это чтобы плитка (C) расширялась только вниз, но эта конфигурация оставила 9-ю и последнюю плитку (I) неспособной увеличивать свой размер ни в каком направлении, поэтому я мог расширить плитки с правой стороны до левый будет жизненно важен для меня в этом мини-проекте.

ПРЕДУПРЕЖДЕНИЕ! ЭТА ЧАСТЬ ЗАГРЯЗНА!: Варианты, которые я пробовал до сих пор, следующие: - Установите float: left; для всех плиток (первоначальная идея). Результат - Отказ / C-плитка не может изменить размер влево. - Установите абсолютные позиции для всех плиток. Результат - Ошибка / Плитка C не может изменить размер влево. -Установите абсолютные позиции для всех плиток, КРОМЕ C-плитки. Результат — Неудача — Установите float: left; на A и B и absolute position на C в надежде, что, поскольку A и B «игнорировали» C в своем расширении, они не мешать ему расширяться влево. Результат - жалкий провал.


person user2825417    schedule 28.09.2013    source источник


Ответы (2)


Вот вам скрипка и правильная анимация :)

скрипка

Вот измененный css

#row1-col3 {
    width: 200px;
    height:200px;
    position: absolute;
    top: 0px;
    right: 0px;
    background: red;
    margin: 5px;
    float: right;
    -webkit-transition: padding-right .5s, padding-bottom .5s;
    transition: padding-right .5s, padding-bottom .5s;
   z-index: 98007;
}

#row1-col3:hover {
    padding-right: 210px;
    padding-bottom: 210px;
    z-index:98009;
}
person Anobik    schedule 28.09.2013
comment
Не могу отблагодарить вас в достаточной степени... Чувствую себя немного глупо, но я переживу это. Спасибо :) - person user2825417; 28.09.2013

В #row1-col3 удалите left: 420px; и замените его на right:0px.

PS. Вам не нужны единицы измерения, если вы устанавливаете свойство равным 0. Так что на самом деле оно должно быть right:0.

Кроме того, просто для симметрии я отрегулировал среднюю коробку так, чтобы она одинаково расширялась как влево, так и вправо, на случай, если вы захотите попробовать это. См. рабочий пример на http://jsfiddle.net/w5uVF/3/.

person Sean Ryan    schedule 28.09.2013
comment
Это еще один отличный ответ, и вы посоветовали мне использовать ширину и высоту вместо отступов, но симметрию я предпочитаю оставить как есть, потому что это эффект, который я ищу. Спасибо :) - person user2825417; 28.09.2013