Подтвердить что ты не робот

Эмуляция пограничного радиуса CSS3 и box-shadow в IE7/8

Я работаю над HTML для небольшого веб-приложения; дизайн требует области содержимого с закругленными углами и тени. Я смог создать это с помощью CSS3, и он работает безупречно в Firefox и Chrome:

CSS3 Version

Однако Internet Explorer 7 и 8 (не поддерживающий CSS3) - это другая история:

Internet Explorer Version

Есть ли легкое и легкое решение для JavaScript, которое позволило бы мне: 1) использовать определенные для IE функции для достижения этого или 2) изменить DOM (программно) таким образом, чтобы добавлять пользовательские изображения вокруг области содержимого эмулировать эффект?

4b9b3361

Ответ 1

Это мой метод, я использую условные обозначения для назначения файлов CSS в IE-браузерах.

Скажите, что у вас есть свой div с id #page_container. В вашем обычном файле master.css или css3.css вы должны указать ему ширину, высоту, закругленные углы и тени с стилями.

Теперь, когда IE попадает на вашу страницу, он вытащит условие css, которое вы создали. Для этого же div # page_container вы можете немного изменить ширину, высоту, возможно, некоторое отступление, а затем дать ему фоновое изображение, чтобы оно выглядело как тень с закругленным углом.

Итак, ваша голова будет иметь следующее:

<head>
<link rel="stylesheet" type="text/css" href="master.css" />
<!--[if lte IE 8]> <link rel="stylesheet" type="text/css" href="ie.css" /> <![endif]-->
</head>

В файле master.css у вас будет это определение для вашего основного div:

div#page_container {
  width: 960px;
  height: auto;
  padding: 10px 10px 10px 10px;
  background: #ccc;
  drop-shadow: whatever...
  rounded-corner: whatever...
}

Теперь, в вашем файле ie.css и потому, что он ссылается во второй, определение будет каскадным, так что вы можете немного изменить его:

div#page_container {
  width: 960px;
  height: auto;
  padding: 15px 15px 15px 15px; /* this is key */
  background: #ccc url(/path/to/image.file) no-repeat top left;
}

Добавьте достаточно дополнительного дополнения, чтобы тени с оттенками соответствовали вашему фоновому изображению. Поскольку он каскадирует вниз, он перезапишет оригинальное дополнение 10px, которое у вас было, расширяя модель окна, чтобы вписаться в вашу дополнительную теневую графику.

Пара преимуществ этого метода включает:

  • Только IE увидит это определение и вызов изображения. Если это приложение с большим объемом, это позволит сэкономить на пропускной способности и любых задержках, связанных с вызовом.
  • Точно так же, поскольку в скругленном графике, который будет отображаться каждый браузер, вы не будете жестко кодировать, ваши пользователи Firefox и Safari не будут нуждаться в сервере с дополнительными образами изображений.
  • Не нужно добавлять еще один плагин javascript, который проверяет IE, создает новую разметку, время и т.д.

Ответ 3

Прежде всего, я хотел бы упомянуть, что для этого нет идеального решения до IE9, где будет реализован пограничный радиус CSS.

Вот несколько вариантов, которые вы имеете до этого:

Вы можете использовать один из многих сценариев JS, имитирующих закругленные углы. Но ни один из них не реализует тень должным образом. Вот список скриптов, которые я пробовал, и мои выводы. Все эти сценарии имеют что-то общее, они помещают дополнительные элементы в ваш HTML, чтобы дать вам иллюзию округлых углов.

  • DD Roundies: этот script очень легкий, работает очень хорошо. Он работает без каких-либо фреймворков и отлично работает с jQuery и Prototype (я полагаю, что он хорошо работает с другими, но я не могу точно сказать). Он использует CSS3-приличия в браузерах, которые поддерживают CSS3. И использует тот же взлом, что и все остальные для IE. Антиалиазинг на этом работает очень хорошо. Мне нужно исправить себя. Это работает с файлом HTC. Он не помещает дополнительные элементы в ваш HTML.

  • Curvy Corners и jQuery Плагин Curvy Corners: Мне это нравится. Антиалиазинг работает очень хорошо. И он играет хорошо с фоновыми изображениями. Но с тенями CSS3 он не очень приятен. Он не проверяет, поддерживает ли ваш браузер CSS3 и всегда использует уродливое решение по добавлению элементов в ваш дом.

  • Nifty Corners и jquery Угол: Оба имеют плохой антиалиасинг, и углы выглядят очень острыми. У jQuery углов есть проблемы с обработкой фоновых изображений.

