Mặt cười có nghĩa là gì :).


321

Tôi phát hiện mã CSS này trong một dự án:

html, body { :)width: 640px;}

Tôi đã sử dụng CSS từ lâu nhưng tôi chưa bao giờ thấy mã ":)" này trước đây. Nó có nghĩa gì hay chỉ là một lỗi đánh máy?


17
Trông giống như một lỗi đánh máy với tôi. Nhà phát triển đang cố gắng vui vẻ, hoặc có thể là một cách để anh ta đánh dấu các khu vực của mã mà anh ta hoặc cô ta sẽ tìm kiếm?
Lee

2
@stijn vẫn có thể là một số mã cụ thể của nhà cung cấp kỳ lạ ...
Đánh dấu

22
@ series0ne Tôi lấy nó mà bạn chưa bao giờ thấy bản hack dấu hoa thị Internet Explorer.
Nit

11
Nếu đây thực sự là một vụ hack trình duyệt, bạn sẽ muốn thêm một nhận xét trong tệp CSS giải thích điều này.
user247702

32
Tôi đoán: Tác giả mã đã gõ :) nghĩ rằng trọng tâm là máy khách IM. Khi họ không nhấp vào ứng dụng khách IM và tiếp tục từ đó, không bao giờ nhận ra rằng họ đã gõ một nụ cười ở vị trí cuối cùng mà con trỏ của họ đang ngồi, đó là tệp CSS.
Nathan

Câu trả lời:


279

Từ một bài viết tại javascriptkit.com , điều đó được áp dụng cho IE 7 và các phiên bản trước đó:

nếu bạn thêm một ký tự không phải là chữ và số như dấu hoa thị ( *) ngay trước tên thuộc tính, thuộc tính sẽ được áp dụng trong IE chứ không phải trong các trình duyệt khác.

Ngoài ra còn có một bản hack cho <= IE 8 :

div {
  color: blue;      /* All browsers */
  color: purple\9;  /* IE8 and earlier */
 *color: pink;      /* IE7 and earlier */
}

Tuy nhiên đó không phải là một ý tưởng tốt, họ không xác nhận. Bạn luôn cảm thấy thoải mái khi làm việc với các bình luậnđiều kiện để nhắm mục tiêu các phiên bản cụ thể của IE :

<!--[if lte IE 8]><link rel="stylesheet" href="ie-8.css"><![endif]-->
<!--[if lte IE 7]><link rel="stylesheet" href="ie-7.css"><![endif]-->
<!--[if lte IE 6]><link rel="stylesheet" href="ie-6.css"><![endif]-->

Nhưng đối với những người muốn xem hack thực sự, vui lòng mở trang này trong phiên bản IE mới nhất mà bạn có. Sau đó chuyển đến chế độ nhà phát triển bằng cách làm a F12. Trong phần Thi đua ( ctrl+ 8) thay đổi chế độ tài liệu thành 7và xem điều gì sẽ xảy ra.

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

Các tài sản được sử dụng trong trang là :)font-size: 50px;.


2
tôi biết về "_" và "*" trước bộ chọn, nhưng không phải cái này bạn đã nói.
valerio0999

2
@vlrprbttst Đó là những ký tự thông thường được sử dụng cho dễ dàng. Tuy nhiên, nó kết luận tất cả các giá trị không chữ và số.
revo

1
Tôi đánh dấu câu trả lời này là đúng mặc dù salman-a cũng đúng nhưng chậm hơn một chút. Tôi đã biết về vụ hack này nhưng luôn sử dụng "*". Người đã làm trang này là một người thích đùa;).
Đánh dấu

1
Tôi có thể ngu ngốc đến mức bỏ lỡ điều gì đó ở đây, nhưng tại sao anh ta có thể làm điều đó bằng cách sử dụng 2 ký tự? Nó nói "thêm một chữ không chữ", không phải "thêm một hoặc nhiều ...". Hay có :nghĩa là cái gì khác? Nếu không, tôi không thể đặt *********************font-size: "150%";, vv?
Tối đa

1
Chỉ để ném thêm một phần cho câu trả lời này. Câu trả lời là tuyệt vời và chính xác, nhưng thiếu điều này thực tế rằng đây không phải là thực tiễn tốt nhất. Theo nguyên tắc chung, bạn nên cố gắng hết sức để cung cấp trải nghiệm tốt nhất trong tất cả các trình duyệt mà cơ sở người dùng của bạn đang sử dụng. Chưa kể, theo tôi, bạn không nên hỗ trợ các trình duyệt mà công ty đã khiến họ không hỗ trợ nữa.
AlienDev

171

Nó trông giống như một bản hack CSS để nhắm mục tiêu IE7 và các trình duyệt trước đó. Mặc dù đây CSS không hợp lệ và các trình duyệt nên bỏ qua nó, IE7 và trước đó sẽ phân tích và tôn trọng quy tắc này. Dưới đây là một ví dụ về hành động hack này:

CSS

body {
    background: url(background.png);
    :)background: url(why-you-little.png);
}

IE8 (bỏ qua quy tắc)

Ví dụ 1 - IE8

IE7 (áp dụng quy tắc)

Ví dụ 1 - IE7

Lưu ý rằng nó không phải là một khuôn mặt cười; BrowserHacks đề cập:

Mọi sự kết hợp của các ký tự này: [trước tên thuộc tính sẽ hoạt động trên] Internet Explorer 7
! $ & * ( ) = % + @ , . / ` [ ] # ~ ? : < > |


Ví dụ về hot dog GAH là ở đây .


62
Hồi tưởng về hot dog
GAH

Vâng, từ IE8 trở lên, IE tự coi mình là tuân thủ CSS và từng chút một phá vỡ tất cả các bản sửa lỗi css cụ thể của IE. (vì vậy chúng tôi cần phải sử dụng các giải pháp javascript)
Flip Vernooij

39
Tất cả các trang web nên sử dụng chủ đề hot dog cho tất cả người dùng <IE10. +1
Pete TNT

6
@ikkuh Công bằng mà nói, IE11 là một trình duyệt khá tốt và tuân thủ. Có một lý do họ bỏ hỗ trợ cho các bình luận có điều kiện IE trong đó.
ajp15243

2
@ apj15243 Vâng, họ đã đi một chặng đường dài và hy vọng họ sẽ tiếp tục, sự thật là tôi vẫn cần hỗ trợ có điều kiện cho nó, và đó không chỉ là IE11, mà còn 10,9 và 8. Vì vậy, hãy ước tự động- cũng cập nhật, không có lý do gì để không chạy IE11 trên XP ngoài lý do thương mại. Nhưng đó là một cuộc thảo luận khác nhau.
Lật Vernooij
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.