2011-08-22 26 views
22

tôi trong nhiều năm sử dụng một cái gì đó như thế này trong HTML của tôi cho các yếu tố cần được ẩn:Đúng cách để làm cho các phần tử HTML ban đầu ẩn

<div style="display: none"></div> 

Đó là ok, nhưng tôi không thể đứng kiểu in-line nữa không.

  1. Ẩn các phần tử theo chương trình trong JavaScript window.onload sự kiện quá muộn - nó sẽ nhấp nháy trên màn hình.

  2. Tôi có thể tạo lớp CSS 'ẩn', nhưng với các chiến lược tải tích cực của trình duyệt (như trong Opera), khối có thể xuất hiện trong một giây (trước khi CSS được tải).

Có cách nào tốt hơn không?

+12

Bạn đã tạo một trường hợp tuyệt vời để sử dụng kiểu nội tuyến. – Fosco

+3

Nhưng chúng xấu xí :) – artvolk

+0

Nếu "khối có thể xuất hiện trong một giây (trước khi CSS được tải)" có nghĩa là toàn bộ trang sẽ xuất hiện mà không có bất kỳ kiểu nào. Điều đó thực sự xảy ra trong opera? – Kapep

Trả lời

15

Theo như tôi biết, phương pháp class="hidden" là tốt nhất và thường được sử dụng nhất. Tôi đề nghị bạn sử dụng class="hidden".

"nhưng với chiến lược tải tích cực của trình duyệt (như trong Opera), khối có thể xuất hiện trong một giây (trước khi CSS được tải)."

Tôi không sử dụng Opera, nhưng nếu bất kỳ trình duyệt nào tải trang trước khi áp dụng kiểu thì rất nhiều lỗi, không chỉ các thành phần ẩn của bạn. Tôi không biết bất kỳ trình duyệt nào đang thực hiện việc này.

6

Gần đây tôi đã bắt đầu sử dụng các đối tượng nút và tôi thích phương pháp này ngày càng nhiều. Bằng cách này bạn không phải sử dụng các phần tử HTML ẩn, bạn chỉ cần đặt, ví dụ: một neo:

<a name="some-anchor" id="some-anchor-id" /> 

rồi thay thế bằng nút đã tạo. Bằng cách này bạn sẽ không phải lo lắng về các yếu tố nhấp nháy trên tải, bởi vì sẽ không có bất kỳ.

+0

+1 cho giải pháp tuyệt vời. –

+4

Đây có phải là công cụ tìm kiếm thân thiện không? Nếu bạn chèn tất cả nội dung có thể tìm kiếm của trang web theo cách này, trình thu thập thông tin có thể không tìm thấy nội dung đó. – pimvdb

+0

Có, bạn nói đúng, nhưng sau đó một lần nữa, các công cụ tìm kiếm sẽ chỉ thấy nội dung ban đầu của các khối với 'class =" hidden "'. Nếu bạn có một số nội dung thay đổi động, thì trình thu thập thông tin cũng sẽ không thể truy cập được. –

2

Tùy thuộc vào yếu tố, có thể chấp nhận để tạo và chèn phần tử bằng javascript sau khi trang đã tải (thay vì ẩn sau khi tải trang). Chỉ là một ý nghĩ, mặc dù nó sẽ không làm suy giảm một cách duyên dáng cho người dùng mà không kích hoạt javascript ...

+0

Về sự xuống cấp duyên dáng - tương tự với 'class =" hidden "'. Nếu không có người dùng JS không nhận được bất cứ điều gì. –

+0

@ IgorZinov'yev nhưng sau đó bạn có vô dụng đánh dấu trong HTML của bạn mà không có kinh doanh đang có. Đó là mã chết. – Raynos

+0

Đó là một điểm tốt. Đây là lý do tại sao tôi thường ẩn các yếu tố trên tải trang, vì vậy thông tin có thể tìm kiếm được và có thể truy cập được bằng JS bị tắt. – Dan

1

Nếu bạn chỉ có một trang HTML, những yếu tố đó sẽ được hiển thị?

Các thành phần này được hiển thị cho trình đọc màn hình theo mặc định, điều này không đẹp hay dễ tiếp cận?

Nếu bạn chỉ có trang HTML + CSS, bạn không thể bỏ ẩn các thành phần này, thì không có điểm nào ngoài các thủ thuật SEO mũ đen.

Nếu bạn có trang HTML + CSS + JS thì có giá trị để có chúng.

Chỉ có giá trị khi có chúng khi bạn bật JS. Điều này có nghĩa là họ nên _exist trong javascript

Sử dụng javascript để tạo các yếu tố này và chèn chúng vào DOM.

nếu bạn xây dựng trang web của mình từ đầu bằng HTML, HTML + CSS, HTML + CSS + JS thì bạn sẽ nhận ra chúng thuộc về mã javascript của bạn.Vui lòng đọc thêm về Progressive Enhancement

+0

Cách duy nhất để tạo các phần tử phức tạp Các đoạn HTML trong JS (các phần tử tầm thường không quá phổ biến) là các mẫu máy khách. Bản thân các mẫu thường được đặt trong các khối ẩn :) – artvolk

+0

@artvoik bạn quên DOM. bạn có thể dễ dàng tạo ra các phần tử phức tạp bằng cách sử dụng DOM. – Raynos

+1

Khi tạo các phần tử phức tạp, điều này sẽ được thực hiện trong mã JS, điều này là xấu, bởi vì nó không thể cập nhật được bởi các nhà thiết kế mẫu nữa. – artvolk

1

Bạn có thể xác định lớp học của trang. Nó sạch hơn một chút so với nội tuyến, nhưng bạn sẽ phải có định nghĩa lớp đơn đó trên tất cả các trang. Nhưng sau đó, tôi cũng cố gắng sử dụng một chân trang/đầu trang động đơn lẻ ..

1

Bạn có thể thêm vào kiểu ẩn một vị trí cố định sẽ đưa nó ra khỏi cửa sổ trình duyệt. Điều này có thể là một giải pháp để tránh việc chớp mắt trong Opera.

Ví dụ:

.super_hide{ 
    position:fixed; 
    top:-1000px; /* you would need to know how height the content is or put something huge*/ 
} 

Hy vọng điều này sẽ giúp!

+0

Hầu hết thời gian tôi muốn khối ẩn được hiển thị sau đó ở nơi bị ẩn ... – artvolk

+0

Sau đó bạn có thể xóa lớp nhờ JavaScript, làm như vậy phần tử sẽ xuất hiện được cho là vậy. –

+0

Điều này dường như kích hoạt reflow, tôi không biết nếu điều này sẽ là một vấn đề, chỉ là một suy nghĩ – artvolk

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