Учим Opera скруглять img
Дата публикации: 21.10.2011
Проблема
Opera упорно игнорирует все попытки скруглить img с помощью border-radius.
Подробнее об этом неудобном моменте можно почитать в статье Проблемы с border-radius. Там же предлагается обходное решение — использовать вместо img какой-либо «подставной» элемент с заданным background (его Opera скруглит нормально).
Но не все так плохо. По крайней мере для однородного фона проблема решена — Оперу можно «уговорить» с минимальными потерями.
Решение
Пусть в HTML задан какой-нибудь рисунок:
<img src="pic200x200.jpg" width="200" height="200" alt=""/>
Колдуем в стилях:
img {
border-radius: 100px;
position: relative;
}
img:before {
content: "";
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
border-radius: 150px;
display:block;
margin: -50px;
border: 50px solid #fff;
}
Суть фокуса — в псевдоэлементе :before. Он, кстати, нужен исключительно для Оперы (и сработает для img, судя по всему? только в ней). В остальных браузерах (кроме IE все и так будет нормально).
Приведенный выше код, к сожалению, не вполне универсален. Во-первых, он годится, как уже было сказано, только для однородного фона, во-вторых, рассчитан на скругление рисунка вполне определенных размеров. Поэтому, он идеально подходит, скажем, для случая округлых аватарок. У них, как правило, фиксированный размер.
Если нужно скруглять рисунок другого размера или использовать другой радиус скругления придется немного поиграться с числовыми параметрами:
img {
border-radius: 100px;
}
img:before {
border-radius: 150px;
margin: -50px;
border: 50px solid #fff;
}
Ослы и border-radius
И, да, конечно, IE традиционно не понимают border-radius. Можно воспользоваться скриптом PIE.
Проверено в:
- IE 7-8
- Firefox 7
- Opera 11.5
- Safari
- Chrome
