Войти | Выйти

Border-radius in Safari

В Safari столкнулся с неаккуратным рендерингом элемента, если ему задан border-radius и фоновый цвет. Увидеть проблему и её решение можно на тестовой странице.

Решение

1. Фоновый цвет у блока убрать
2. Внутрь блока добавить обертку
3. Обертке задать фоновый цвет
4. Обёртке задать border-radius, меньше на толщину бордера, чем у внешнего блока


<div class="button"><div class="button-inner">Кнопка</div></div>

.button
{
    border: 5px solid #000;

    border-radius: 30px;
    -moz-border-radius: 30px;
    -webkit-border-radius: 30px;
    -khtml-border-radius: 30px;
}

.button-inner
{
    border-radius: 25px;
    -moz-border-radius: 25px;
    -webkit-border-radius: 25px;
    -khtml-border-radius: 25px;

    background: #fff;
}

Update

Между фоном и бордером появляются дырки, если border-radius у обоих блоков одинаковый и:

1. Внутреннему блоку задана большая высота (height)
2. Его содержимое имеет большой font-size
3. Его содержимое представлено многострочным текстовым узлом



Внутреннему блоку нужно задавать border-radius с меньшим значением, чем у внешнего блока, потому что при border-radius:30px внешняя сторона бордера (толщина которого равна 5px) скруглена с радиусом 30px, а внутренняя сторона скруглена с радиусом 25px, меньше на толщину бордера.

Спасибо Александру Ермолаеву за багрепорт, а Степану Резникову за допиливание решения и объяснение про кривизну бордера.

Комментарии

7 комментариев к “Border-radius in Safari”

  1. Мохов Олег 28.Янв.2010 в 16:12

    Интересно, что этот же метод улучшает качество отображения в FF (3.6, Mac). Скругления какие-то менее зазубренные становятся (proofpic)

    ОтветитьReply to this comment
  2. webkostin 28.Янв.2010 в 17:11

    В Хроме это тоже помогает. Но антиальяса не прибавляет.

    ОтветитьReply to this comment
  3. webkostin 28.Янв.2010 в 17:11

    Т.е. это проблема не Safari, а вебкита, видимо.

    ОтветитьReply to this comment
  4. Вадим Макишвили 28.Янв.2010 в 18:41

    @Мохов Олег, симпатично, но не семантично, да? :)

    ОтветитьReply to this comment
  5. Вадим Макишвили 28.Янв.2010 в 18:42

    @webkostin, а в Хроме тоже белые пиксели вылезают?

    ОтветитьReply to this comment
  6. Мохов Олег 28.Янв.2010 в 22:42

    @Вадим Макишвили, ни в коем случае ;) Вообще со скруглёнными уголками гемороя пока замечаю больше чем пользы и непонятно, это из-за того, что они ещё в разработке? Например, если для img тега поставить border-radius, то картинка не обрезается, а скругления под неё заползают (я здесь об этом писал http://olmokhov.livejournal.com/43025.html).

    ОтветитьReply to this comment
  7. Мохов Олег 28.Янв.2010 в 22:44

    @Вадим Макишвили, дак вы и сами можете убедиться (есть же бета под Маком). Ответ на вопрос webkostin’у: да! =)

    ОтветитьReply to this comment

Написать комментарий.




XHTML: Можете использовать следующий код: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree Plugin

Subscribe without commenting