IE вычеркивает псевдоэлемент CSS?

81

Я пытался заставить работать несколько псевдоэлементов в IE, но мне это не позволяло.

Он вычеркивает CSS и действует так, как будто его там нет, что меня отчасти раздражает.

Кто-нибудь знает, что я делаю не так?

.newbutton {
  border-radius: 50%;
  width: 74px;
  height: 74px;
  position: relative;
  background-color: black;
  margin: 60px 0px 25px 17px;
  overflow: visible;
}

.newbutton:before {
  content: "f";
  width: 80px;
  height: 80px;
  position: absolute;
  border-radius: 50%;
  z-index: -1;
  top: 37px;
  left: 37px;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  -webkit-animation-name: fadecolor;
  -webkit-animation-duration: 5s;
  -webkit-animation-iteration-count: infinite;
  animation-name: fadecolor;
  animation-duration: 5s;
  animation-iteration-count: infinite;
}

.newbutton:after {
  content: "";
  width: 80px;
  height: 80px;
  position: absolute;
  border-radius: 50%;
  z-index: -2;
  top: -3px;
  left: -3px;
  background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#01BAE8), to(#0183D5));
}
<div class="starttour">
  <div class="newbutton headerbutton">
    <span class="iconhead icon-02-arrow-icon"></span>
  </div>
  <p>START TOUR</p>
</div>

Скриншот того, что происходит:

Кайрова
источник
11
Как ни странно, он не перечеркивает -webkit-биты.
BoltClock
5
Пффф, расскажи мне об этом. Держу пари, он специально троллит меня. Глупый IE.
Kairowa
1
В любом случае, в какой версии IE вы тестируете и что она говорит вам о режиме документа / режиме браузера? Я никогда толком не понимал, почему IE предпочитает действовать таким образом, но, надеюсь, эти вещи дадут некоторые подсказки.
BoltClock
1
IE11. Я пробовал IE9, IE10 и Edge в режиме документа, к сожалению, безрезультатно.
Kairowa

Ответы:

60

Это известная проблема, но стили фактически применяются. Инструменты разработчика считают, что стили псевдоэлементов замещаются стилями, соответствующими родительским элементам. Это легко продемонстрировать, проверив Computed- стиль родительского элемента и посмотрев (как считают инструменты F12) конкурирующие стили:

введите описание изображения здесь

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

(function () {

    var el = document.querySelector( ".newbutton" );

    [ "", "::before", "::after" ].forEach(function ( e ) {
        // Output: 74px, 80px, 80px
        console.log( window.getComputedStyle( el, e ).height );
    });

}());

Я проверю, есть ли у нас уже внутренняя проблема с отслеживанием этой ошибки, и добавлю к ней этот вопрос. Вообще говоря, мы стараемся уделять таким вопросам количество внимания, пропорциональное количеству горя, которое проблема вызывает в реальном мире. Так что включение вашего вопроса в заявку может помочь нам продвинуться вперед :)

Сампсон
источник
15
Я наблюдаю ту же проблему в IE11, но стили псевдоэлементов не применяются. Даже при отключении предполагаемых родительских переопределений на панели «Вычисленные» стили псевдоэлементов не применяются. Единственная обрабатываемая часть всего блока - это правило содержимого, все остальное игнорируется.
gps03
Войдя в Computed, я смог щелкнуть свойство и обнаружить, что оно переопределяется. Я переопределил фон для th, и значки курсора не отображались для сортировки (Datatables). Благодаря!
Exzile
Все ::afterпсевдостили в моем коде вычеркнуты в IE11 и Edge. Все правила действительно применяются :-) Все , кроме одного: cursor: pointer. Это для мобильного гамбургер-меню, поэтому я могу отпустить указатель (поскольку я не ожидаю, что при таком размере экрана много зависаний).
Майкл Бенджамин
@Michael_B Это известная ошибка; Я считаю, что стили псевдоэлементов думают, что они конфликтуют со стилями родительских элементов. Таким образом, все, что установлено для псевдоэлемента, которое также установлено для родительского элемента, будет вычеркнуто.
Sampson
Привет, каково же решение? Я использую IE11 11.321.14393.0, и IE переопределяет мой псевдокласс ...
Hazlo8
42

У меня была такая же проблема! Вы должны дать свои :beforeи :afterпсевдо элементы в displayсобственность.

Добавьте следующие строки к :beforeи :after.

display: block; 

Это должно решить вашу проблему. :)

Фредди
источник
1
поделитесь, какие свойства вы в настоящее время установили. Я собираюсь предположить, что у вас либо не установлено свойство содержимого, либо вы пытаетесь установить псевдоэлемент для элементов, которые не допускают псевдоэлементов,
Фредди
1
Это исправило проблему для меня! Свойства по-прежнему зачеркнуты в Dev Tools, но теперь элемент отображается правильно.
Никки Эрвин Рамирес
Большое спасибо! Сначала я сделал это, это не помогло, но потом я заметил, что не установил свойство left. Итак, display: block; и осталось: 0; вылечил IE!
Max Kurtz
1
Еще один день, еще один трюк с IE11! Подождите ... это уже 2020 ...
нейротрансмиттер
2

Чтобы добавить к ответу выше. Я попробовал display: block, но моя проблема заключалась в том, что фоновое изображение выходило искаженным. Вместо этого я использовал ниже:

display: inline-block;

Это устранило мою проблему с искаженными изображениями в моем: before: after

Эдмунд Парк
источник
2

Поскольку у меня была такая же проблема с Material Font и IE11, и я не мог решить ее с помощью вышеуказанных решений, я посмотрел дальше:

В документации к значкам материального дизайна упоминается использование

<i class="material-icons">&#xE87C;</i>

для браузеров, не поддерживающих лигатуры. Кодовые точки для каждого элемента перечислены здесь: https://github.com/google/material-design-icons/blob/master/iconfont/codepoints.

Проблема с элементами: after заключается в том, что HTML в contentтеге -Tag отображается как простой текст с символом & # x .., поэтому вы должны использовать \ escape следующим образом:

content:  "\e5c5";
Христианин
источник
Использование символа Юникода устранило мою проблему. Но определенно стоит отметить, что стили псевдоэлементов фактически применяются в IE11, даже если кажется, что они зачеркнуты. Принятый ответ вместе с этим ответом помог мне это увидеть.
samnau
0

У меня была такая же проблема! Вы должны дать родителю псевдоэлемента overflow : visibleсвойство.

Джабикс Аджит
источник
-1

Ознакомьтесь с этой ссылкой " http://stackoverflow.com/questions/2587669/can-i-use-the-after-pseudo-element-on-an-input-field ", как указано в этой ссылке.

: after и: before не поддерживаются в Internet Explorer 7 и ниже ни для каких элементов.

Он также не предназначен для использования с заменяемыми элементами, такими как элементы формы (входы) и элементы изображения.

Другими словами, это невозможно с чистым CSS.

/ * * Уловка здесь: * этот селектор говорит: «возьмите первый элемент dom после * введенного текста (+) и установите его перед содержимым в * значение (: before). * /

input#myTextField + *:before {
       content: "👍";
    } 
pjain
источник
Доступна работа с jQuery.
pjain