Вот почему ни одно из них не является правильным решением, на мой взгляд:

скрученные углы dom messing screenshot http://meodai.ch/stackoverflow/curvy.png пышный дом беспорядок

nifty dom mess http://meodai.ch/stackoverflow/nifty.png nifty dom mess

Есть несколько других, но я думаю, что они не упоминаются в этом месте.

Как вы можете видеть, они добавляют в ваш дом множество элементов. Это может вызвать проблемы, если вы хотите добавить округленные углы к огромному количеству элементов. Это может привести к сбою некоторых старых браузеров/компьютеров. Для теней это почти такая же проблема. Существует плагин jQuery, который обрабатывает тени на ящиках и шрифтах: http://dropshadow.webvex.limebits.com/

Мой вывод: если я занимаюсь небольшой бюджетной работой, пользователи IE имеют только края и тени. Если у клиента есть деньги, чтобы потратить, я делаю это только с CSS, и я делаю образы для каждого угла. Если они абсолютно должны быть там, но нет времени или денег, чтобы сделать это, я использую один из упомянутых JS скриптов DD_roundies с предпочтением. Теперь это зависит от вас.

PS: пользователи IE используются для уродливых интерфейсов, они не видят, что в любом случае отсутствуют углы и тени: P

Ответ 4

Он был только что выпущен и в бета-версии, но проверьте его: http://css3pie.com/

Ответ 5

Я начал использовать .htc script, найденный здесь: Поддержка CSS3 для Internet Explorer 6, 7 и 8

Это самая простая реализация CSS3 для IE6 +, которую я видел.


.box {
  -moz-border-radius: 15px; /* Firefox */
  -webkit-border-radius: 15px; /* Safari and Chrome */
  border-radius: 15px; /* Opera 10.5+, future browsers, and now also Internet Explorer 6+ using IE-CSS3 */

  -moz-box-shadow: 10px 10px 20px #000; /* Firefox */
  -webkit-box-shadow: 10px 10px 20px #000; /* Safari and Chrome */
  box-shadow: 10px 10px 20px #000; /* Opera 10.5+, future browsers and IE6+ using IE-CSS3 */

  behavior: url(ie-css3.htc); /* This lets IE know to call the script on all elements which get the 'box' class */
}

Ответ 6

Я использую CSS3PIE, который довольно легко реализовать, просто добавьте поведение: url (pie.htc); к тегу css, и вам хорошо идти.. все это для вас, также включает поддержку пограничного изображения, градиентов, box-shadow, rgba и нескольких других... источник: http://css3pie.com/

Ответ 7

для тени в IE:

.shadow {
  background-color: #fff;
  zoom: 1;
  filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=135, Strength=3);
}

для круглых углов используйте DD_roundies, как указано ниже, просто 9Kb - хороший компромисс для раунда угол в секунду!; -)

конечно, для programmatically IE-specific features используйте условные комментарии!; -)

Ответ 8

Чтобы обеспечить изящную деградацию, я уверен, вы должны использовать этот script, называемый CssUserAgent, из http://www.cssuseragent.org/

Ответ 9

Nifty Corners Cube дает хорошие результаты и, как предполагается, будет полностью совместим с IE5.5.

Ответ 10

Существует плагин jquery, который модифицирует DOM для создания закругленных углов. Посмотрите здесь:

http://blue-anvil.com/jquerycurvycorners/test.html

Вот пример страницы, представленной для меня в IE, Chrome и FF. Используя Firebug, вы можете увидеть, что плагин представляет кучу 1px на 1px divs, которые создают эффект.