Düğmenin bir bağlantı gibi görünmesi nasıl sağlanır?


287

Bir düğmeyi CSS kullanarak bir bağlantıya benzetmem gerekiyor. Değişiklikler yapılıyor ama üzerine tıkladığımda, sanki bir düğmeye basıyormuş gibi gösteriyor. Düğmenin tıklandığında bile bağlantı olarak çalışması için bunu nasıl kaldıracağınız hakkında bir fikriniz var mı?


4
bağlantılar üzerindeki onclick etkinlikleri düğmeler kadar basittir
knittl

2
@knittl, @cletus Aslında, bağlantılar ve düğmelerin HTML'de çok farklı anlamları vardır. Sen okumalısınız whatwg.org/specs/web-apps/current-work/multipage/... . Düğmeyi bağlantıya benzeyecek şekilde biçimlendirmek iyi bir fikir olmayabilir, ancak bağlantı yerine HTML özelliklerine karşı iken UI tasarımına bağlıdır.
Anton Strogonoff

5
Bir düğmeyi bağlantı gibi biçimlendirmenin birkaç nedeni olabilir. (1) düğmesi tip = "gönder" (2) düğmesi süslü stil yani değişken uzunlukta arka plan görüntüsü
TJ vardır.

95
Bağlantı gibi görünmesini isteseniz bile, bir şeyin düğme olması daha anlamsal olarak doğru olabilir. Örneğin, sayfadaki bir şeyi değiştiren bir çift "Tümünü Genişlet | Tümünü Daralt" bağlantısı düşünün. Bunlara tıklamak bir eyleme neden olur, ancak kullanıcıyı hiçbir yere götürmez - anlambilim bir düğmedir. Ancak tasarımcı görünüm nedenleriyle bağlantıları belirtmiş olabilir. Bu aslında çok iyi bir soru.
shacker

17
Bir bağlantı ile JS yöntemleri tetikleme çünkü bir bağlantı yerine bir düğme kullanıyorum, #daha sonra kullanmak için bağlantı zorla event.preventDefault(). Bağlandığı gibi bu kötü javascript:void(0);.
Archonic

Yanıtlar:


352

button {
  background: none!important;
  border: none;
  padding: 0!important;
  /*optional*/
  font-family: arial, sans-serif;
  /*input has OS specific font-family*/
  color: #069;
  text-decoration: underline;
  cursor: pointer;
}
<button> your button that looks like a link</button>


24
Kemandaki çok küçük varyasyonum - metin süslemesini taşıdı: alt çizgi kuralı hareket et: düğme. Benim görmek çatallı keman .
odedbd

10
Tüm düğmelerin bağlantı olarak biçimlendirilmesini istemiyorsanız, stili button.link {...styles...}o zamanki gibi kaplayın <button class="link">Your button</button>. Bu da !importanther zaman iyi bir fikir olan kullanımı önler .
Archonic

3
Dikkat etmeyi unutma outline. Bazı tarayıcılar düğmeleri ekler. Ayarlayabilirsiniz outline-color: transparent.
SiliconMind

4
Lütfen düğmeyi erişilemez hale getireceği için ana hatları kaldırmayın: outlinenone.com
Dominik

4
Yerine border-bottomkullanımı text-decoration:underline.
ʙᴀᴋᴇʀ ʙᴀᴋᴇʀ

86

Kabul edilen cevabın kodu çoğu durumda çalışır, ancak gerçekten bir bağlantı gibi davranan bir düğme almak için biraz daha fazla koda ihtiyacınız vardır. Firefox'ta (Mozilla) odaklanmış düğmelerin stilini elde etmek özellikle zor.

Aşağıdaki CSS, bağlantıların ve düğmelerin aynı CSS özelliklerine sahip olmasını ve tüm yaygın tarayıcılarda aynı şekilde davranmasını sağlar:

button {
  align-items: normal;
  background-color: rgba(0,0,0,0);
  border-color: rgb(0, 0, 238);
  border-style: none;
  box-sizing: content-box;
  color: rgb(0, 0, 238); 
  cursor: pointer;
  display: inline;
  font: inherit;
  height: auto;
  padding: 0;
  perspective-origin: 0 0;
  text-align: start;
  text-decoration: underline;
  transform-origin: 0 0;
  width: auto;
  -moz-appearance: none;
  -webkit-logical-height: 1em; /* Chrome ignores auto, so we have to use this hack to set the correct height  */
  -webkit-logical-width: auto; /* Chrome ignores auto, but here for completeness */
}

/* Mozilla uses a pseudo-element to show focus on buttons, */
/* but anchors are highlighted via the focus pseudo-class. */

