: пустая проблема псевдокласса с добавленным / удаленным контентом и братскими комбинаторами
Я пытаюсь установить стиль для<div>
после пустого<ul>
.
Это простой код, который я сейчас тестирую: (ОС win7)
Базовый jsFiddle DEMOHTML:
<button class="btnAdd">add new LI</button>
<button class="btnRemove">remove last LI</button>
<ul></ul>
<div>Should be red if UL is empty</div>
CSS:
ul:empty + div {
color:red;
}
JQuery: (не относится к проблеме, только для целей тестирования)
$('.btnAdd').on('click', function () {
$('ul').append('<li>LI</li>');
});
$('.btnRemove').on('click', function () {
$('ul').find('li').last().remove();
});
Ожидаемое поведение:
Во всех основных браузерах при добавлении элемента в<ul>
, стиль установлен для пустого<ul>
следующий<div>
не должен применяться При удалении всего<li>
, стиль должен быть применен к целевой<div>
.
Текущее поведение:
Fire Fox справится с этим без проблем, получи ожидаемый результат.Хром удаляет красный цвет для последующего DIV, когда UL больше не пуст, но не применяет его повторно, когда UL снова пуст (удаляя все LI из UL)IE10 / 11 просто примените CSS:empty
псевдокласс как по умолчанию, не реагирует ни на какой добавленный или удаленный контентПогуглив, я нашел некоторые обходные пути, но большинство из них устарели, и здесь нет ни одной проблемы, ни одной, по крайней мере, я не могу найти.
Что касается Chrome, я обнаружил, что установка правила CSS:empty
для UL это исправляет, нона самом деле я не знаю, что происходит: ul:empty {}
(да, это пустое правило CSS ?!)<- Я думаю, теперь это заставляет перерисовывать пользовательский интерфейс на Chrome ?!
К сожалению, это не исправляет поведение в IE10 / 11.
Так что кто-нибудь знает способ заставить его работать на всех основных браузерах ???ОБНОВЛЕНИЕ 1:
Похоже, ошибка связана с выбором следующего брата+
, даже используя~
не дает последовательного результата на хром. Но если применить стиль непосредственно к:empty
element, все работает корректно во всех браузерах:http://jsfiddle.net/EyEa7/ Но моя цель здесь состоит в том, чтобы нацелить элемент родного брата:empty
элемент, а не пустой элемент напрямую.
ОБНОВЛЕНИЕ 2:
Принудительное перерисовывание пользовательского интерфейса исправляет его во всех браузерах, например, используя$('body').hide().show(0);
после обновления контента:Посмотрите ДЕМО принудительно перерисовать
Но я был бы очень признателен за исправление, не включающее JavaScript-код.
Вопрос теперь может быть:
Как я могу заставить IE10 / 11 перекрашивать пользовательский интерфейс, используя только CSS? (надеясь, что это актуальный вопрос по этому вопросу)