<a> (bağlantı etiketi) href niteliği olmadan kullanmak geçerli mi?


161

Bir site oluşturmak için Twitter Bootstrap kullanıyorum ve işlevselliğinin çoğu, <a>Javascript'i çalıştıracak olsalar bile, bir şeyleri sarmalamaya bağlı . href="#"Bootstrap belgelerinin önerdiği taktikle ilgili sorunlar yaşadım , bu yüzden farklı bir çözüm bulmaya çalışıyordum.

Ama sonra hrefözelliği tamamen kaldırmayı denedim . Ben kullanıyorum <a class='bunch of classes' data-whatever='data'>ve gerisini Javascript hallediyor. Ve çalışıyor.

Yine de bir şey bana bunu yapmamamı söylüyor. Sağ? Demek istediğim, teknik <a>olarak bir şeye bağlantı olması gerekiyor, ama bunun neden bir sorun olduğundan tam olarak emin değilim . Yoksa öyle mi?


Yanıtlar:


250

<a>Nchor eleman veya bazı içerikten sadece bir çapa olduğunu. Başlangıçta HTML spesifikasyonu adlandırılmış bağlantılar ( <a name="foo">) ve bağlantılı bağlantılar ( <a href="#foo">) için izin veriliyordu .

Parça tanımlayıcı artık bir [id]öznitelik belirtmek için kullanıldığından, adlandırılmış bağlantı biçimi daha az kullanılır (geriye dönük uyumluluk için yine de [name]öznitelikler belirtebilirsiniz ). Bir <a>bir olmadan eleman [href]özelliğinde hala geçerlidir .

Anlambilim ve stil söz konusu olduğunda, <a>öğe :linkbir [href]niteliği olmadığı sürece bir bağlantı ( ) değildir . Bunun bir yan etkisi, <a>olmayan bir öğenin [href]varsayılan olarak sekme sırasında olmayacak olmasıdır.

Gerçek soru, <a>tek başına elemanın a'nın uygun bir temsili olup olmadığıdır <button>. Anlamsal düzeyde, a linkve a arasında belirgin bir fark vardır button.

Düğme, tıklandığında bir eylemin gerçekleşmesine neden olan bir şeydir.

Bağlantı, geçerli belgede gezinmede değişikliğe neden olan bir düğmedir. Oluşan gezinme, parça tanımlayıcıları ( #foo) durumunda belge içinde hareket edebilir veya url'ler ( /bar) durumunda yeni bir belgeye geçebilir .

Bağlantılar özel bir düğme türü olduğundan, alternatif işlevleri gerçekleştirmek için genellikle eylemlerini geçersiz kılarlar. Bir çapayı düğme olarak kullanmaya devam etmek tutarlılık açısından tamamdır, ancak semantik olarak tam olarak doğru olmasa da.

Bir <a>öğeyi (veya <span>, veya <div>) düğme olarak kullanmanın anlamı ve erişilebilirliği konusunda endişeleriniz varsa , aşağıdaki nitelikleri eklemelisiniz:

<a role="button" tabindex="0" ...>...</a>

Düğme rolü özellikle eleman yatan unsur olmuş olabilir ne olursa olsun anlambilim için geçersiz kılınmış olarak bir düğme olarak tedavi ediliyor bu kullanıcıyı söyler.

İçin <span>ve <div>elemanları için JavaScript anahtar dinleyicileri eklemek isteyebilirsiniz Spaceveya Entertetiğe clickolay. <a href>ve <button>öğeler bunu varsayılan olarak yapar, ancak düğme olmayan öğeler yapmaz. Bazen clicktetiği farklı bir anahtara bağlamak daha mantıklıdır . Örneğin, bir web uygulamasındaki bir "yardım" düğmesine bağlı olabilir F1.


1
@Zacqary, [role="button"]somut bir şey yapmaz, yine de tıklama olayını dinlemeniz gerekir (ancak bunu bir JS düğmesi yapmak için yine de yaparsınız). Ekran okuyucunun öğeyi orijinal anlamsal değeri yerine bir düğme olarak göstereceğini bilmesi için destekli gezinme (ekran okuyucular olarak da bilinir) için kullanılması amaçlanmıştır. Ekleme [tabindex], öğeyi sekme sırasına ekler. Özel durumlarda, sekme sırasında düğmenin gezilebilir olmasını istemeyebilirsiniz / buna ihtiyaç duymayabilirsiniz, bu nedenle bu isteğe bağlı bir özelliktir. Zaten düğme [role="button"]olan öğelere gereksiz olduğu için gerek yoktur .
zzzzBov

Href ve adsız bir bağlantı etiketine sahip olmak geçerli bir HTML midir? Uygulamamızda devre dışı bırakılan (dolayısıyla href özelliği olmayan), ancak yine de kullanıcıya gösterilen bazı silme bağlantılarımız vardır.
Joshua Muheim

1
@JoshuaMuheim, umarım aldırmazsınız, ama sorunuzu ayrı bir bağımsız soru olarak gönderdim .
zzzzBov

Bunu javascript eylemleri için 'düğmeler' oluşturmak için kullanıyorsanız ... href özniteliğinin tamamen kaldırılmasının Chrome'un (ve muhtemelen diğer tarayıcıların) imleci fareyle üzerine gelindiğinde değiştirmeyi durdurmasına neden olacağını not etmek istedim. Açıkçası, bunu CSS ile tekrar eklemek kolaydır - ancak sadece bir kafa yukarıda.
Mir

@Mir, kullanmayacaksanız [href], muhtemelen <span>düğme için bir kullanmalısınız .
zzzzBov

49

Cevabınızı burada bulabileceğinizi düşünüyorum: href niteliği olmayan bir bağlantı etiketi güvenli midir?

Ayrıca href ile hiçbir bağlantı işlemi istemiyorsanız, bunu şu şekilde kullanabilirsiniz:

<a href="javascript:void(0);">something</a>

3
Aslında şöyle olmalıjavascript:undefined
rybo111

2
@ rybo111 haklısın ama yine de void (0) tercih ediyorum; temelde daha iyi göründüğü için. Müşterilerimin olayları "tanımlanmamış" olarak görmesini sevmiyorum ;-)
Alex

