HTML5 kullanarak bir <a> içine <düğmesi> öğesi yerleştirebilir miyim?


145

Aşağıdakileri yapıyorum:

 <a href="www.stackoverflow.com">
   <button disabled="disabled" >ABC</button>
 </a>  

Bu iyi çalışıyor, ancak "Element 'button' öğesinin 'a button' öğesi içinde iç içe geçmemesi gerektiğini söyleyen bir HTML5 doğrulama hatası alıyorum.

Birisi bana ne yapmam gerektiği konusunda tavsiyede bulunabilir mi?


8
Doğrulayıcı sorunuzu sizin için zaten yanıtladı ve hatta bu hata mesajında ​​neden geçerli olmadığını söyledi.
Yararsız Kod

1
Ancak Google'ın bunu bir bağlantı olarak görebilmesini istiyorsanız bir alternatif var mı? Düğme kullanımına örnek olarak bir sonraki kayıt ve önceki kayıt için "<<" ve ">>" adında düğmelerim var. Bunların düğmeler olması gerektiğine inanıyorum, ancak işlevsellik yeni sayfalara bağlantı vermeleridir.
Marie

3
sorum şu önemli mi ... bunu iyi yaparsanız Hakedersiniz.
Muhammad Umer

1
<düğmesi> <a href="dsada.html"> Test </a> </button> koyarsam, Internet Explorer 11 veya Firefox'ta çalışmaz.
dutraveller

Yanıtlar:


231

Hayır , W3C'nin HTML5 Teknik Belgesine göre geçerli HTML5 değil :

İçerik modeli: Şeffaf , ancak etkileşimli içerik olmamalıdır torunu .

A öğesi, içinde etkileşimli içerik (ör. Düğmeler veya diğer bağlantılar) olmadığı sürece tüm paragraflar, listeler, tablolar vb. Etrafına sarılabilir.

Başka bir deyişle, <a>aşağıdakiler dışında herhangi bir öğeyi iç içe yerleştirebilirsiniz :

  • <a>

  • <audio>( kontrol özelliği mevcutsa)

  • <button>

  • <details>

  • <embed>

  • <iframe>

  • <img>( usemap özelliği mevcutsa)

  • <input>( type özelliği gizli durumda değilse )

  • <keygen>

  • <label>

  • <menu>( type özelliği araç çubuğu durumundaysa)

  • <object>( usemap özelliği mevcutsa)

  • <select>

  • <textarea>

  • <video>( kontrol özelliği mevcutsa)


Bir yere bağlanan bir düğmeye sahip olmaya çalışıyorsanız, bu düğmeyi bir <form>etiketin içine şu şekilde sarın :

<form style="display: inline" action="http://example.com/" method="get">
  <button>Visit Website</button>
</form>

Ancak, <button>etiketiniz CSS kullanılarak stilize edilmişse ve sistemin widget'ı gibi görünmüyorsa ... Kendinize bir iyilik yapın, <a>etiketiniz için yeni bir sınıf oluşturun ve aynı şekilde stil verin.


1
@Andrew Moore - Başka bir yol var mı? Bunun sorun verdiğine inanıyorum ve bu yüzden bir <a> bağlantısının içinde olacak şekilde değiştirildi. Sorunun ne olduğundan emin değilim ama bir sayfada bu düğmelerin çoğuna sahibiz. Belki de <a> bağlantıları kullanarak SEO'yu geliştirmek istedik.
Marie

2
@ Marie: Bağlantılarınızı düğmelere benzeyecek şekilde şekillendirmenin başka bir yolu yok.
Andrew Moore

3
user25 değil, method = "post" yöntemini kullanmak daha iyi değildir, çünkü tarayıcı ileri geri hareket ederken bir gönderi formu göndermeyi ister. GET, bir formun varsayılan yöntemi olduğundan, kısaltma için method = "get" komutunu bırakabilirsiniz.
Bijan

4
@AndrewMoore: Bir düğmeyi bir düğme gibi görünecek şekilde şekillendirmek, erişilebilirlik gibi kendi sorun kümelerini oluşturur. Bir düğme odaklandığında ve boşluk çubuğuna bastığınızda çalışmalıdır. Bir bağlantı yok. ADA'yı önemsiyorsanız (veya bakım gibi yapmanız gerekiyorsa) bu sizi ısıtabilir.
iconoclast

