CSS kullanarak bir HTML bağlantı etiketini tıklanabilir / bağlanamaz hale getirmek mümkün müdür?


133

Örneğin şuna sahipsem:

<a style="" href="page.html">page link</a>

Style özelliği için kullanabileceğim, bağlantının tıklanabilir olmaması ve beni page.html'ye götürmemesini sağlayacak herhangi bir şey var mı?

Ya da tek seçeneğim, bir bağlantı etiketindeki 'sayfa bağlantısını' sarmamak mı?

Düzenleme: İnsanların daha iyi tavsiyelerde bulunabilmesi için bunu neden yapmak istediğimi belirtmek istiyorum. Uygulamamı, geliştiricinin ne tür gezinme stilini istediğini seçebilmesi için kurmaya çalışıyorum.

Bu yüzden, bir bağlantı listem var ve biri şu anda seçili ve diğerleri değil. Seçilmeyen bağlantılar için, bunların normal tıklanabilir bağlantı etiketleri olmasını istiyorum. Ancak seçilen bağlantı için, bazı kişiler bağlantının tıklanabilir kalmasını tercih ederken, diğerleri tıklanabilir olmamasını tercih eder.

Artık bir bağlantı etiketini seçili bağlantının çevresine programlı olarak kolayca sarmayabiliyordum. Ancak, seçili bağlantıyı her zaman aşağıdaki gibi bir şeye sarabilirsem daha şık olacağını düşünüyorum:

<a id="current" href="link.html">link</a>

ve sonra geliştiricinin bağlama stilini CSS aracılığıyla kontrol etmesine izin verin.



3
Tıklanmasını istemiyorsanız, <span>bunun yerine bir kullanabilirsiniz.
David, Monica'nın

David ile aynı fikirdeyim. UI paradigmalarını bozmayın. Bir kullanıcının beklentisi, bağlantıların tıklanabilmesidir. Tıklanamıyorsa, o zaman gerçekten bir bağlantı değil mi?
mrtsherman

Check out stackoverflow.com/questions/2091168/disable-a-link-using-css biraz daha olası cevaplar için.
Oliver 13

Evet, bu berbat bir fikir. Ekran okuyucular, bir bağlantı olduğu için bağlantıyı bir bağlantı olarak görmeye devam edecek. Arama motorları da. Aslında, HTML'yi anlayan her şey. Bunu yapma. Bunda "zarif" hiçbir şey yok.
Paul D. Waite

Yanıtlar:


270

Bu css'i kullanabilirsiniz:

.inactiveLink {
   pointer-events: none;
   cursor: default;
}

Ve sonra sınıfı html kodunuza atayın:

<a style="" href="page.html" class="inactiveLink">page link</a>

Bağlantının tıklanabilir olmamasını ve imleç stilini bağlantıların sahip olduğu gibi bir eli değil, bir ok stilini yapar.

veya bu stili html'de kullanın:

<a style="pointer-events: none; cursor: default;" href="page.html">page link</a>

ama ilk yaklaşımı öneririm.


Bunun Firefox / Chrome'un Ubuntu sürümünde çalıştığını doğrulayabilirim. Yine de Windows'ta IE üzerinde çalışıp çalışmayacağını merak ediyorum.
JohnMerlino

3
Bu çözümde anahtarıdır: pointer-events. İşte uyumluluk tablosu için bağlantı
masegaloeh

@JohnMerlino: IE9'da çalışmıyor. Uyumluluk tablosuna masegaloeh en bağlantıyı daha bakın
Howie

Uyarı: Odağı bağlantıya taşımak için
sekmeye basmak

İmleç: varsayılan gerekli olduğunu sanmıyorum. İşaretçi olaylarınız olduğu sürece: hiçbiri çalışmıyor.
kloddant

51

Bu, davranışsal bir dil olmadığı için (yani JavaScript) CSS ile yapmak çok kolay değildir, tek kolay yol, bağlantınızda bir JavaScript OnClick Olayı kullanmak ve onu yanlış olarak döndürmektir, bu muhtemelen en kısa koddur bunun için kullanabilirsiniz:

<a href="page.html" onclick="return false">page link</a>

2
@Mike Bu, tıklamanın hiçbir şey yapmamasını sağlar, ancak düğme yine de tıklanabilir görünür.
acostache

1
@acostache kullanarak style = "cursor: default;" göstericiye yardım etmelidir
John

4
Soru şuydu: "CSS kullanmak", bu yüzden bu iyi, ancak doğru cevap değil.
Roman Holzner

3 ana nedenden ötürü onclick = "return false" yerine css kullanmak daha iyidir: 1- css ile varsayılan bağlantı fare imlecini varsayılan oka değiştirebilirsiniz. 2- Bu rahatsız edici js. 3- Bu aslında bir değer döndürüyor, bağlantıya her tıkladığınızda yanlış döndürmek istemezsiniz.
Diego Unanue

11

Evet .. Mümkün kullanarak css

<a class="disable-me" href="page.html">page link</a>

.disable-me {
    pointer-events: none;
}

