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

Ячейка таблицы теряет границу, когда фильтр градиента css применяется в IE8

Я обнаружил, что граница css на ячейке таблицы теряется при одновременном применении фильтра градиента css. Кажется, что эффект градиента переопределяет границу.

Является ли это ошибкой браузера или я что-то пропущу здесь?

Стиль определяется следующим образом:

.c7 {
    color: #000000;
    filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#c0c0c0',EndColorStr='#f0f0f0'); 
    border: #000000 1px solid;
    width: 100px;
    height: 30px;
}

[Обновить] Вы можете применить фильтр непрозрачности и уменьшить его от 100 до 1, и вы можете увидеть, как граница появляется постепенно. Это подтверждает мое предположение, что эффект градиента отображается над границей.

4b9b3361

Ответ 1

Я нашел исправление, но вам может не понравиться...

Если вы выполняете рендеринг в IE в режиме режим quirks, то граница отображается отлично, она скрывается только в том случае, если вы используете режим совместимости. Сравните эти две страницы в IE8:

Также работает щелчок по кнопке просмотра совместимости, но мои попытки получить те же результаты с мета-тегами режима совместимости оказались безуспешными. Я пробовал использовать box-sizing, но также безуспешно. Я заключаю, что единственный способ заставить его работать так, как вы хотите, - заставить IE работать в режиме quirks, но это может создать так много других проблем для макета, что вам может быть лучше, просто добавив элемент оболочки для прикрепления вашего фона градиента.

Ответ 2

Применение этого также работает:

position: relative;
z-index: -1;

Ответ 3

Используйте DIV, чтобы содержать контент в каждой ячейке. Примените градиент к DIV и поместите границу в ячейку. Градиент будет ограничен DIV и не будет перезаписывать границу.

http://jsfiddle.net/WWCaj/1/

Ответ 4

После многих попыток я пришел к выводу, что его просто не стоит использовать фильтр CSS. A цитата из @mdo, которая за загрузочным бутлетом Twitter:

Фильтры опасны в IE, особенно 7 и 8. Я бы предпочел не включать их, потому что это было бы огромными потерями производительности для людей, которые злоупотребляют ими.

Проблемы, которые я ударил, применяя css к элементам td:

  • position: relative работает только для IE9, а не для IE8
  • z-index: -1 не работает с элементами td
  • Если у вас есть фильтр, вам нужно отключить его для зависания
  • Моя таблица выглядела лучше, чем границы, чем градиент на ячейках таблицы.

Ответ 5

позиция использования: относительная! important;

Его работа прекрасна...

Ответ 6

на td:

  /* enough for IE9 */
  background-origin: padding-box;
  background-clip: padding-box;
  /* for IE8 */
  position: relative;

работал у меня.

также вы можете поэкспериментировать с крахом, так как эта ошибка ведет себя по-разному между

  border-collapse: separate 

и

  border-collapse: collapse

Ответ 7

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

 table thead {
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e9e9d9',GradientType=0 );
    -ms-filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e9e9d9',GradientType=0 );
}
table th { 
   background: none;
   border-right: 1px solid #a5a694; 
   background-clip: padding-box;
   position: relative!important; 
   z-index: 100;
}
table th:before {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    content: '';
}

Но если это не сработает, вы также можете добавить границу к псевдо-классу, как я изначально планировал:

table th:before {
    border-right: 1px solid #000000;
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    content: '';
    z-index: 1000;
}

Pseudo класс отличный, я использую их все время, и у них очень широкая поддержка браузера, даже в IE8.