Come rendere il pulsante simile a un collegamento?


287

Devo fare in modo che un pulsante assomigli a un collegamento tramite CSS. Le modifiche vengono apportate ma quando faccio clic su di esso, viene visualizzato come se fosse premuto come in un pulsante. Qualche idea su come rimuoverlo, in modo che il pulsante funzioni come collegamento anche quando si fa clic?


4
Gli eventi onclick sui link sono semplici come sui pulsanti
knittl

2
@knittl, @cletus In realtà, collegamenti e pulsanti hanno significati molto diversi in HTML. Dovresti leggere whatwg.org/specs/web-apps/current-work/multipage/… . Potrebbe non essere una buona idea impostare lo stile del pulsante in modo che appaia come link, ma dipende dalla progettazione dell'interfaccia utente, mentre l'utilizzo di link è invece contrario alle specifiche HTML.
Anton Strogonoff,

5
Ci sono alcuni motivi per cui potrebbe essere necessario lo stile di un pulsante come un collegamento. Il pulsante (1) ha type = "submit" (2) ha uno stile elegante, cioè un'immagine di sfondo a lunghezza variabile
TJ.

95
Potrebbe anche essere più semanticamente corretto che qualcosa sia un pulsante, anche se vuoi che appaia come un link. Ad esempio, immagina una coppia di collegamenti "Espandi tutto | Comprimi tutto" che cambiano qualcosa sulla pagina. Fare clic su di esse provoca un'azione, ma non porta l'utente da nessuna parte: la semantica è quella di un pulsante. Tuttavia, il progettista potrebbe avere collegamenti specifici per motivi di aspetto. Quindi questa è in realtà un'ottima domanda.
shacker,

17
Sto usando un pulsante invece di un collegamento perché attivando i metodi JS con un collegamento, sono costretto a collegarmi per #poi utilizzare event.preventDefault(). È brutto, come lo è il collegamento javascript:void(0);.
Archonic,

Risposte:


351

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
La mia leggerissima variazione sul violino - ha spostato la decorazione del testo: sottolinea la regola per agire sul pulsante: passa il mouse. vedere nel mio violino biforcuto .
odedbd,

10
Se non si desidera che tutti i pulsanti per essere in stile come link, portata lo stile con qualcosa come button.link {...styles...}allora <button class="link">Your button</button>. Questo evita anche di usare !importantquale è sempre una buona idea.
Archonic,

3
Ricordati di occupartene outline. Alcuni browser aggiungono i pulsanti. È possibile impostare outline-color: transparent.
SiliconMind,

4
Non rimuovere il contorno poiché ciò renderebbe inaccessibile il tuo pulsante: outlinenone.com
Dominik

4
Invece di border-bottomusare text-decoration:underline.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

86

Il codice della risposta accettata funziona nella maggior parte dei casi, ma per ottenere un pulsante che si comporta davvero come un collegamento è necessario un po 'più di codice. È particolarmente difficile ottenere lo stile dei pulsanti focalizzati direttamente su Firefox (Mozilla).

Il seguente CSS garantisce che le ancore e i pulsanti abbiano le stesse proprietà CSS e si comportino allo stesso modo su tutti i browser comuni:

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;
  }
}

L'esempio sopra modifica solo gli buttonelementi per migliorare la leggibilità, ma può essere facilmente esteso anche alla modifica input[type="button"], input[type="submit"]e agli input[type="reset"]elementi. Puoi anche usare una classe, se vuoi far sembrare solo alcuni pulsanti come ancore.

Guarda questo JSFiddle per una demo live.

Si noti inoltre che questo applica lo stile di ancoraggio predefinito ai pulsanti (ad es. Colore blu del testo). Quindi, se vuoi cambiare il colore del testo o qualsiasi altra cosa di ancore e pulsanti, dovresti farlo dopo il CSS sopra.


Il codice originale (vedi frammento) in questa risposta era completamente diverso e incompleto.


Perché è necessario outline-offset: 0;se il contorno è impostato su nessuno?
Mohamad,

Ho dovuto aggiungere box-shadow: noneper cancellare tutto lo styling sul pulsante
Tobbe,

Un altro:text-transform: none;
Shone Tow

75

Se non ti dispiace usare Twitter Bootstrap, ti suggerisco di usare semplicemente la classe di link .

<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>

Spero che questo aiuti qualcuno :) Buona giornata!


7
Questo ha funzionato alla grande, ma ha lasciato un po 'di imbottitura rispetto a un vero link <a>. Aggiungi semplicemente uno stile di imbottitura: 0! Importante ed è dorato. Grazie!
David

Ciò sembra innescare una convalida del modulo con jquery validate
Paul Becker,

Questa non è una soluzione affidabile. Non solo interrompe delicatamente la centratura verticale, ma disabilita implicitamente lo stile del testo e le modifiche alla dimensione del carattere.
Radon Rosborough,

5

prova a usare la pseudoclasse css :focus

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

modifica come per i link e l'uso degli eventi onclick (non dovresti usare i gestori di eventi javascript incorporati, ma per semplicità li userò qui):

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

con this.href puoi persino accedere alla destinazione del link nella tua funzione. return falseimpedirà ai browser di seguire il collegamento quando si fa clic.

se javascript è disabilitato, il collegamento funzionerà come un normale collegamento e si caricherà semplicemente some/page.php—se vuoi che il tuo collegamento sia morto quando js è disabilitato usahref="#"


lo userei ma non sono molto sicuro di quali modifiche applicare in modo che il pulsante non sia rientrato.

si. N anche dopo aver dato la paddina a 0, il rientro rimane ancora

4

Non è possibile assegnare uno stile ai pulsanti come collegamenti affidabili in tutti i browser. L'ho provato, ma ci sono sempre alcuni strani problemi di riempimento, margine o carattere in alcuni browser. O vivi lasciando che il pulsante assomigli a un pulsante, oppure usa onClick e preventDefault su un link.


2
Questo era vero quando i browser utilizzavano widget nativi. È ancora vero per i browser anche remotamente recenti?
aij

1
È il 2017 e il mio FireFox utilizza ancora widget nativi.
Michael Scheper,

2

È possibile ottenere ciò utilizzando semplici CSS come mostrato nell'esempio seguente

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>

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.