Điều nào đúng hơn: <h1> <a>, </a> </ h1> HOẶC <a> <h1> '</ h1> </a>


166

Là cả hai <h1><a ...> ... </a></h1><a ...><h1> ... </h1></a>HTML hợp lệ, hoặc chỉ có một chính xác? Nếu cả hai đều đúng, chúng có khác nhau về nghĩa không?

Câu trả lời:


155

Cả hai phiên bản đều đúng. Sự khác biệt lớn nhất giữa chúng là trong trường hợp <h1><a>..</a></h1>chỉ có văn bản trong tiêu đề sẽ có thể nhấp được.

Nếu bạn đặt thuộc tính <a>xung quanh <h1>và thuộc tính css displayblock(theo mặc định) thì toàn bộ khối (chiều cao <h1>và 100% chiều rộng của vùng chứa <h1>trong đó) sẽ có thể nhấp được.

Về mặt lịch sử, bạn không thể đặt phần tử khối bên trong phần tử nội tuyến, nhưng điều này không còn đúng với HTML5. Tôi sẽ nghĩ rằng <h1><a>..</a></h1>cách tiếp cận là thông thường hơn mặc dù.

Trong trường hợp bạn muốn đặt một neo trên tiêu đề, một cách tiếp cận tốt hơn <a id="my-anchor"><h1>..</h1></a>là sử dụng thuộc tính idhoặc namethuộc tính như thế này: <h1 id="my-anchor">..</h1>hoặc<h1 name="my-anchor">..</h1>


Tham khảo thêm tại đây: stackoverflow.com/questions/6061869/
Ấn

2
<a> <h1> .. </ h1> </a> âm thanh thích hợp hơn cho HTML 5 vì nó mang lại cho người dùng thiết bị cảm ứng một mục tiêu nhấp lớn hơn, phải không?
Acyra

Khi cả một tiêu đề và tiêu đề phụ đều liên kết đến cùng một nội dung, nó sẽ hấp dẫn hơn khi bọc cả hai vào cùng một điểm <a>để chúng có chung trạng thái di chuột: jsfiddle.net/jjyLemq2
Slam

26

Trong HTML 5 trước này

<a><h1>..</h1></a>

sẽ không xác nhận. Bạn có thể sử dụng nó trong HTML 5. Tuy nhiên, tôi sẽ sử dụng điều này:

<h1><a>..</a></h1>

trừ khi bạn cần thêm nhiều hơn <h1> bên trong <a>


8

<a><h1></h1></a>W3C không hợp lệ ... Về cơ bản, bạn không thể đặt các phần tử khối bên trong các phần tử nội tuyến


26
Nó hợp lệ trong HTML 5
vaidas

1
yeap .. nhưng bằng cách nào đó tôi cảm thấy rằng việc đưa yếu tố khối bên trong một liên kết là kinda luộm thuộm (ý kiến cá nhân), như không đóng một thẻ (có giá trị trong HTML5) .. nhưng hey .. có thể nó ảnh hưởng SEO!
pleasedontbelong

7

<h1><a>..</a></h1><a><h1>..</h1></a>luôn luôn cư xử gần như giống nhau, khi các biểu định kiểu không ảnh hưởng đến kết xuất. Hầu như, nhưng không hoàn toàn. Nếu bạn điều hướng bằng cách sử dụng phím tab hoặc tập trung vào một liên kết, một hình chữ nhật tập trung vào hình chữ nhật xuất hiện xung quanh liên kết trong hầu hết các trình duyệt. Đối với <h1><a>..</a></h1>, hình chữ nhật này chỉ xung quanh văn bản liên kết. Đối với <a><h1>..</h1></a>, hình chữ nhật trải dài trên không gian ngang có sẵn, vì việc đánh dấu làm cho aphần tử trở thành một phần tử khối trong kết xuất, chiếm mặc định 100% chiều rộng.

Phần sau đây cho thấy cách <a href=foo><h1>link</h1></a>Chrome được hiển thị tập trung :

nhập mô tả hình ảnh ở đây

Điều này ngụ ý rằng nếu bạn định kiểu các phần tử, ví dụ bằng cách đặt màu nền cho các liên kết, các hiệu ứng sẽ khác nhau theo cách tương tự.

Về mặt lịch sử, <a><h1>..</h1></a>được tuyên bố là không hợp lệ trong HTML 2.0 và các thông số kỹ thuật HTML tiếp theo cũng phù hợp, nhưng HTML5 thay đổi điều này và tuyên bố nó là hợp lệ. Định nghĩa chính thức không ảnh hưởng đến trình duyệt, chỉ có trình xác nhận. Tuy nhiên, có thể từ xa có thể một số tác nhân người dùng (có thể không phải là trình duyệt bình thường, nhưng ví dụ: trình kết xuất HTML chuyên dụng, trình trích xuất dữ liệu, trình chuyển đổi, v.v.) không thể xử lý <a><h1>..</h1></a>đúng, vì nó không được phép trong thông số kỹ thuật.