2
@Jonaspas'ın önerdiği gibi, <div>içerideki bir <a>HTML5'te kesinlikle geçerlidir: validator.w3.org/nu/…
Socob

43

Bootstrap 3 kullanıyorsanız , bu oldukça iyi çalışır

<a href="#" class="btn btn-primary btn-lg active" role="button">Primary link</a>
<a href="#" class="btn btn-default btn-lg active" role="button">Link</a>

içinde yuvarlak düğme yazı tipi müthiş simgesi ile iyi çalışmıyor
Toolkit

Class = 'btn btn-default' kullanılarak diğer düğmeler (MVC6) eşleşti.
crokusek

12

Hayır.

Aşağıdaki çözüm JavaScript'e dayanmaktadır.

<button type="button" onclick="location.href='http://www.stackoverflow.com'">ABC</button>

Düğmesi mevcut bir içine yerleştirilmiş edilecekse <form>ile method="post", daha sonra düğme özelliğini sahip olmak type="button"aksi düğmesi POST işlemi sunacaktır. Bu şekilde <form>GET ve POST çalıştırma düğmelerinin bir karışımını içeren bir anahtarınız olabilir.


onclick dosya protokolünde çalışmaz, örneğin statik sunum için yararlı değildir. bu durumda eylem eylemi formu yoludur.
netalex

1
Düğme bir sayfaya bağlıysa, bu bir düğme değildir, bu bir çapadır
Kapsül

@Capsule bu günlerde görmek çok yaygın. Var olan her web geliştirme çerçevesi için açılış sayfasına bakın. Ben genellikle saf bir argüman için değilim, ama büyük bir dikdörtgen düğmenin, gerçek bir form eylemi başlatmak yerine bir sayfaya bağlansa bile bir bağlantıdan daha iyi, daha belirgin bir ekonomikliğe sahip olduğunu itiraf etmeliyim.
TheDudeAbides

Şu anda bir var <a>içeride <button>(aynı ile hrefJS devre dışı bırakılırsa yedek olarak) ve bundan altı ay kesinlikle bunu itiraf mahcup olacağım.
TheDudeAbides

@TheDudeAbides Ben onun yönü hakkında konuşmuyorum, kullanmak istediğiniz biçimlendirme hakkında alıyorum. Bu bağlantıyı büyük bir dikdörtgen düğme olarak şekillendirmenizi engelleyen nedir? Siteniz hiç stil kullanmadığı sürece? ancak yorum yaptığımız cevabın üstündeki cevap bunun mükemmel bir örneğidir. Bu bir düğme olarak şekillendirilmiş bir çapa etiketi.
Kapsül

11

Ben sadece aynı konuya atladım ve 'span' etiketi yerine 'button' etiketi yerine çözdüm. Benim durumumda bootstrap kullanıyorum. Şöyle görünüyor:

<a href="#register"> 
    <span class="btn btn-default btn-lg">
        Subscribe
    </span>
</a> 

5
Bootstrap ile aralığa ihtiyacınız yok. Sınıfın tamamını <a> konumuna getirdiğinizde bir bağlantı düğmeniz olur. ör. <a href="#register" class="btn btn-default btn-lg"> Abone Ol </a>
Ryan Buddicom

Orijinal poster, bir bağlantı etiketinin içine bir düğme yerleştirmenin mümkün olup olmadığını sordu . Kabul edilen cevap, <a> bir <a> içine bir <a> yerleştirmenin W3C teknik özelliklerine aykırı olduğunu not eder. Bence golbeltri bir düğme olarak bir <span> şekillendiriyordu.
StackOverflowUser

Bu <a>, bağlantının bir parçası olan, ancak bir düğme gibi biçimlendirilmemiş başka içerik varsa mantıklıdır . Örneğin, bir divresimdeki (resim, arka plan, metin vb.) Herhangi bir tıklama bir bağlantıya gider, ancak yalnızca spanbir düğme gibi görünür.
Josiah

7

Bu geçerli olsaydı gerçekten garip olurdu ve geçersiz olmasını beklerdim. Bir tıklanabilir öğenin başka bir tıklanabilir öğenin içinde olması ne anlama gelir? Hangisi - bir düğme mi yoksa bir bağlantı mı?


