Какая замена дочернему селектору?

Поскольку IE6 не поддерживает дочерний селектор (см. http://kimblim.dk/csstest/#ex1), какова альтернатива при работе с этим браузером?

Я не хочу изменять разметку, и я бы предпочел решение только для CSS ...

И да, это прямой ребенок, на которого я хочу нацелиться.

Спасибо!

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
9
0
8 038
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

$("parent > child").each(function() {
    $(this).addClass("child-styles");
}

Очевидно, вы захотите заключить это в какую-нибудь специализированную проверку только для IE6. И, вероятно, захочется, чтобы таблица стилей была заключена в оператор IE6 IF, чтобы добавить эти специализированные стили.

Вам нужен прямой ребенок? IE6 поддерживает селекторы потомков, например

div span { ... }

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

нет, они имеют в виду «родительский> дочерний», где используются только прямые дочерние элементы, а не все дочерние элементы.

Nick Berardi 12.01.2009 22:40

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

Andrew Hare 12.01.2009 22:41

Помещение настраиваемого класса в элемент.

<ul>
<li class = "first">Blah<li>
<li>Blah<li>
<li>Blah<li>
</ul>

Это исправление проблемы: first-child, а не>.

Sprintstar 22.03.2011 15:28

Можно было бы поместить класс на всех первых дочерних элементов, но тогда будьте осторожны, если у вас есть вложенные списки (что очень вероятно, когда вы беспокоитесь о сопоставлении непрямых дочерних элементов), вы должны использовать другое имя класса для каждого из них. В противном случае ul li.child будет соответствовать обоим, что, вероятно, не предназначено: <ul><li class = "child"> <ul><li class = "child"></li></ul> </li></ul>

Timo Tijhof 14.01.2012 04:22
Ответ принят как подходящий

Я наткнулся на что-то вроде взлома: http://meyerweb.com/eric/gotits/2005/05/31/universal-child-replacement/ Использование хака «звездочка html» для IE (6 и ниже) в сочетании с этим позволяет мне выбрать прямого потомка. Допустим, мы хотим применить padding-top размером 10 пикселей к прямому дочернему элементу F E:

* html body E F
{
    /* apply style here for IE 6 */
    padding-top: 10px;
    /* This applies the style to every F inside of E */
}
* html body E * F
{
    /* undo style here */
    padding-top: 0px;
    /* This will undo the style set above for every F that has something in between itself and E, that is, every F besides the direct children of E */
}

Я действительно ценю ваши ответы, но как бы мне ни не хотелось принимать свой ответ, это было решение, на котором я в конце концов остановился. Спасибо, парни!

К сожалению, этот ответ не идеален. Это работает, но как потомки потомков это тоже может вызвать проблемы ... скажем, у вас есть 3 вложенных div. вы хотите изменить второй div на отступ 20 пикселей, а третий div имеет отступ 5 пикселей. У вас может быть это правило, которое помещает всех остальных дочерних элементов в отступ в 4 пикселя. Но допустим, у вас есть другой div на 7 пикселей ... вы не можете просто вернуть значение чему-то другому. Это может сработать, но вам все равно придется искать непредвиденные последствия ...

Loïc Faure-Lacroix 25.05.2009 18:07

Вот хорошее решение, которое я нашел в книге: «Антология Javascript».

Что-то вроде того:

/* for all but IE */
#nav ul li.currentpage > a:hover {
  background-color: #eff;
}

И код для IE:

/* for IE */
* html #nav ul li.currentpage a:hover {
  background-color: expression(/currentpage/.test(this.parentNode.className)? "#eff" : "#ef0");
}

Уловка для IE заключается в том, что только IE думает, что есть оболочка над html, а IE поддерживает материал expression ().

Выражение использует регулярное выражение (/ currentpage /) и проверяет его на соответствие классу родительского узла, поэтому для прямых потомков элемента li.currentpage будет установлено значение #eff, для остальных потомков будет установлено значение # ef0.

Обратите внимание, что используемые цвета поддельные, не комментируйте их ;-)

К сожалению, выражения CSS больше не поддерживаются в стандартном режиме IE8 ... (blogs.msdn.com/ie/archive/2008/10/16/ending-expressions.asp‌ x)

Ryan Shripat 20.10.2009 20:29

@Ryann: IE8 изначально поддерживает дочерний селектор, поэтому этот IE6-хак, который игнорируется / больше не работает в IE8, не должен быть проблемой.

Timo Tijhof 14.01.2012 04:07

Использовать это

div * { padding-left:20px; }
div * * { padding-left:0; }

Сначала вы нацеливаете всех дочерних элементов, а затем сбрасываете объявление css, ориентируясь на всех внуков.

В этом посте обсуждаются все различные варианты эмуляции дочерних селекторов CSS в IE6, включая небольшой трюк в конце для работы с вложенными структурами: http://craftycode.wordpress.com/2010/05/19/emulating-css-child-selectors-in-ie6/

Я использовал следующее кроссбраузерное решение. Он не использует взломы IE6 и правильно отображает встроенные списки (скажем, вам нужно по-разному стилизовать вложенные элементы OL и UL).

ul, ol {
    /* Set margins, padding, and other generic styles */
}
ul li, ul ul li, ol ul li {
    list-style-type: disc; /* unordered lists */
}
ol li, ul ol li, ol ol li {
    list-style-type: decimal; /* ordered lists */
}

Это так же просто, как yodeling CSS!

Этот ответ не имеет отношения к вопросу. Кроме того, не будет ли "ul {list-style-type: disc;} ol {list-style-type: decimal;}" делать то же самое? Почему весь йодлинг?

Timo Tijhof 14.01.2012 04:11

Другие вопросы по теме