IE gạch bỏ CSS phần tử giả?


81

Tôi đã cố gắng để một vài phần tử giả hoạt động trên IE, nhưng nó không cho phép tôi.

Nó gạch bỏ CSS và hoạt động như thể nó không có ở đó, điều này khiến tôi khó chịu.

Có ai biết tôi đang làm gì sai không?

.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>

Ảnh chụp màn hình những gì xảy ra:


11
Thật thú vị, nó không gạch bỏ các -webkit-bit.
BoltClock

5
Pfff, nói cho tôi biết về nó. Tôi cá là có mục đích troll tôi. IE ngu ngốc.
Kairowa

1
Dù sao, bạn đang thử nghiệm phiên bản IE nào, và nó cho bạn biết gì về chế độ tài liệu / chế độ trình duyệt? Tôi chưa bao giờ thực sự hiểu tại sao IE chọn hành động theo cách này nhưng hy vọng những điều đó sẽ cung cấp một số manh mối.
BoltClock

1
IE11. Tôi đã thử IE9, IE10 và Edge ở chế độ tài liệu, rất tiếc.
Kairowa

Câu trả lời:


60

Đây là một vấn đề đã biết, nhưng trên thực tế, các phong cách đang được áp dụng. Các công cụ dành cho nhà phát triển cho rằng các kiểu phần tử giả đang bị ghi đè bởi các kiểu tương ứng của phần tử gốc. Điều này dễ dàng được chứng minh bằng cách kiểm tra Kiểu tính toán của phần tử gốc và xem xét (những gì các công cụ F12 tin là) các kiểu cạnh tranh:

nhập mô tả hình ảnh ở đây

Tuy nhiên, một lần nữa, những phong cách này trên thực tế đang được áp dụng cho các yếu tố chính xác - bất kể những gì các công cụ dành cho nhà phát triển tin tưởng hoặc đề xuất. Bạn có thể xác nhận điều này bằng cách chạy qua phần tử gốc và hai phần tử giả và ghi lại chiều cao đã tính của chúng:

(function () {

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

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

}());

Tôi sẽ kiểm tra xem liệu chúng tôi đã có vấn đề nội bộ theo dõi lỗi này chưa và thêm câu hỏi này vào đó. Nói chung, chúng tôi cố gắng cung cấp cho các vấn đề như thế này lượng sự chú ý tương ứng với mức độ đau buồn mà vấn đề đang gây ra trong thế giới thực. Vì vậy, việc có câu hỏi của bạn dưới dạng một bổ sung mới trên vé có thể giúp chúng tôi tiến hành sửa chữa :)


15
Tôi gặp vấn đề tương tự trong IE11 nhưng kiểu phần tử giả không được áp dụng. Ngay cả khi tắt ghi đè gốc giả định trong bảng Tính toán, các kiểu phần tử giả không được áp dụng. Phần duy nhất của toàn bộ khối được hiển thị là quy tắc nội dung, mọi thứ khác đều bị bỏ qua.
gps03

Đi vào Máy tính, tôi có thể nhấp vào một thuộc tính và thấy rằng nó đang được ghi đè. Tôi đã ghi đè nền cho một thứ và các biểu tượng dấu mũ không hiển thị để sắp xếp (Datatables). Cảm ơn!
Exzile,

Tất cả các ::afterkiểu giả trong mã của tôi đều bị gạch bỏ trong IE11 và Edge. Tất cả các quy tắc thực sự đang được áp dụng :-) Tất cả nhưng một: cursor: pointer. Nó dành cho menu bánh hamburger di động, vì vậy tôi có thể để con trỏ đi (vì tôi không mong đợi nhiều khi di chuột ở kích thước màn hình đó).
Michael Benjamin

@Michael_B Đó là một lỗi đã biết; Tôi tin rằng các kiểu phần tử giả cho rằng chúng xung đột với các kiểu phần tử mẹ. Vì vậy, bất kỳ thứ gì được đặt trên phần tử giả, cũng được đặt trên phần tử gốc, sẽ bị gạch bỏ.
Sampson

