Hangisi daha doğru: <h1> <a>… </a> </h1> VEYA <a> <h1>… </h1> </a>


166

Her iki Are <h1><a ...> ... </a></h1>ve <a ...><h1> ... </h1></a>geçerli HTML veya sadece bir doğrudur? Eğer ikisi de doğruysa, anlam bakımından farklı mıdır?

Yanıtlar:


155

Her iki sürüm de doğrudur. Aralarındaki en büyük fark, <h1><a>..</a></h1>sadece başlıktaki metnin tıklanabilir olması.

<a>Etrafına koyarsanız <h1>ve css displayözelliği block(varsayılan olarak budur), tüm blok ( <h1>içinde bulunan kabın genişliğinin yüksekliği ve% 100'ü <h1>) tıklanabilir olacaktır.

Tarihsel olarak bir satır öğesini bir satır içi öğenin içine koyamazdınız, ancak artık HTML5 için geçerli değildir. <h1><a>..</a></h1>Yine de yaklaşımın daha geleneksel olduğunu düşünüyorum .

Başlığa bir çapa koymak istediğinizde <a id="my-anchor"><h1>..</h1></a>, idya da nameniteliğini şu şekilde kullanmaktan daha iyi bir yaklaşım : <h1 id="my-anchor">..</h1>veya<h1 name="my-anchor">..</h1>


Daha fazla referans burada: stackoverflow.com/questions/6061869/…
thdoan

2
<a> <h1> .. </h1> </a>, dokunmatik cihaz kullanıcılarına daha büyük bir tıklama hedefi verdiği için HTML 5 için tercih edilen ses, değil mi?
Acyra

Bir başlık ve alt başlık her ikisi de aynı içeriğe bağlantı verdiğinde, <a>bir gezinme durumunu paylaşmaları için her ikisini de aynı şekilde sarmak görsel olarak daha caziptir : jsfiddle.net/jjyLemq2
Slam

26

HTML 5 öncesi bu

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

doğrulanmayacak. HTML 5'te kullanabilirsiniz. Ancak, ben bunu kullanacağım:

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

<a> içine <h1> değerinden fazla eklemeniz gerekmedikçe



7

<h1><a>..</a></h1>ve <a><h1>..</h1></a>stil sayfaları oluşturmayı etkilemediğinde neredeyse aynı şekilde davrandılar. Neredeyse ama tam olarak değil. Sekme tuşunu kullanarak gezinir veya bir bağlantıya başka bir şekilde odaklanırsanız, çoğu tarayıcıda bağlantının etrafında bir "odaklama dikdörtgeni" görünür. Çünkü <h1><a>..</a></h1>, bu dikdörtgen yalnızca bağlantı metninin etrafındadır. İçin <a><h1>..</h1></a>biçimlendirme yaptığı için, dikdörtgen, mevcut yatay boşluk boyunca uzanan aeleman oluşturma bir blok elemanı varsayılan% 100 genişliği işgal.

Aşağıda, odaklanmanın <a href=foo><h1>link</h1></a>Chrome tarafından nasıl oluşturulduğu gösterilmektedir :

resim açıklamasını buraya girin

Bu, örneğin stilleri bağlantılar için bir arka plan rengi ayarlayarak şekillendirirseniz, efektlerin benzer şekilde farklı olduğu anlamına gelir.

Tarihsel olarak, <a><h1>..</h1></a>HTML 2.0'da geçersiz ilan edildi ve sonraki HTML özellikleri bunu izledi, ancak HTML5 bunu değiştirdi ve geçerli olarak ilan etti. Resmi tanım tarayıcıları etkilemedi, sadece doğrulayıcıları etkiledi. Bununla birlikte, bazı kullanıcı aracılarının (muhtemelen normal tarayıcılar değil, örneğin özel HTML oluşturucular, veri çıkarıcılar, dönüştürücüler, vb.) <a><h1>..</h1></a>Spesifikasyonlarda izin verilmediği için düzgün işlememesi uzaktan mümkündür .

Bir başlıkta başlık veya metin oluşturmak için nadiren iyi bir neden vardır. (O. Kullanılabilirlik çoğunlukla mantıksız ve kötü) Ama (bir başlık veya metin) bir başlık potansiyel yaparken benzer bir soru sıklıkla ortaya çıkmış hedefi örneğin kullanarak bir bağlantı için <h2><a name=foo>...</a></h2>karşı <a name=foo><h2>...</h2></a>. Benzer düşünceler bunun için de geçerlidir (her ikisi de işe yarar, bir fark olabilir, çünkü ikincisi aöğeyi bir blok yapar ve HTML5'ten önce yalnızca öncekine resmi olarak izin verilir). Ancak ek olarak, her iki türde modası geçmiş olan ve kullanan idbaşlık elemanı doğrudan özelliğini şimdi önerilir: <h2 id=foo>...</h2>.


8
"There is seldom a good reason to make a heading or text in a heading a link"-> Buna katılmıyorum. Bir bağlantıyı yönlendirmek için aslında çok iyi nedenler var. Verilen örnek: her başlığın da bir bağlantı olduğu blog yayınlarının bir listesi. Ya da SO'nun kendisini kontrol edin: ön sayfadaki tüm sorular h3öğeler ve bir bağlantıdır. Neyse, iyi bir açıklama;)
giorgio

@giorgio, örneğin bahsettiğiniz SO bağlantıları kullanılabilirlik açısından kötüdür: sayfanın kendisine yönlendirmek için bir bağlantı oluşturmak anlamsız ve kafa karıştırıcıdır.
Jukka K. Korpela

1
Yani, ana sayfada, kullanıcıyı başka bir sayfaya, özellikle soru sayfasına yönlendiren SO linklerini kastediyorum. Ve evet, soru sayfasındaki başlıktaki bağlantı (tamamen değil) işe yaramaz, ancak bu kullanılabilirlik için mutlaka kötü değildir. Ana nedeni SEO olsa (soru sayfasında).
giorgio

1
Bu geri döngü h1 SEO şey kullanılabilirlik için kötü bir şey. Bir sayfanın başlığı (h1) neden bir ekran okuyucunun başka bir yere bağlantıyı duyurmasını sağladı? Çok kafa karıştırıcı. Aynı nedenden ötürü, alt başlıklarda bir bağlantıya sahip olmak, bir şey sözde sayfadaki bir bölümün başlığı ve aynı zamanda başka bir sayfanın başlığı olduğunda kafa karıştırıcıdır.
Adam

5

H1 elemanları blok seviyeli elemanlardır ve ankrajlar satır içi elemanlardır. Bir blok düzeyi öğesinde satır içi öğeye sahip olmanıza izin verilir, ancak bunun tersi olmaz. Kutu modelini ve HTML spesifikasyonunu düşündüğünüzde bu mantıklıdır.

Sonuç olarak en iyi yol:

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

2
"Bu mantıklıdır" , nedenini açıklamadan şifreli olarak söylersiniz, ancak satır düzeyinde bir öğenin içindeki blok düzeyindeki bir öğenin davranışı belirtilir . Satır içi öğelerin içinde blok düzeyinde öğelere sahip olmak hiçbir zaman yanlış olmamıştır. Dahası, HTML 5 spesifikasyonu ve HTML Living Standard, başlıkların içinde başlıklara sahip olma konusunda tamamen iyidir. Bu cevap basitçe yanlış.
Mark Amery

1

köprü <a href="…">/ kullanmak a:linkistiyor musunuz, yoksa başlığınıza çapa mı eklemek istiyorsunuz? bir çapa eklemek istiyorsanız, sadece bir kimlik atayabilirsiniz <h1 id="heading">. daha sonra olarak bağlayabilirsiniz page.htm#heading.

başlığı tıklanabilir (bağlantı) yapmak istiyorsanız, önce <h1><a></a></h1>/ h1 > a- blocklevel öğelerini ve içindeki satır içi öğeleri kullanın


1

Ayrıca, stil hiyerarşisi farklılıkları vardır. Varsa <h1><a href="#">Heading here</a></h1>, çapanın stilleri h1 öğesinin stillerini geçersiz kılacaktır. Misal:

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

AŞIRI GELECEK

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

-1 çünkü bu soruya (daha doğru olan) hiç değinmiyor.
Mark Amery
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.