Các lớp giả CSS với các kiểu nội tuyến


131

Có thể có các lớp giả sử dụng các kiểu nội tuyến không?


Thí dụ:

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a>

Tôi biết HTML ở trên sẽ không hoạt động nhưng có cái gì đó tương tự sẽ không?

PS Tôi biết tôi nên sử dụng một biểu định kiểu bên ngoài, và tôi làm. Tôi chỉ tò mò nếu điều này có thể được thực hiện bằng cách sử dụng phong cách nội tuyến.


Câu trả lời:


113

Không, điều này là không thể. Trong các tài liệu sử dụng CSS, một stylethuộc tính nội tuyến chỉ có thể chứa các khai báo thuộc tính; cùng một tập hợp các câu lệnh xuất hiện trong mỗi bộ quy tắc trong biểu định kiểu. Từ thông số Thuộc tính Kiểu :

Giá trị của thuộc tính style phải khớp với cú pháp của nội dung của khối khai báo CSS (không bao gồm dấu ngoặc phân cách), có ngữ pháp chính thức được đưa ra dưới đây trong các điều khoản và quy ước của ngữ pháp lõi CSS :

declaration-list
  : S* declaration? [ ';' S* declaration? ]*
  ;

Không được phép chọn (bao gồm các phần tử giả), cũng không theo quy tắc, cũng không được phép xây dựng CSS nào khác.

Hãy nghĩ về các kiểu nội tuyến như các kiểu được áp dụng cho một số bộ chọn ID siêu cụ thể ẩn danh: các kiểu đó chỉ áp dụng cho một phần tử đó với stylethuộc tính. (Chúng cũng được ưu tiên hơn so với bộ chọn ID trong biểu định kiểu, nếu phần tử đó có ID đó.) Về mặt kỹ thuật, nó không hoạt động như thế; điều này chỉ để giúp bạn hiểu tại sao thuộc tính không hỗ trợ các kiểu phần tử giả hoặc lớp giả (nó có liên quan nhiều hơn đến cách các lớp giả và các phần tử giả cung cấp sự trừu tượng của cây tài liệu không thể biểu thị trong ngôn ngữ tài liệu).

Lưu ý rằng các kiểu nội tuyến tham gia vào cùng một tầng với các bộ chọn trong các bộ quy tắc và được ưu tiên cao nhất trong các tầng ( !importantmặc dù). Vì vậy, họ được ưu tiên ngay cả trên các tiểu bang giả. Cho phép các lớp giả hoặc bất kỳ bộ chọn nào khác trong các kiểu nội tuyến có thể sẽ đưa ra một mức độ tầng mới và với nó là một loạt các biến chứng mới.

Cũng lưu ý rằng các bản sửa đổi rất cũ của thông số Kiểu Thuộc tính ban đầu đã đề xuất cho phép điều này , tuy nhiên nó đã bị loại bỏ, có lẽ vì lý do nêu trên hoặc vì việc triển khai nó không phải là một lựa chọn khả thi.


45

Không phải CSS, mà là nội tuyến:

<a href="#" 
   onmouseover = "this.style.textDecoration = 'none'"
   onmouseout  = "this.style.textDecoration = 'underline'">Hello</a>

Xem ví dụ →


2
Vâng, tôi đoán đó là một lựa chọn khác. Nó không phải là CSS nhưng nó hoạt động cho: di chuột bằng cách di chuột và rê chuột ,: tập trung sử dụng onf Focus và onblur và: kích hoạt bằng cách sử dụng onclick.
Web_Designer

1
Điều này sẽ được tính là javascript? Tôi có một dự án yêu cầu CSS nội tuyến và không có Javascript.
Aakil Fernandes

7
Vâng, đây là javascript.
Joel Murphy

1
Đây là một lựa chọn tốt. Sử dụng một bảng CSS bên ngoài là trái với nguyên tắc OO (hướng đối tượng). Phong cách của một yếu tố nên được đặt cùng với yếu tố đó.
Evan Hu

1
Một điểm khác cho kiểu nội tuyến là giảm thời gian kết xuất bằng cách sử dụng DOM ảo. Một CSS sẽ cần quét toàn bộ tài liệu để thay đổi và áp dụng các kiểu của nó. Điều này được loại bỏ bởi các phong cách nội tuyến.
Frederik Krautwald

26

Thay vì cần nội tuyến, bạn có thể sử dụng CSS nội bộ

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a>

Bạn có thể có:

<a href="http://www.google.com" id="gLink">Google</a>
<style>
  #gLink:hover {
     text-decoration: none;
  }
</style>

1
Có thể chấp nhận sử dụng css nội bộ bên ngoài phần tử đầu?
Thaina

4
@Thaina Bây giờ, trong HTML5: html5doctor.com/the-scoped-attribution
Ason

2
@Thaina Hài hước, gặp phải một câu hỏi khác khi tôi quyết định làm một việc như vậy và phát hiện ra scopedthuộc tính đã bị xóa khỏi thông số kỹ thuật .... developer.mozilla.org/en/docs/Web/HTML/Euity/style
Ason

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.