overflow:hidden игнорируется с помощью border-radius и CSS-преобразований (только webkit)

Я хочу иметь квадратное изображение внутри круга.

Когда пользователь наводит курсор на изображение, изображение должно масштабироваться (приближаться).

Круг должен остаться прежнего размера.

Только во время перехода CSS квадратное изображение перекрывает круг (как будто overflow:hidden вообще не было).

Вот демо со странным поведением в Chrome и Safari: http://codepen.io/jshawl/full/flbau.

Работает нормально в firefox.


person jshawl    schedule 01.06.2013    source источник
comment
ты единственный, кого я видел, спрашивал об этом... респект   -  person carinlynchin    schedule 21.10.2015


Ответы (4)


Я удалил лишнюю разметку (круглые и квадратные контейнеры... нужен только один) и стилизовал сам img:

#wrapper {
  width: 500px;
  height: 500px;
  border-radius: 50%;
  overflow: hidden;
  -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
}

#test {
  width: 100%;
  height: 100%;
  transition: all 2s linear;
}

#test:hover {
  transform: scale(1.2);
}
<div id="wrapper">
  <img src="http://rack.3.mshcdn.com/media/ZgkyMDEzLzA1LzA4L2JlL2JhYmllc193aXRoLjA5NGNjLnBuZwpwCXRodW1iCTg1MHg1OTA-CmUJanBn/8f195417/e44/babies_with_swagg.jpg" id="test">
</div>

person Aaron K    schedule 01.06.2013
comment
круг должен оставаться того же размера - person jshawl; 02.06.2013
comment
не усложняйте, это ответ position:relative; z-индекс: 1; - person J.Tural; 06.02.2016

Вам нужно добавить этот код к родителю вашего img:

position:relative;
z-index:1;

Пример здесь: http://codepen.io/DavidN/pen/dIzJK

person David Nazar    schedule 14.10.2014
comment
У меня уже был position:relative, но добавление z-index:1 все исправило. Благодарю вас! - person Morgan Delaney; 13.11.2014
comment
Спасибо, Дэвид, это беспокоило меня целую вечность. - person Jamie Wade; 29.07.2015
comment
Да, это решение сработало для меня. Я не использовал круг, поэтому не хотел использовать маску. Теперь это кажется очевидным. - person alxrb; 27.08.2015
comment
Еще один +1 здесь, это работает, когда у вас есть изображение внутри якоря с закругленными углами и вы хотите «увеличить» при наведении. Просто, если подумать. Спасибо - person Matt; 28.01.2016
comment
Это лучший ответ, так как использование маски также скрывает тень блока. - person Láďa Durchánek; 05.03.2016
comment
Это помогло мне, спасибо! Усвоенный урок — всегда применяйте какое-либо позиционирование к блочному элементу. Блок в методологии БЭМ. - person Selrond; 01.03.2017
comment
Кажется, это исправление больше не работает (17 мая 2017 г., Chrome 58). - person Bram Vanroy; 17.05.2017
comment
У меня это работает здесь: codepen.io/DavidN/pen/dIzJK с Chrome версии 58.0 .3029.110 (64-разрядная версия) - person David Nazar; 17.05.2017

Добавьте этот код в родительский div и решите проблему:

-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
person Atakan Goktepe    schedule 07.10.2015
comment
Не могли бы вы уточнить свой ответ, добавив немного больше описания решения, которое вы предоставляете? - person abarisone; 07.10.2015

Похоже, вы стилизовали слишком много элементов! Я создал форк здесь

Я отредактировал часть вашего кода SASS, чтобы использовать библиотеку компаса и лучше использовать свойства transition и transform, которые можно увидеть здесь:

body { padding: 3em; }

.circle {
    height: 500px;
    width: 500px;
    border: 1px solid black;
    @include border-radius(500px);
    overflow: hidden;
}

.circle img {
    height: 500px;
    width: 500px;
    @include transition(all 0.3s ease);
    &:hover { @include transform(scale(1.1)); }
}

Надеюсь, это поможет! Просто подумайте об элементе circle как о родительском контейнере, который содержит общую информацию о пространстве (например, 500px в ширину и 500px в высоту). Само изображение имеет закругленную границу 500px. Это элемент, который вы хотите отредактировать! Здесь вы можете масштабировать и трансформировать этот элемент, не взаимодействуя с родительским контейнером circle. См. compass для получения дополнительной информации об использовании библиотеки! Удачи!

person djthoms    schedule 01.06.2013
comment
Странно, что добавление overflow:hidden к изображению работает. Разве это не должно быть на родителях? - person jshawl; 02.06.2013
comment
Лучший способ узнать это попробовать! Удалите свойство overflow из .circle img, поместите его в .circle и посмотрите на результаты. Вам вообще нужно свойство overflow? - person djthoms; 02.06.2013
comment
о, подождите, я только что понял, что ваша вилка делает круг больше. круг должен оставаться того же размера. изображение должно увеличиться - person jshawl; 02.06.2013
comment
увидеть эту вилку. радиус границы не работает. радиус границы не codepen.io/jshawl/pen/skGJl - person jshawl; 02.06.2013
comment
давайте продолжим это обсуждение в чате - person djthoms; 02.06.2013