Ít khi có một lý do chính đáng để tạo một tiêu đề hoặc văn bản trong một tiêu đề một liên kết. (Điều này chủ yếu là phi logic và xấu cho khả năng sử dụng.) Nhưng một câu hỏi tương tự thường được đặt ra khi tạo một tiêu đề (hoặc văn bản trong một tiêu đề) là một đích đến tiềm năng cho một liên kết, sử dụng ví dụ <h2><a name=foo>...</a></h2>so với <a name=foo><h2>...</h2></a>. Các cân nhắc tương tự áp dụng cho điều này (cả hai công việc, có thể có một sự khác biệt vì phần sau làm cho aphần tử trở thành một khối và trước HTML5, chỉ phần trước được cho phép chính thức). Nhưng ngoài ra, cả hai cách đều lỗi thời và việc sử dụng idthuộc tính trực tiếp trên phần tử tiêu đề hiện được khuyến nghị : <h2 id=foo>...</h2>.


8
"There is seldom a good reason to make a heading or text in a heading a link"-> Tôi phải không đồng ý với điều đó. Thực tế có rất nhiều lý do tốt để làm cho một tiêu đề một liên kết. Ví dụ đưa ra: một danh sách các bài đăng trên blog, trong đó mỗi tiêu đề là một liên kết. Hoặc tự kiểm tra SO: tất cả các câu hỏi trên frontpage đều là h3các yếu tố và cũng là một liên kết. Dù sao, giải thích tốt;)
giorgio

@giorgio, ví dụ: các liên kết SO mà bạn đề cập rất tệ cho khả năng sử dụng: tạo một liên kết để tham khảo chính trang đó là vô nghĩa và khó hiểu.
Jukka K. Korpela

1
Vâng, ý tôi là các liên kết SO trên trang chủ, hướng người dùng đến một trang khác, trang câu hỏi cụ thể. Và vâng, liên kết trong tiêu đề trên trang câu hỏi là (không hoàn toàn) vô dụng, nhưng điều đó không nhất thiết là xấu cho sự hữu ích. Lý do chính là SEO mặc dù (trên trang câu hỏi).
giorgio

1
Điều đó loopback h1 SEO là một cái gì đó xấu cho khả năng sử dụng. Tại sao tiêu đề của một trang (h1) lại khiến trình đọc màn hình thông báo một liên kết đến một nơi khác? Nó rất khó hiểu. Và vì lý do tương tự, việc có một liên kết trong các tiêu đề phụ là khó hiểu, khi một cái gì đó được cho là tiêu đề của một phần trong trang và cũng là tiêu đề của một trang khác.
Adam

5

Các phần tử H1 là các phần tử mức khối và các phần tử neo là các phần tử nội tuyến. Bạn được phép có một phần tử nội tuyến trong một phần tử mức khối nhưng không phải là cách khác. Khi bạn xem xét mô hình hộp và đặc tả HTML, điều này có ý nghĩa.

Vì vậy, trong kết luận cách tốt nhất là:

<h1><a href="#">Link</a></h1>

2
"Điều này có ý nghĩa" , bạn nói một cách khó hiểu mà không có bất kỳ lời giải thích nào về lý do, nhưng hành vi của một phần tử cấp khối trong một phần tử nội tuyến được chỉ định . Có các yếu tố cấp khối bên trong các yếu tố nội tuyến chưa bao giờ sai. Hơn nữa, tiêu chuẩn HTML 5 và Tiêu chuẩn sống HTML hoàn toàn tốt với các tiêu đề bên trong các neo. Câu trả lời này đơn giản là sai.
Mark Amery

1

Bạn có muốn sử dụng một siêu liên kết <a href="…">/ a:link, hoặc bạn muốn thêm một neo vào tiêu đề của bạn? nếu bạn muốn thêm một neo, bạn chỉ cần gán id <h1 id="heading">. sau đó bạn có thể liên kết nó như page.htm#heading.

nếu bạn muốn làm cho tiêu đề có thể nhấp (liên kết), trước tiên hãy sử dụng <h1><a></a></h1>/ h1 > a- các phần tử blocklevel và các phần tử nội tuyến bên trong


1

Ngoài ra, có sự khác biệt về thứ bậc phong cách. Nếu bạn có nó <h1><a href="#">Heading here</a></h1>, Các kiểu của neo sẽ ghi đè lên các kiểu của phần tử h1. Thí dụ:

a {color:red;font-size:30px;line-height:30px;}

S OVER QUÁ TUYỆT VỜI

h1 {color:blue;font-size:40px;line-height:40px;}

-1 bởi vì điều này không giải quyết câu hỏi (trong đó đúng hơn).
Đánh dấu Amery
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.