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
Pfff, розкажи мені про це. Б'юся об заклад, це навмисно мене тролює. Дурний IE.
Кайрова

1
У будь-якому випадку, в якій версії IE ви тестуєте, і що це говорить вам про режим документа / режим браузера? Я ніколи не розумів, чому IE вирішує діяти саме так, але, сподіваюся, ці речі дадуть деякі підказки.
BoltClock

1
IE11. Я спробував IE9, IE10 та Edge у режимі документа, на жаль, безрезультатно.
Кайрова

Відповіді:


60

Це відома проблема, але фактично застосовуються стилі. Інструменти розробника вважають, що стилі псевдоелементів замінюються відповідними стилями батьківських елементів. Це легко продемонструвати, перевіривши обчислюваний стиль батьківського елемента та подивившись (що, на думку інструментів 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, я зміг натиснути на властивість і виявити, що вона була замінена. Я замінив фон для го, і піктограми каретки не відображалися для сортування (таблиці даних). Дякую!
Екзіле

Усі ::afterпсевдостилі в моєму коді викреслені в IE11 та Edge. Всі правила дійсно застосовуються :-) Все , крім одного: cursor: pointer. Це для мобільного меню гамбургера, тому я можу відпустити вказівник (оскільки я не сподіваюся на велике зависання при такому розмірі екрана).
Майкл Бенджамін,

@Michael_B Це відома помилка; Я вважаю, що стилі псевдоелементів вважають, що вони суперечать стилям батьківських елементів. Отже, все, що встановлено на псевдоелементі, що також встановлено на батьківському, буде викреслено.
Семпсон

Привіт, так яке рішення? Я використовую IE11 11.321.14393.0 і IE перекриває мій псевдо-клас ...
Hazlo8

42

У мене була така сама проблема! Ви повинні дати своє:before та :afterпсевдоелементи adisplay властивість.

Додайте до :before і :after.

display: block; 

Це має вирішити вашу проблему. :)


1
поділіться тим, які властивості ви встановили на даний момент. Я збираюся здогадуватися, що у вас або не встановлено властивість вмісту, або ви намагаєтесь встановити псевдоелемент для елементів, які не дозволяють використовувати псевдо
Фредді

1
Це виправило справу для мене! Властивості все ще перекреслені в Dev Tools, але елемент зараз відображається належним чином.
Ніккі Ервін Рамірес

Щиро дякую! Спочатку я зробив це, це не допомогло, але потім я помітив, що не встановив залишене майно. Отже, display: block; і зліва: 0; зажив IE!
Макс Курц,

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";

Використання символу Unicode виправило мою проблему. Але однозначно варто зазначити, що стилі псевдоелементів насправді застосовуються в IE11, навіть якщо схоже, що вони викреслені. Прийнята відповідь разом із цією відповіддю допомогла мені це зрозуміти.
самнау

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 після * вхідного тексту (+) і встановіть для його перед вмістом значення * ((перед). * /

input#myTextField + *:before {
       content: "👍";
    } 

Доступна робота з jQuery.
pjain
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.