x0bbit ([info]x0bbit) wrote in [info]ru_webdev,

Круглые углы в IE 8

Возможно кому-нибудь пригодиться метод создания круглых углов в IE8 без дополнительного кода на css.
Суть проблемы: IE8 не понимает expression, SVG и не понимает CSS3, а хочется задав блоку дополнительный класс получить уголочки. Есть VML, но не выполняется условие про дополнительный код.

Короче, вот стили.



Рабочий пример

Кстати этот код отлично работает в Опере, что при необходимости позволит отказаться от SVG.

Есть и ограничения, как без них...
— Нет возможности положить в блок background-image. Фон уже занят одним из углов.
— Прозрачные углы возможны лишь для блока с заведомо известной высотой или шириной.
— при наличии у блока padding-top: > 0, придется ставить верхние углы руками. А все из за того, что нельзя дать .block:before {position: absolute} =(

Больше всего бесит, что нельзя для .b-round-example:before задать position:absoute.
Ну и то, что фон блока занят одним из уголков тоже не очень хорошо. Может у кого будут идеи по доработке?

И на закуску баг:
Углы лежащие в background блока и в first-letter (верхний левый угол) должны быть в одном спрайте, иначе background блока отображаться не будет.


  • Post a new comment

    Error

    Your reply will be screened

  • 80 comments

[info]pepelsbey

March 31 2009, 14:41:39 UTC 3 years ago

Всё бы хорошо, но работает эта штука только в вакууме, занимать контейнер под уголок — не самое удачное решение.

ps: харисовские префиксы пошли в массы )

[info]_1313

March 31 2009, 14:43:07 UTC 3 years ago

ну, как известно, верстать без ограничений можно только на таблицах :)

[info]pepelsbey

March 31 2009, 14:44:40 UTC 3 years ago

*пытается не развязывать холивор*

А если просто сделать чуть универсальнее?

[info]_1313

3 years ago

[info]x0bbit

March 31 2009, 14:45:35 UTC 3 years ago

Про уголок – согласен. Но ничего больше не приходило в голову.
А вакуум... Когда как.

[info]pepelsbey

March 31 2009, 14:45:54 UTC 3 years ago

…ну и класть такое прямо в тело при Strict-доктайпе:

<link rel="stylesheet" media="all" href="/content/round/round.css"  />
<!--[if IE 8]>
  <link rel="stylesheet" media="all" href="/content/round/round-ie.css" />
<![endif]-->

[info]x0bbit

March 31 2009, 14:47:09 UTC 3 years ago

ой, ну давайте не будем придираться к демке =)

[info]pepelsbey

March 31 2009, 14:56:38 UTC 3 years ago Edited:  March 31 2009, 15:02:15 UTC

Собственно, вот — один экстра-блок и все проблемы.

.b-round {
    position: relative;
    padding: 20px;
    background: #EEE;
    }
    .b-round:before,
    .b-round:after,
    .b-round-inner:before,
    .b-round-inner:after {
        position:absolute;
        background:#C00;
        width:10px;
        height:10px;
        content:'';
        }
    .b-round:before {
        top:0;
        left:0;
        }
    .b-round:after {
        top:0;
        right:0;
        }
    .b-round-inner:before {
        right:0;
        bottom:0;
        }
    .b-round-inner:after {
        bottom:0;
        left:0;
        }

<div class="b-round">
    <div class="b-round-inner">
        LoL
    </div>
</div>


upd: проверил в IE8 — отлично работает безо всякого трюкачества

[info]x0bbit

March 31 2009, 15:13:51 UTC 3 years ago

Ах! капитан очевидность =)
А все таки если необходимо использовать один блок?

[info]pepelsbey

March 31 2009, 15:22:28 UTC 3 years ago

Вариант .b-round:before:before, к сожалению, не сработал (

Я понимаю, что любой дурак может с двумя блоками, но голова в шишках от подобных решений не позволяет считать это решение полноценным. Да и expression'ы для 50-ти уголков на странице для IE6–7 — это жестоко, даже если они написаны правильно.

Так что экста-разметка рулит и решает. К большому нашему сожалению.
Кстати, как вы собираетесь вежливо отфильтровать Opera, чтобы вкрутить для неё SVG?

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]pepelsbey

3 years ago

[info]harisov

3 years ago

[info]harisov

3 years ago

[info]harisov

3 years ago

[info]harisov

3 years ago

[info]harisov

3 years ago

[info]andrewsumin

March 31 2009, 15:26:14 UTC 3 years ago

