2009-11-18 22 views
36

Sự khác nhau giữa ba đối tượng này với người dùng trình đọc màn hình là gì?display: none vs visibility: hidden vs text-indent: 9999 Trình đọc màn hình hoạt động như thế nào?

+0

Tôi có một số kinh nghiệm với trình đọc màn hình, mặc dù hạn chế, nhưng tôi sẽ nghĩ rằng họ bỏ qua CSS ... làm người đọc màn hình hiện đại cũng bỏ qua nội dung tạo javascript? – Zoidberg

+0

JAWS (http://www.freedomscientific.com/products/fs/jaws-product-page.asp), trình đọc màn hình phổ biến nhất (http://www.webaim.org/projects/screenreadersurvey2/) không phải là một trình duyệt chuyên dụng, nhưng một ứng dụng làm cho các chương trình khác, chẳng hạn như trình duyệt, có thể truy cập. Tôi không biết chính xác nó hoạt động như thế nào, nhưng tôi đoán nó chỉ là những con heo con trên công cụ dựng hình của trình duyệt để quyết định điều gì cần nói. – mercator

+0

Tại sao bạn muốn một văn bản ẩn được đọc ra ?. Có biết những gì ẩn giấu?Tôi đang cố gắng hiểu ứng dụng của thuộc tính CSS này tốt hơn để bạn biết nên sử dụng ứng dụng nào khi. – user1815356

Trả lời

30

tham khảo: http://css-discuss.incutio.com/?page=ScreenreaderVisibility

display: none: sẽ không được nhìn thấy và cũng không nghe. *
khả năng hiển thị: bị ẩn: sẽ không được nhìn thấy hoặc không nghe thấy. *
thụt lề văn bản: 9999: sẽ không hiển thị nhưng sẽ được nghe thấy.

  • Hầu hết các trình đọc màn hình sẽ không 'nói chuyện' display: nonevisibility: hidden, nhưng có một vài trình đọc màn hình như pwWebSpeak và HtReader mà sẽ đọc ngay cả những quá.
+3

Tôi đã thử nghiệm với đầu đọc màn hình NVDA và nó đọc những yếu tố được ẩn theo hiển thị: không có –

+0

Có một nhận xét tương tự trong liên kết tôi đã chỉ định. RTIMO. –

+0

Khả năng trên không hoạt động với JAWS trong IE –

8

Có một bản tóm tắt rất tốt về cách trình đọc màn hình diễn giải các thuộc tính này tại WebAIM.

Tóm lại, visibility: hiddendisplay:none sẽ ẩn văn bản khỏi trình đọc màn hình giống như văn bản của người khác. Tất cả các phương pháp khác sẽ được hiển thị cho trình đọc màn hình.

+1

Nhưng tôi đã tải xuống phần mềm đọc màn hình NVDA và nó đọc hiển thị: không có nội dung –

+1

Vâng, thật không may, trình đọc màn hình không phù hợp với các trình duyệt được nhìn thấy khi nói đến CSS. Tiêu chuẩn này được mô tả ở trên, nhưng sẽ luôn có một vài tiêu chuẩn bỏ qua. – anschauung

+1

Tôi thấy rằng đầu đọc màn hình NVDA không đọc nội dung 'display: none' nếu nó ở trạng thái đó khi màn hình tải; nhưng nếu javascript được sử dụng để thay đổi trạng thái thành 'display: none' thì trình đọc màn hình không nhận ra và đọc nội dung. –

15

Có giải thích tốt về điều này trong Danh sách ngoài. http://www.alistapart.com/articles/fir/ Nó phụ thuộc vào sản phẩm.

 
PRODUCT       DISPLAY: NONE  VISIBILITY: HIDDEN 
Hal version 5.20    Does not read  Reads 
IBM Home Page Reader 3.02  Does not read  Does not read 
Jaws (4.02, 4.50, 5.0 beta)  Reads    Reads 
OutSpoken 9      Does not read  Does not read 
Window-Eyes 4.2     Does not read  Does not read 
2

Có nội dung ẩn many techniques để ẩn nội dung trực quan nhưng có sẵn cho trình đọc màn hình.

Kỹ thuật H5BP hoạt động trong FF, Webkit, Opera và IE6 +

.visuallyhidden { 
    border: 0; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 
0

Hoàn Answere là ở đây để đảm bảo chrome doesnt hộp autoshow/tự động điền dữ liệu vào. Trên trang web của tôi (Người dùng mới), trường điện thoại và mật khẩu fioeld đã được tự động điền với dữ liệu được lưu trong bộ nhớ cache. Để loại bỏ điều này, tôi đã tạo hai trường giả và cho chúng một lớp khiến chúng vô hình đối với người dùng. Một hàm jquery để hiển thị và sau đó ẩn chúng sau một phần nhỏ.

Jquery chức năng để hiển thị & hide:

$().ready(function() { 
    $(".fake-autofill-fields").show(); 
    // some DOM manipulation/ajax here 
    window.setTimeout(function() { 
     $(".fake-autofill-fields").hide(); 
    }, 1000); 
}); 

Class:

.fake-autofill-fields 
{ 

    border: none; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 

lĩnh vực đầu vào:

<input style="display:none" type="text" class="fake-autofill-fields" name="fakeusernameremembered"/> 
<input style="display:none" type="password" class="fake-autofill-fields" name="fakepasswordremembered"/> 
+0

Các trường nhập: Nitasha

Các vấn đề liên quan