@supports (-moz-appearance:none) { /* Mozilla-only */
  button::-moz-focus-inner { /* reset any predefined properties */ 
    border: none;
    padding: 0;
  }
  button:focus { /* add outline to focus pseudo-class */
    outline-style: dotted;
    outline-width: 1px;
  }
}

Yukarıdaki örnek yalnızca değiştiriliyor button okunabilirliği geliştirmek için öğeleri , ancak değiştirmek input[type="button"], input[type="submit"]ve input[type="reset"]öğeler de kolayca genişletilebilir . Sadece belirli düğmelerin çapa gibi görünmesini istiyorsanız, bir sınıf da kullanabilirsiniz.

Görmek Canlı bir demo için bu JSFiddle'a .

Bunun düğmelere varsayılan bağlantı stilini uyguladığını da unutmayın (örn. Mavi metin rengi). Dolayısıyla, metin rengini veya çapa ve düğmelerin başka bir şeyini değiştirmek istiyorsanız, bunu yapmalısınız. yukarıdaki CSS'den sonra .


Bu yanıttaki orijinal kod (snippet'e bakın) tamamen farklı ve eksikti.


outline-offset: 0;Anahat hiçbiri olarak ayarlanmamışsa neden ihtiyacınız var ?
Mohamad

box-shadow: none
Düğmedeki

Başka bir:text-transform: none;
Shone Tow

75

Twitter bootstrap kullanmak sakıncası yoksa sadece link sınıfını kullanmanızı öneririm .

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<button type="button" class="btn btn-link">Link</button>

Umarım bu birine yardımcı olur :) İyi günler!


7
Bu harika çalıştı ama gerçek bir <a> bağlantısının aksine bazı dolgu bıraktı. Sadece bir dolgu stili ekleyin: 0! Önemli ve altın. Teşekkürler!
David

Bu, jquery validate ile form doğrulamasını tetikliyor gibi görünüyor
Paul Becker

Bu güvenilir bir çözüm değil. Sadece dikey merkezlemeyi ustaca kırmakla kalmaz, aynı zamanda metin stili ve yazı tipi boyutu değişikliklerini dolaylı olarak devre dışı bırakır.
Radon Rosborough

5

css sahte camını kullanmayı dene :focus

input[type="button"], input[type="button"]:focus {
  /* your style goes here */
}

bağlantılar ve onclick olayları kullanımı için düzenleme (satır içi javascript eventhandlers kullanmamalısınız, ancak basitlik uğruna bunları burada kullanacağım):

<a href="some/page.php" title="perform some js action" onclick="callFunction(this.href);return false;">watch and learn</a>

this.href ile fonksiyonunuzdaki bağlantının hedefine bile erişebilirsiniz. return falsetıklandığında tarayıcıların bağlantıyı izlemesini engeller.

javascript devre dışı bırakılmışsa, bağlantı normal bir bağlantı olarak çalışır ve yüklenir some/page.php- js devre dışı bırakıldığında bağlantınızın ölmesini istiyorsanızhref="#"


Ben kullanmak istiyorsunuz ama düğme girintili olmaz böylece uygulamak için ne değişiklikler konusunda çok emin değilim.

Evet. N 0 olarak paddina verdikten sonra bile girinti hala kalır

4

Düğmeleri tarayıcılar arasında güvenilir bir şekilde bağlantı olarak biçimlendiremezsiniz. Denedim, ancak bazı tarayıcılarda her zaman garip dolgu, kenar boşluğu veya yazı tipi sorunları var. Ya düğmenin bir düğme gibi görünmesine izin vererek yaşayın ya da bir bağlantıda onClick ve preventDefault kullanın.


2
Tarayıcılar yerel widget'ları kullandıklarında bu doğruydu. Uzaktan yeni tarayıcılar için bile geçerli mi?
aij

1
2017 ve FireFox'um hala yerel widget'lar kullanıyor.
Michael Scheper

2

Bunu, aşağıdaki örnekte gösterildiği gibi basit css kullanarak yapabilirsiniz.

button {
    overflow: visible;
    width: auto;
}
button.link {
    font-family: "Verdana" sans-serif;
    font-size: 1em;
    text-align: left;
    color: blue;
    background: none;
    margin: 0;
    padding: 0;
    border: none;
    cursor: pointer;
   
    -moz-user-select: text;
 
    /* override all your button styles here if there are any others */
}
button.link span {
    text-decoration: underline;
}
button.link:hover span,
button.link:focus span {
    color: black;
}
<button type="submit" class="link"><span>Button as Link</span></button>

resim açıklamasını buraya girin

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.