Вадим, Дима не уточнил задачу у нас много блоков с круглыми краями и они ВСЕ на белом фоне. Имея такую конкретную задачу а не сферического коня в вакууме захотелось создать наиболее короткое решение, а именно скругление блока добавлением одного класса b-round.

Все работает кроме одного браузера ИЕ8.

Принципиальных причин не добавлять дополнительные блоки нет кроме неудобства.

[info]pepelsbey

March 31 2009, 15:29:16 UTC 3 years ago

Гм. Ну, если это узкоспецифичная задача, то можно предположить, что кому-то она тоже пригодится.
В такой же узкоспецифичной ситуации. Я просто воспринял это как универсальное решение, вот и разошёлся. Пардон :)

[info]boba_keyost

March 31 2009, 16:22:23 UTC 3 years ago

Я может ретроград в неадеквате, но before и after для шесого Ишака вообще непонятное мракобесие, а этим чудом люди до сих пор пользуются.

[info]pepelsbey

March 31 2009, 16:26:18 UTC 3 years ago Edited:  March 31 2009, 16:26:53 UTC

SPAN:before {
	content:'\00A0\00B7\00A0\00A0';
	}
/* If less than IE8 */
SPAN {
	x:expression(!this.a?(this.a=1,this.innerHTML='&nbsp;&middot;&nbsp;&nbsp;'+this.innerHTML):0);
	}

[info]harisov

3 years ago

[info]pepelsbey

3 years ago

[info]harisov

3 years ago

[info]pepelsbey

3 years ago

[info]harisov

3 years ago

[info]pepelsbey

3 years ago

[info]harisov

3 years ago

[info]yaker

March 31 2009, 15:02:39 UTC 3 years ago

Уй, пипец какой... Эта вся куча кода — ради каких-то скругленных уголков? Вот скажите мне, граждане, чего в них такого, без чего дизайн невозможен?

[info]x0bbit

March 31 2009, 15:15:36 UTC 3 years ago

Неважно, есть ли в них что-то. Дизайн определяю не я.
И это не куча кода, я вас уверяю =)

[info]roler_x

March 31 2009, 15:15:59 UTC 3 years ago

Эта куча кода всё равно меньше нескольких килобайт, которые занимал бы уголок будучи картинкой)
А тут раз - и симпатичнее)

[info]x0bbit

March 31 2009, 15:19:45 UTC 3 years ago

К сожалению он все таки картинкой. Точнее двумя (по одной на два угла). А вот "раз - и симпатичнее" это была основная цель. Хотелось именно "раз" и уголки круглые

[info]roler_x

3 years ago

[info]yaker

3 years ago

[info]roler_x

3 years ago

[info]sunnyfetis

March 31 2009, 16:47:53 UTC 3 years ago

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

И еще я не понял, у вас выложен код только для ИЕ8? Я не вижу углов ни в Опере, ни в ИЕ6-7.

[info]strixdzen

March 31 2009, 17:26:04 UTC 3 years ago

ну не то, чтобы боян, но вот тут уже года полтора как описано решение 1 блок + 4 скругленных угла: http://www.noinimod.ru/3/

[info]andrewsumin

March 31 2009, 18:03:26 UTC 3 years ago

во очень интересно, спасибо будем пробовать

[info]x0bbit

April 1 2009, 15:08:53 UTC 3 years ago

Отличное решение. Прямо завидую придумавшему.

[info]chupa_spb

April 1 2009, 15:12:54 UTC 3 years ago

Оно кстати не такое отличное. В некоторых случаях (по-моему, когда экспрешшен начинает выполнятся до полной загрузки дома) вешает ИЕ полность.

[info]strixdzen

3 years ago

[info]x0bbit

3 years ago

[info]chupa_spb

March 31 2009, 18:11:32 UTC 3 years ago

А что мешает использовать -ms-behaviour: url(corners.htc) для ИЕ8?
Код внутри внешнего экспрешшена выполняется на отлично.

А еще, кстати, недавно обнаружил, что ФФ не понимает абсолютное позиционирование для картинки вставленной через :after(before)&

[info]andrewsumin

March 31 2009, 18:18:36 UTC 3 years ago

Тоже интересно, поддержку htc они не убрали значит?

[info]chupa_spb

3 years ago

[info]chupa_spb

March 31 2009, 18:44:05 UTC 3 years ago

Вот пример. Работает везде, кроме оперы (лень писать свг, но можно использовать before-after):
http://chuprin.com/sandbox/corners/
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…