Cách viết: điều kiện di chuột cho a: trước và a: sau?


Câu trả lời:


488

Điều này phụ thuộc vào những gì bạn đang thực sự cố gắng làm.

Nếu bạn chỉ đơn giản muốn áp dụng các kiểu cho :beforephần tử giả khi aphần tử khớp với lớp giả, bạn cần phải viết a:hover:beforehoặc a:visited:beforethay vào đó. Lưu ý phần tử giả xuất hiện sau lớp giả (và trên thực tế, ở phần cuối của toàn bộ bộ chọn). Cũng lưu ý rằng chúng là hai thứ khác nhau; gọi cả hai "bộ chọn giả" sẽ làm bạn bối rối khi bạn gặp phải các vấn đề cú pháp như cái này.

Nếu bạn đang viết CSS3, bạn có thể biểu thị một phần tử giả bằng dấu hai chấm để làm cho sự khác biệt này rõ ràng hơn. Do đó, a:hover::beforea:visited::before. Nhưng nếu bạn đang phát triển cho các trình duyệt cũ như IE8 trở lên, thì bạn có thể thoát khỏi việc sử dụng các dấu hai chấm duy nhất.

Thứ tự cụ thể này của các lớp giả và các phần tử giả được nêu trong thông số kỹ thuật :

Một phần tử giả có thể được thêm vào chuỗi cuối cùng của các bộ chọn đơn giản trong bộ chọn.

Một chuỗi các bộ chọn đơn giản là một chuỗi các bộ chọn đơn giản không được phân tách bằng bộ kết hợp. Nó luôn bắt đầu với một bộ chọn loại hoặc bộ chọn phổ quát. Không có bộ chọn loại hoặc bộ chọn phổ quát nào được phép trong chuỗi.

Một selector đơn giản là một trong hai loại selector, chọn phổ quát, chọn thuộc tính, chọn lớp, chọn ID, hoặc pseudo-class.

Một lớp giả là một bộ chọn đơn giản. Tuy nhiên, một phần tử giả thì không, mặc dù nó giống với bộ chọn đơn giản.

Tuy nhiên, đối với người sử dụng hành động giả các lớp học như :hover1 , nếu bạn cần hiệu ứng này để áp dụng chỉ khi tương tác người dùng với pseudo-yếu tố bản thân nhưng không phải là ayếu tố, thì đây là không thể khác hơn là thông qua một số cách giải quyết bố trí phụ thuộc vào che khuất . Theo ngụ ý của văn bản, các phần tử giả CSS tiêu chuẩn hiện không thể có các lớp giả. Trong trường hợp đó, bạn sẽ cần áp dụng :hovercho một phần tử con thực tế thay vì phần tử giả.


1 Tất nhiên, điều này không áp dụng cho các lớp giả liên kết, chẳng hạn :visitednhư trong câu hỏi, vì các phần tử giả không liên kết.


27
Cần chỉ ra rằng việc đặt di chuột lên phần tử cha mẹ - điều này khiến cho việc trang trí được áp dụng ngay cả khi :: sau giả không nằm dưới chuột, miễn là cha mẹ của nó.
Samoody

6
Cũng cần phải lưu ý rằng có một số điều mà không đáp ứng với điều này vì cách các quy tắc bố trí được quy định - ví dụ text-decoration.
Chris Krycho

1
@Chris Krycho: Thật vậy - Tôi thực sự có một lời giải thích cho vấn đề cụ thể này liên quan đến các yếu tố giả ở đây . Tất nhiên, điều đáng làm rõ là bản thân vấn đề không có mối liên hệ nào với các bộ chọn phần tử giả / lớp giả , nhưng như bạn đã chỉ ra, một vấn đề về bố cục.
BoltClock

@BoltClock Tôi upvoted câu trả lời mà rất lâu sau khi tôi rời khỏi nhận xét này. Huzzah.
Chris Krycho

2
Sinlge dấu hai chấm (:) chỉ định các lớp giả và dấu hai chấm (: :) chỉ định các phần tử giả. Vì vậy, nó phải là: hover :: trước
mikkelbreum

107

Viết a:hover::beforethay vì a::before:hover: ví dụ .


2
@mikkelbreum bạn có tham khảo để chứng minh điều đó không?
shea

3
@bungeshea: Đó là cú pháp CSS3. Xem các bình luận dưới câu trả lời của tôi (cũng như chỉnh sửa gần đây của tôi). Mặc dù có một chút không chính xác khi gọi nó là "cú pháp" chính xác bởi vì cả hai dấu hai chấm đơn và kép đều được phép cho các phần tử giả CSS1 / 2. Tôi sẽ gọi nó là cú pháp được đề xuất thay thế, bởi vì lý do duy nhất để tiếp tục sử dụng cú pháp cũ ngày hôm nay là để hỗ trợ IE8 trở lên.
BoltClock

@mikkelbreum @shablesunge thêm thông tin về CSS2 :aftervs CSS3 ::after developer.mozilla.org/en-US/docs/Web/CSS/::fter (đơn :có hỗ trợ tốt hơn)
travis

nó không hoạt động cho gạch chân :( jsfiddle.net/por817owski/u5dhthvq Vui lòng thêm cũng hiển thị: inline-block; jsfiddle.net/por817owski/u89fo4oq
plusz

7

Để thay đổi văn bản liên kết menu trên di chuột. (Văn bản ngôn ngữ khác nhau khi di chuột) ở đây là

ví dụ jsfiddle

html:

<a align="center" href="#"><span>kannada</span></a>

css:

span {
    font-size:12px;
}
a {
    color:green;
}
a:hover span {
    display:none;
}
a:hover:before {
    color:red;
    font-size:24px;
    content:"ಕನ್ನಡ";
}

1
Đây là một câu trả lời đáng yêu. Trên thực tế, nó đã truyền cảm hứng cho tôi để mở rộng câu đố của bạn một chút bằng cách tăng kích thước phông chữ của văn bản span thành 24px để khớp với văn bản thay thế, thêm 3 khoảng trắng không phá vỡ trước và sau văn bản thay thế để chúng chiếm cùng chiều rộng và được tạo kiểu a:hover::beforevới text-decoration: underline, làm cho phần gạch chân nhận màu đỏ của văn bản thay thế.
Dave Land

4

Cố gắng sử dụng .card-listing:hover::after hoveraftersử dụng ::nó sẽ làm việc


1

Câu trả lời của BoltClock là chính xác. Điều duy nhất tôi muốn nối thêm là nếu bạn muốn chỉ chọn phần tử giả, hãy đặt trong một khoảng.

Ví dụ:

<li><span data-icon='u'></span> List Element </li>

thay vì:

<li> data-icon='u' List Element</li>

Bằng cách này bạn có thể nói một cách đơn giản

ul [data-icon]:hover::before {color: #f7f7f7;}

sẽ chỉ làm nổi bật phần tử giả, không phải toàn bộ phần tử li


-2

Bạn cũng có thể giới hạn hành động của mình chỉ một lớp bằng cách sử dụng dấu ngoặc nhọn bên phải (">"), như tôi đã làm trong mã này:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    span {
    font-size:12px;
    }
    a {
        color:green;
    }
    .test1>a:hover span {
        display:none;
    }
    .test1>a:hover:before {
        color:red;
        content:"Apple";
    }
  </style>
</head>

<body>
  <div class="test1">
    <a href="#"><span>Google</span></a>
  </div>
  <div class="test2">
    <a href="#"><span>Apple</span></a>
  </div>
</body>

</html>

Lưu ý: Di chuột: trước khi chuyển đổi chỉ hoạt động trên lớp .test1

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.