9
<a href="javascript:;">text</a>?
diynevala

javascript:;IE6'da rollover efektleri ve hatta gif animasyonları gibi şeyleri bozmak için kullanılır. Ve hiçbir bağlantı işlemi için button. Aynı zamanda, AJAX bağlantıları gibi şeyler hrefJS başarısız olursa geri dönüş eylemleri için s'lerini kullanabilir .
Ilya Streltsyn

16

Evet, bağlantı etiketini bir hreföznitelik olmadan kullanmak geçerlidir .

Eğer aeleman hiç sahip hrefniteliğini, daha sonra eleman alakalı olsaydı bir bağlantı aksi takdirde sadece öğenin içeriğini oluşan, yerleştirilmemiş olabilir nerede için yer tutucu temsil eder.

Evet, kullanabilirsiniz classve diğer özellikler, ancak kullanamazsınız target, download, rel, hreflang, vetype .

target, download, rel, hreflang, Ve typehref özelliği yoksa nitelikler ihmal edilmelidir.

" Yapmalı mıyım? " Kısmına gelince , ilk alıntıya bakın: " Bir bağlantı başka türlü konuyla ilgili olsaydı nereye yerleştirilmiş olabilirdi ". Bu yüzden, " JavaScript olmasaydı, bu etiketi bağlantı olarak kullanır mıydım? " Diye sorardım . Cevap evet ise, o zaman evet,<a> onsuz kullanmalısınız href. Hayır ise, o zaman yine de kullanırdım, çünkü üretkenlik benim için uç durum anlamından daha önemlidir, ama bu sadece benim kişisel görüşüm.

Ek olarak, farklı davranış ve stillere dikkat etmelisiniz (örneğin, alt çizgi yok, imleç yok, a değil ).:link

Kaynak: W3C HTML5 Önerisi


Konu "uç durum anlambilimiyle" değil, erişilebilirlikle ilgili, yani engelli kişilerin bir web sitesinin içeriğini kullanıp anlayabilmelerini sağlamaktır
neiya

4

Geçerlidir. Örneğin, modları (veya yanıt veren benzer şeyleri data-toggleve data-targetöznitelikleri) göstermek için kullanabilirsiniz.

Gibi bir şey:

<a role="button" data-toggle="modal" data-target=".bs-example-modal-sm" aria-hidden="true"><i class="fa fa-phone"></i></a>

Burada bir modal göstermek için a ayerine etiket olarak daha iyi olan font-awesome simgesini kullanıyorum button. Ayrıca ayar role="button", işaretçinin bir eylem türüne dönüşmesini sağlar. Ya hrefda olmadan role="button"imleç işaretçisi değişmez.


3
Bu durumda bir düğme kullanmalısınız. Hem anlamsal hem de erişilebilirlik açısından daha uygundur. Çapalar sizi bir yere götürmeli, bir eylem gerçekleştirmemelidir. Ayrıca, neden tüm çapayı gizliyorsunuz aria-hidden? Simge olabilir, ancak ekran okuyucu kullanıcıları daha az deneyim yaşamamalı.
isherwood
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.