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

Cursor: указатель на псевдоэлемент IE

Я реализую кнопку закрытия элемента, содержащего текст с CSS. Кнопка закрытия генерирует контент из псевдоэлемента с помощью content:'X';. Мне нужно, чтобы курсор стал указателем на "X", поэтому я использовал:

cursor:pointer;

Он отлично работает в Chrome и Firefox, но, похоже, он не работает в Internet Explorer (тестирование на IE11 Windows 7).

DEMO (тест в IE)

Я также пробовал с cursor:hand;, но это не решает проблему. Как я могу сделать курсор указателем при наведении "X", но не на текст div?

Соответствующий код:

div{
    font-size:2em;
    position:relative;
    display:inline-block;
}
div::before{
    content:'X';
    cursor:pointer;
    display:block;
    text-align:right;
}
<div>some text</div>
4b9b3361

Ответ 1

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

Это решение позволяет указать указатель на дочерний элемент, а сохранить курсор по умолчанию для родительского элемента.

(см. принятый ответ здесь для решения, которое не включает в себя сохранение указателя родительского элемента по умолчанию: курсор: указатель не работает: после элемента?)

Прежде всего, для этого хакерского решения вы должны отказаться от возможности взаимодействовать с родительским элементом с помощью мыши.

Задайте родительский элемент cursor: pointer.

Затем установка родительского элемента в pointer-events: none позволит вам "щелкнуть/навести" родительский элемент.

Затем, для псевдоэлемента, просто повторно включите события указателя с помощью pointer-events: auto.

Voila!

div{
    font-size:2em;
    position:relative;
    display:inline-block;
    
    /* remove ability to interact with parent element */
    pointer-events: none;

    /* apply pointer cursor to parent element */
    cursor:pointer;

    /* make it more obvious which is child and which parent for example*/
    background: darkred;
}
div::before{
    content:'X';

    display:block;
    text-align:right;

    /* restore ability to interact with child element */
    pointer-events: auto;        

    /* make it more obvious which is child and which parent for example*/
    width: 30px;
    text-align: center;
    background: white;
}
<div>some text</div>

Ответ 2

Я считаю, что он не работает в псевдоэлементах в IE, Что мне нужно сделать, это добавить cursor: ponter в основной элемент.

Если вам нужно добавить cursor: pointer только к псевдоэлементу, то только для добавления дочернего элемента

как:

<div><span></span>some text</div>

div{
   font-size:2em;
   position:relative;
   display:inline-block;
}
div > span{
   cursor:pointer;
}
div > span::before{
   content:'X';
   display:block;
   text-align:right;
}

Но чем не смысл использовать псевдокласс...

демонстрация

Ответ 3

HTML:

 <div>
        <div id="closebutton">
            X
        </div>
        some text
    </div>

CSS

div{
    font-size:2em;
    position:relative;
    display:inline-block;
}
div#closebutton{
    cursor:pointer;
    display:block;
    text-align:right;
}

DEMO

Ответ 4

демо

div{
    font-size:2em;
    position:relative;
    display:inline-block;
    border:1px solid #000;
    margin:20px;
    padding:20px;
}
div:after{
    cursor:pointer;
    display:block;
    position:absolute;
    height:20px;
    width:20px;
    top:-10px;
    right:-10px;
    content:'X';
    font-size:15px;
}
<div>
    some text
</div>

Ответ 5

Чтобы IE 7,8,9,10 вел себя как обычные браузеры, которые могут работать с псевдоселекторами, я всегда использую IE7.js, библиотеку JavaScript, чтобы заставить Microsoft Internet Explorer вести себя как браузер, совместимый со стандартами. Он исправляет многие проблемы HTML и CSS, связанные с Internet Explorer. Альтернативой будет modernizr.js, что является хорошей реализацией для получения псевдоселекторов, работающих с IE. Надеюсь, это поможет.