Teşekkürler Steve. Bu bana bir ekip çalışanı tarafından önerilen bir yöntemdi. Yöntem işe yarıyor. Bunu yapabilmemin daha iyi bir yolu var mı?
Marie

1
@Marie Bir düğmenin düğme gibi görünmesini istiyorsanız, CSS stillerini bu şekilde görünmesini sağlamak kolaydır. Buna benzer bir sınır stil ekleyin: border: 2px outset. Köşeleri biraz yuvarlamak isterseniz, üzerinde bir kenarlık yarıçapı da kullanabilirsiniz . Basit bir <img>etiket de iyi çalışır.
Yararsız Kod

3

Başka bir seçenek, düğmenin onclick özelliğini kullanmaktır:

<button disabled="disabled" onClick="location.href='www.stackoverflow.com'" >ABC</button>

Ancak bu işe yarar, kullanıcı imlecin öğenin içindeymiş gibi göründüğü bağlantıyı görmez.


2

Bu günlerde spec buna izin vermese bile, düğmeye bir <a href...><button ...></a>etiket, FWIW gömmek için hala çalışıyor gibi görünüyor ...


2
Bu <button>, içinde yer almadığında çalışır <form>. Ancak, düğmenin bulunduğu anda (örn. <form>...<a><button>) Düğmenin tıklama işleyicisini devre dışı bırakmadığı sürece bu işlem durur . Bu senaryodan kaçınmayı garanti etmek için yeterli jirasyon.
piskopos

0

Düğmeye bir sınıf ekleyebilir ve yeniden yönlendiren bir komut dosyası koyabilirsiniz.

Bunu şu şekilde yaparım:

<button class='buttonClass'>button name</button>

<script>
$(".buttonClass').click(function(){
window.location.href = "http://stackoverflow.com";
});
</script>

0

neden olmasın ... ayrıca resim düğmesini de gömebilirsiniz

<FORM method = "POST" action = "https://stackoverflow.com"> 
    <button type="submit" name="Submit">
        <img src="img/Att_hack.png" alt="Text">
    </button>
</FORM> 

2
Sorun, OP'nin geri sorduğu gibi <a> </a> 'in sınırları içinde olmasına izin verdiği için biraz kısıtlayıcı olmasıdır. Kabul edilen soruya bakın.
Thomas


-1

Bir bağlantının içine düğme öğesi gömmek HTML5'te yasa dışıdır.

Varsayılan ve: aktif (basılı) durumlarında CSS kullanmak daha iyidir:

body{background-color:#F0F0F0} /* JUST TO MAKE THE BORDER STAND OUT */
a.Button{padding:.1em .4em;color:#0000D0;background-color:#E0E0E0;font:normal 80% sans-serif;font-weight:700;border:2px #606060 solid;text-decoration:none}
a.Button:not(:active){border-left-color:#FFFFFF;border-top-color:#FFFFFF}
a.Button:active{border-right-color:#FFFFFF;border-bottom-color:#FFFFFF}
<p><a class="Button" href="www.stackoverflow.com">Click me<a>


-2

Javascript çözümlerinizi deneyin, ancak iş için e.preventDefault();benim javascript işlevi eklemek gerekir .

<!-- Add your HTML !-->
<a id="id_primary_link" href="my_primary_link.php">
  <button onclick="my_trick_function('my_secondary_link.php')">
</a>


<!-- Add your javascript function !-->
<script>
function my_trick_function(secondary_link){
    $('#id_primary_link').click(function(e) {
        e.preventDefault();
        window.location.replace(secondary_link);
    });
}   
</script>   

-3

Düğmenin içindeki formaction özelliğini kullanma

PS! Yalnızca düğme türünüz = "gönder" durumunda çalışır

<button type="submit" formaction="www.youraddress.com">Submit</button>

düğmeyi bir <form> etiketine de koymanız gerekir.
denodster

-3

<a href="index.html">
  <button type="button">Submit</button>
</a>
Veya düğme içindeki java komut dosyasını şu şekilde kullanabilirsiniz:

<button type="submit" onclick="myFunction()">Submit</button>
<script>
  function myFunction() {
      var w = window.open(file:///E:/Aditya%20panchal/index.html);
    }
</script>


Sadece bazı tarayıcılar izin verecek, bu iyi bir fikir olduğu anlamına gelmez.
denodster
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.