Xin chào, vậy giải pháp là gì? Tôi đang sử dụng IE11 11.321.14393.0 và IE ghi đè lên lớp giả của tôi ...
Hazlo8

42

Tôi đã có cùng một vấn đề này! Bạn phải cung cấp cho các phần tử giả :beforevà của bạn :aftermột thuộc displaytính.

Thêm phần sau vào :before:after.

display: block; 

Điều này sẽ khắc phục sự cố của bạn. :)


1
chia sẻ những thuộc tính bạn hiện đã đặt. Tôi sẽ đoán bạn hoặc dont có các thiết lập sở hữu nội dung hoặc bạn đang cố gắng để thiết lập một yếu tố giả trên các yếu tố mà dont cho phép pseudos
Freddie

1
Điều này đã sửa chữa điều này cho tôi! Các thuộc tính vẫn bị gạch bỏ trong Công cụ dành cho nhà phát triển, nhưng phần tử này hiện đã xuất hiện bình thường.
Nikki Erwin Ramirez

Cảm ơn rất nhiều! Đầu tiên tôi đã làm điều này, nó không giúp ích gì, nhưng sau đó tôi nhận thấy rằng tôi đã không đặt tài sản bên trái. Vì vậy, display: block; và trái: 0; đã chữa lành IE lên!
Max Kurtz

1
Một ngày khác, một thủ thuật IE11 khác! Chờ đã ... đã đến năm 2020 rồi ...
Neurotransmitter

2

Để thêm vào câu trả lời ở trên. Tôi đã thử display: block nhưng vấn đề của tôi là hình nền bị cong vênh. Thay vào đó, tôi đã sử dụng bên dưới:

display: inline-block;

Điều này đã khắc phục sự cố của tôi với hình ảnh bị cong vênh trong: before: after


2

Vì tôi gặp vấn đề tương tự với Material Font và IE11 và không thể giải quyết nó bằng các giải pháp trên, tôi đã xem xét thêm:

Tài liệu về các biểu tượng material design đề cập đến việc sử dụng

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

cho các trình duyệt không hỗ trợ chữ ghép. Điểm mã cho từng mục được liệt kê tại đây: https://github.com/google/material-design-icons/blob/master/iconfont/codepoints

Vấn đề với: sau các phần tử là HTML trong thẻ content-Tag được hiển thị dưới dạng văn bản thuần túy hiển thị & # x .. vì vậy bạn phải sử dụng \ Escape như sau:

content:  "\e5c5";

Sử dụng ký tự unicode đã khắc phục sự cố của tôi. Nhưng điều đáng chú ý là các kiểu phần tử giả thực sự được áp dụng trong IE11 ngay cả khi có vẻ như chúng bị gạch bỏ. Câu trả lời được chấp nhận cùng với câu trả lời này đã giúp tôi thấy được điều đó.
samnau

0

Tôi đã có cùng một vấn đề này! Bạn phải cung cấp cho cha mẹ của phần tử giả một thuộc overflow : visibletính.


-1

Hãy xem liên kết này " http://stackoverflow.com/questions/2587669/can-i-use-the- After-pseudo-element-on-an-input-field ", như được trích dẫn từ liên kết này

: after và: before không được hỗ trợ trong Internet Explorer 7 trở xuống, trên bất kỳ phần tử nào.

Nó cũng không có nghĩa là được sử dụng trên các phần tử được thay thế như phần tử hình thức (đầu vào) và phần tử hình ảnh.

Nói cách khác, điều đó là không thể với CSS thuần túy.

/ * * Mẹo ở đây: * bộ chọn này nói "lấy phần tử dom đầu tiên sau * văn bản đầu vào (+) và đặt nội dung trước của nó thành giá trị * (: trước). * /

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

Làm việc xung quanh với jQuery có sẵn.
pjain
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.