Bu en temiz yol, ancak bir uyarı: yalnızca IE11 + caniuse.com'da
pixelfreak

8

Veya hiçbir etkinlik içermeyen tamamen HTML ve CSS:

<div style="z-index: 1; position: absolute;">
    <a style="visibility: hidden;">Page link</a>
</div>
<a href="page.html">Page link</a>

1
-1 çünkü bu, sorunu çözmenin oldukça karmaşık / kafa karıştırıcı bir yoludur. Aynı zamanda sorunun sorduğu şeyi gerçekten yapmaz (bağlantıyı devre dışı bırakın). Bağlantıyı görünmez bir unsurla kaplar. Diego'nun cevabı çok daha net.
geliştiriliyor

@geliştirme Diego'nun cevabının da daha iyi olduğunu ve daha yüksek oylanıp kabul edilmesi gerektiğini düşünüyorum. Ancak bu cevabı yazdığımda (3 yıl önce) pointer-eventsneredeyse hiç tarayıcı desteği yoktu.
Paul

@Paulpro Durumun bu olduğunu anladım. Olumsuz oy için özür dilerim! Sadece en güncel cevabın üstte olduğundan emin olmak istiyorum. Cevabınız için teşekkürler.
geliştiriliyor

6

CSS, davranışı değil sunumu etkilemek için tasarlanmıştır.

Biraz JavaScript kullanabilirsiniz.

document.links[0].onclick = function(event) {
   event.preventDefault();
};

5

Daha rahatsız edici olmayan bir yol (jQuery kullandığınızı varsayarak):

HTML:

<a id="my-link" href="page.html">page link</a>

JavaScript:

$('#my-link').click(function(e)
{
    e.preventDefault();
});

Bunun avantajı, mantık ve sunum arasındaki temiz ayrımdır. Bir gün bu bağlantının başka bir şey yapacağına karar verirseniz, işaretlemeyle uğraşmanız gerekmez, sadece JS ile.


4
Biraz daha hızlı çalışan aynı şeyi yapmak için kolayca jQuery olmayan bir kod yazabileceğinizi biliyorsunuz: document.getElementById('my-link').onclick = function(){ return false; };
Paul

1
Bence çoğu insan, gelişimi kolaylaştırmak için bir tür çerçeve kullanmak istiyor (ve kullanmalıdır). Yazar herhangi bir performans kısıtlaması belirtmedi, ancak jQuery küçültülmüş ve gzip ile sıkıştırılmış yalnızca 31 KB'dir. Bence fayda, maliyetten çok daha ağır basıyor.
pixelfreak

2
Ciddi anlamda? Hangi tarayıcı onclick veya getElementById'yi desteklemiyor. Tamam, yani IE 2 onclick'i desteklemiyor, ancak CSS'yi de desteklemiyordu ... ve oradaki jQuery kodunuzun IE 2'de de çalışacağından şüpheliyim.
Paul

1
JQuery kitaplığı indirme süresini yapamazsanız hız farkı küçük olabilir, bt değil. İhtiyaç duymadığınızda jQuery kullanımını teşvik etmenin gerçekten iyi bir fikir olduğunu düşünmüyorum, çünkü insanlar ona bağımlı hale geliyor ve Javascript olmadan Javascript yazmayı unutuyor.
Paul

4
@PaulPRO Bu tartışma yazarın gereksinimleri olmadan tartışmalıdır. Her çerçevenin amacı vardır. JS'de akıcı değilse ve sadece bir mom-n-pop web sitesi yapıyorsa ve bazı DOM öğelerini manipüle etmesi gerekiyorsa, bir çerçeve kullanması çok daha kolay olurdu. Herhangi bir çerçeveyi kullanmaktaki isteksizliğiniz çok saçma. PHP C ile yazılmıştır. Bu, C yazıp PHP kullanmamanız gerektiği anlamına mı geliyor? iOS'ta UIKit, Core Data, Quartz, vb. bulunur. Flash, yaygın olarak kullanılan tonlarca 3. parti kitaplığa sahiptir. Yine, her çerçevenin kendi amacı vardır. Pürist, yerleşik olmayan bir zihniyet kimseye yardımcı olmaz.
pixelfreak

2

Cevap:

<a href="page.html" onclick="return false">page link</a>

0

Css ile yapılabilir ve çok basittir. "a" yı "p" olarak değiştirin. Tıklanamaz hale getirmek istiyorsanız, "sayfa bağlantınız" zaten bir yere götürmez.

CSS'nize bu belirli "p" üzerinde fareyle üzerine gelme işlemi yapmasını söylediğinizde, şunu söyleyin:

(bu örnek için "p" ye "örnek" kimliğini verdim)

#example
{
  cursor:default;
}

Artık imleciniz sayfanın her yerinde olduğu gibi kalacaktır.


-1
<a href="page.html" onclick="return false" style="cursor:default;">page link</a>

Bunun için ayrı bir cevap eklemeye gerek yok, @KaranK'ın cevabı üzerine yorumunuz yeterli, diye düşündüm. Lütfen yinelenen yanıtlardan kaçının.
MAChitgarha
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.