2010-08-21 32 views
20

Tôi đang cố gắng để đến với một số phong cách mặc định tốt cho <input> s trong HTML5 và thử như sau:Những yếu tố nào hỗ trợ :: trước và sau phần tử giả?

input::after   { display: inline; } 
input:valid::after { content: ' ✓ '; color: #ddf0dd; } 
input:invalid::after { content: ' ✗ '; color: #f0dddd; } 

Alas, nội dung ::after không bao giờ xuất hiện. Nó không phải là một vấn đề với các dấu hai chấm so với đơn cho các phần tử giả; Tôi đã thử cả hai. Nó cũng không phải là vấn đề với việc có một phần tử giả và một lớp giả; Tôi đã thử nó mà không cần :valid:invalid. Tôi nhận được hành vi tương tự trong Chrome, Safari, và Firefox (Firefox không có :valid:invalid pseudo-lớp học, nhưng tôi đã cố gắng mà không những.)

Các giả thành phần hoạt động tốt trên <div>, <span>, <p><q> yếu tố - một số trong đó là các phần tử khối và một số là nội tuyến.

Vì vậy, câu hỏi của tôi là: tại sao các trình duyệt đồng ý rằng <input> s không có ::after? Tôi không thể tìm thấy bất cứ điều gì trong spec đó sẽ chỉ ra điều này.

+1

Đối với hồ sơ, dấu hai chấm đôi và dấu hai chấm đơn được dự định để phân biệt giả yếu tố và ** pseudo-classes **, bởi vì mọi người đều munging cả trong số họ lại với nhau thành một thuật ngữ chung được gọi là "pseudo-selectors ". – BoltClock

Trả lời

28

Như bạn có thể đọc tại đây http://www.w3.org/TR/CSS21/generate.html,: sau khi chỉ hoạt động trên các phần tử có nội dung (cây tài liệu). <input> không có nội dung, cũng như <img> hoặc <br>.

+1

Sự thật đáng buồn bạn có ở đó. :(Một số điều khá ngọt ngào có thể được thực hiện nếu '', '', và một số yếu tố khác được hỗ trợ. Chẳng hạn như chú giải công cụ hình ảnh với thuộc tính alt, và như vậy, xin cảm ơn, tuy nhiên, –

+0

@Web_Designer đã đồng ý. với '' và bộ chọn sau khi nó ẩn hiển thị đầu vào nhưng hiển thị dấu sao trên đầu vào với: sau khi chọn –

5

Webkit cho phép bạn thực hiện :: sau khi nhập các yếu tố đầu vào. Nếu bạn muốn một cách để làm cho nó hoạt động trong Firefox, bạn có thể thử sử dụng :: sau trên nhãn của đầu vào chứ không phải là đầu vào.

+2

Không chắc chắn nếu điều này đã hoàn nguyên, nhưng ':: sau' trên các phần tử' input' không xuất hiện trong Chrome 21 hoặc Safari 5.1.7 (Windows). http://jsfiddle.net/V8cvQ/13/ – MrWhite

5

Bạn có thể đặt khoảng trước hoặc sau phần tử. Ví dụ:

<style> 
#firstName:invalid+span:before { 
    content: "** Not OK **"; 
    color: red; 
} 
</style> 

<input type="text" name="firstName" id="firstName" placeholder="John" 
    required="required" 
    title="Please enter your first name (e.g. John)" 
    /><span>&nbsp;</span> 
Các vấn đề liên quan