2010-05-30 3 views
32

Я экспериментировал с CSS3 и нашел что-то странное. Heres это часть стиля DIV:Ошибка коробочной тени и границей в Chrome

border:#446429 solid 1px; 
border-radius:15px; 
-moz-border-radius:15px; 
-webkit-border-radius:15px; 
box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset; 
-moz-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset; 
-webkit-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset; 

Rendering в Opera и Firefox такие же, и идеально:

alt text http://i47.tinypic.com/j8egp5.png

Но Chrome делает тень за пределами границы:

alt text http://i45.tinypic.com/5doykw.png

Должно быть, это так, или я пропустил что-то важное?

+3

Я нашел эту ошибку на днях. Мне стало грустно. Меня также огорчает то, что Safari вообще не поддерживает тень вставки. – jessegavin

ответ

27

Похоже, известная ошибка:

http://code.google.com/p/chromium/issues/detail?id=29427

Заканчивать обсуждение ошибок, вы можете найти обходной путь. Определенно Звезда эта ошибка, если вы хотите, чтобы она была исправлена ​​раньше!

+0

Спасибо, надеюсь, что эта ошибка скоро будет исправлена. Он уставился на нее. –

+0

На сегодняшний день он исправлен и доступен в канале dev! (Это будет между 4 и 10 неделями, когда все идет по стабильному каналу) Подробнее: http://paulirish.com/2011/chrome-inset-box-shadow-bug-fixed/ –

+3

Даже если они говорят, что если они исправлены, я все равно получаю проблему: если я установил тень вставки с 1px-размытием и нижний только радиус границы, я получил две уродливые однородные полосы (не размытые) по сторонам элемента. если я изменяю размытие тени даже на один пиксель, они исчезают, а размер этих полос связан с горизонтальным значением нижней тени, а не с вертикальной. Если это означает, что исправлено ... – Bakaburg

0

Попробуйте это -webkit-box-shadow: inset 0px 0 7px rgba (255, 242, 94, 0.4); Использование rgba, похоже, исправить.

Удачи вам!

+0

Не знаю, как в мире это было исправлено для вас. Я использую rgba, и он все еще отображает его за пределами радиуса границы. Только на mac это хорошо. – Ragnar

+0

Кажется, что для меня не работает (6.0.472.55 на Win2k3). –

+0

Извините, исправление не сработало ни для меня, ни для –

3

Единственное обходное решение, которое я видел, - это наложить границу на элемент с тенью и сделать эту границу более широкой, чем диффузия тени. Так для вставки тени, как это:

box-shadow:inset 0 0 7px #000; 

Вы должны были бы добавить границу, как это:

border:solid 7px #fff; 

Это третье число в коробке-теневой декларации, что вам нужно, чтобы соответствовать (или превышать) с шириной границы. если вам не нужна большая жирная старая граница элемента, вам, очевидно, нужно будет сделать границу того же цвета, что и фон за ней. Таким образом, это обходное решение не очень помогает, если ваш элемент находится над узорным изображением или градиентом. Но на твердых цветах он работает прилично.

+0

Спасибо за обходной путь, но ошибка точно по градиенту и шаблону :) –

1

Хорошие новости! Похоже, что исправление проходит. Вот билет в WebKit Bugzilla, обозначенный как разрешенный/исправленный: https://bugs.webkit.org/show_bug.cgi?id=41576

И вот фиксация в багажнике в Trac WebKit! http://trac.webkit.org/changeset/74089

+0

Судя по комментариям Chromium, это ошибка Chrome. Не знаю, будет ли исправление WebKit хорошим для Chrome. –

3

Я только что нашел исправление, но ему нужна дополнительная разметка. Нам нужен элемент места с круглыми углами и внутренней тенью в другой контейнер с тот же круглые углы и переполнение скрыты.

<div class="foo"><div>Hello!</div></div> 
<style type="text/css"> 
    .foo {-webkit-border-radius: 10px; overflow: hidden;} 
    .foo div {-webkit-border-radius: 10px; -webkit-box-shadow: inset 1px 1px rgba(50%, 50%, 50%, .5);} 
</style> 

Объявил выше исправить с границей падает радиус границы и является incompartible с фоновым изображением в рамках элемента (из-за границы цвета).

Спасибо.

+0

Спасибо за ответ, но я полагаю, что это не лучшее решение добавить еще разметку, чтобы скрыть ошибку одного браузера. Кроме того, в webkit произошел значительный прогресс, который, вероятно, приведет к исправлению в ближайшем будущем. –

+0

Один год ушел .. но эта ошибка еще не исправлена). – Tony

0

Использование отрицательных значений решило проблему для меня.

-webkit-border-radius:10px; 
-webkit-box-shadow: -1px -1px 2px #CCC; 
+0

Ваше решение не использует тени * вставки * вставки. Ошибка не отображается для теней без вставки. –

0

Эта ошибка была исправлена ​​в последней канареечной сборке.:)

6

Вставка первой тени вставки, которая имеет тот же цвет, что и фон, кажется, работает очень хорошо, не помещая дополнительную разметку на вашу страницу.

E.g. если у вас есть белый фон страницы:

-webkit-box-shadow:1px 1px 1px #fff inset,0px 0px 5px #333 inset; 
0

решение Бет Fauld едва не работает, есть только небольшая ошибка, она должна выглядеть следующим образом:

-webkit-box-shadow:1px 1px 0px 1px #fff inset, 0px 0px 5px #333 inset; 

Где #fff цвет фона (вне коробки), а # 333 - цвет тени.

Третье значение в -webkit-box-shadow определяет размер размытия, а четвертый определяет теневой (непрозрачный) размер, поэтому последний должен быть установлен в 1px.

Смежные вопросы