Differenza tra contorno e bordo


194

Qualcuno sa delle differenze tra le proprietà "border" e "outline" nei CSS? Se non c'è differenza, allora perché ci sono due proprietà per la stessa cosa?

Risposte:


199

Da: http://webdesign.about.com/od/advancedcss/a/outline_style.htm

La proprietà del contorno CSS è una proprietà confusa. Quando lo apprendi per la prima volta, è difficile capire come sia persino lontanamente diverso dalla proprietà border. Il W3C spiega che presenta le seguenti differenze:

1.Le linee non occupano spazio.

2. I contorni possono essere non rettangolari.


1
Il link lo ha spiegato. Grazie :)
Kshitij Saxena -KJ-

2
@Manu sembra che il contorno sia disegnato all'interno dell'elemento, mentre i bordi appaiono al di fuori di esso.
Mahn,

51

Oltre ad alcune altre risposte ... ecco alcune altre differenze che mi vengono in mente:

1) angoli arrotondati

bordersupporta gli angoli arrotondati con la border-radiusproprietà. outlinenon lo fa.

VIOLINO

(NB: Sebbene Firefox abbia la -moz-outline-radiusproprietà che consente gli angoli arrotondati sul contorno ... questa proprietà non è definita in nessuno standard CSS e non è supportata da altri browser ( sorgente ))

2) Styling solo un lato

il bordo ha proprietà con cui modellare ciascun lato border-top:, border-left:ecc.

il contorno non può farlo. Non ci sono contorni: ecc. È tutto o niente. (vedi questo post SO )

3) offset

outline supporta l'offset con la proprietà outline-offset . il confine no.

VIOLINO

Nota: tutti i principali browser supportano outline-offsettranne Internet Explorer


Sì, vedo quello che stai dicendo, ho provato a cambiare il raggio del bordo del mio pulsante ma ora il mio contorno a fuoco non avvolge bene il pulsante.
Radtek,

1
@Danield, mentre tecnicamente tutto ciò che dici è giusto, lo spirito della domanda era diverso. Perché delineare quando abbiamo già il bordo. E la risposta è che il contorno non rientra nel modello di scatola.
0

2
@ user247077 - Non sono d'accordo. Per il PO sia il contorno che il bordo sembrano essere gli stessi. Quindi vuole sapere quante più differenze possibili tra di loro. Alcune delle altre differenze erano già state pubblicate in altre risposte, quindi ho deciso di aggiungerne altre non ancora elencate.
Danield,

1
Questo significa che outlinessono più veloci da visualizzare rispetto ai bordi?
Utkarsh Sinha,

38

Oltre ad altre risposte, i contorni vengono generalmente utilizzati per il debug. Opera ha dei simpatici stili CSS utente che usano la proprietà outline per mostrarti dove sono tutti gli elementi in un documento.

Se stai cercando di scoprire perché un elemento non appare dove ti aspettavi o alla dimensione che ti aspettavi, aggiungi alcuni contorni e vedi dove sono gli elementi.

Come già accennato, i contorni non occupano spazio. Quando aggiungi un bordo, la larghezza / altezza totale dell'elemento nel documento aumenta, ma ciò non accade con il contorno. Inoltre non puoi impostare contorni su lati specifici come i bordi; è tutto o niente.


17

TLDR;

Il W3C spiega che presenta le seguenti differenze:

  • I contorni non occupano spazio.
  • I contorni possono essere non rettangolari.

fonte

Il profilo dovrebbe essere usato per l'accessibilità

Va anche notato che lo scopo principale del profilo è l'accessibilità. Impostandolo sul contorno: nessuno dovrebbe essere evitato.

Se è necessario rimuoverlo, potrebbe essere un'idea migliore fornire uno stile alternativo:

Ho visto alcuni suggerimenti su come rimuovere l'indicatore di messa a fuoco usando outline: none o outline: 0. Si prega di non farlo, a meno che non si sostituisca il contorno con qualcos'altro che renda facile vedere quale elemento ha il focus sulla tastiera. La rimozione dell'indicatore visivo del focus della tastiera farà sì che le persone che si affidano alla navigazione da tastiera abbiano difficoltà a navigare e utilizzare il tuo sito.

Fonte: "Non rimuovere la struttura dai controlli di collegamento e modulo", 365 Berea Street


Più risorse


8

Un uso pratico dei contorni riguarda la trasparenza. Se si dispone di un elemento padre con uno sfondo, ma si desidera che il bordo di un elemento figlio sia trasparente in modo che lo sfondo del genitore sia visibile, è necessario utilizzare "struttura" anziché "bordo". Mentre un bordo può essere trasparente, mostrerà lo sfondo del bambino, non quello del genitore.

In altre parole, questa impostazione ha creato il seguente effetto:

outline: 7px solid rgba(255, 255, 255, 0.2);

inserisci qui la descrizione dell'immagine


2
Non tutta la storia, il bordo può anche avere lo stesso effetto se aggiungi background-clip: padding-box;al tuo stile ... :)
Dennis98

4

Dal sito della scuola W3

Le proprietà del bordo CSS consentono di specificare lo stile e il colore del bordo di un elemento.

Un contorno è una linea che viene disegnata attorno agli elementi (fuori dai bordi) per far "risaltare" l'elemento.

La proprietà stenografia del contorno imposta tutte le proprietà del contorno in una dichiarazione.

Le proprietà che possono essere impostate sono (in ordine): colore contorno, stile contorno, larghezza contorno.

Se manca uno dei valori sopra indicati, ad es. "Outline: solid # ff0000;", verrà inserito il valore predefinito per la proprietà mancante.

Controlla qui per maggiori informazioni: http://webdesign.about.com/od/advancedcss/a/outline_style.htm


4

Un po 'una vecchia domanda, ma vale la pena menzionare un bug di rendering di Firefox (ancora presente a partire da gennaio '13) in cui il contorno verrà visualizzato all'esterno di tutti gli elementi figlio anche se traboccano il loro genitore (attraverso margini negativi, ombreggiatura , eccetera.)

Puoi risolvere questo problema con:

.container {
    position: relative;
}
.container:before {
   content: '';
   margin: 0;
   padding: 0;
   position: absolute;
   top: 0;
   left: 0;
   width: 100%;
   height: 100%;
   outline: 1px solid #ff0000;
}

Peccato che non sia stato ancora risolto. Preferisco di gran lunga i contorni in molti casi poiché non si aggiungono alle dimensioni di un elemento, evitando di dover considerare sempre la larghezza dei bordi quando si impostano le dimensioni di un elemento.

Dopo tutto, qual è più semplice?

.container {
    width: 960px;
    height: 300px;
    outline: 3px solid black;
}

O:

.container {
    width: 954px;
    height: 294px;
    border: 3px solid black;
}

1
Se non l'hai ancora fatto, box-sizingprova! link
Brendan

Gli esempi in fondo a questa risposta non danno risultati identici. Il primo dà una scatola di 960 * 300 con un contorno di 3px che copre qualsiasi cosa al di fuori della scatola. Il secondo dà una scatola 954 * 294 con un contorno di 3px che non copre nulla
Peter R

3

Vale anche la pena notare che la struttura del W3C è il confine di IE , poiché IE non implementa il modello di scatola W3C.

Nel modello di scatola w3c, il bordo è esclusivo della larghezza e dell'altezza dell'elemento. In IE è inclusivo.


Questo non è vero per IE10. - E sembra che mescoli i modelli di ridimensionamento delle scatole e il fatto che i contorni non occupino affatto spazio, indipendentemente dal modello scelto.
Robert Siemer,

1

Ho fatto un piccolo pezzo di codice css / html solo per vedere la differenza tra entrambi.

outlineè meglio includere potenziali elementi figlio traboccanti, specialmente in un contenitore in linea .

borderè molto più adattato agli elementi che si comportano in blocchi .

Vieni a suonare, signore!


1

La proprietà outline in CSS disegna una linea attorno all'esterno di un elemento. È simile al confine tranne che:

  • Va sempre attorno a tutti i lati, non è possibile specificare particolari
  • lati Non fa parte del modello di riquadro, quindi non influisce sulla
    posizione dell'elemento o degli elementi adiacenti

Fonte: https://css-tricks.com/almanac/properties/o/outline/


1

Come esempio pratico dell'uso di "outline", il debole bordo tratteggiato che segue il focus del sistema su una pagina Web (ad es. Se si passa attraverso i collegamenti) può essere controllato usando la proprietà outline (almeno, so che può farlo in Firefox , non provato altri browser).

Una tecnica comune di "sostituzione dell'immagine" è quella di utilizzare, ad esempio:

<div id="logo"><a href="/">Foo Widgets Ltd.</a></div>

con quanto segue nel CSS:

#logo
{
    background: url(/images/logo.png) center center no-repeat;
}
#logo a
{
    display: block;
    text-indent: -1000em;
}

Il problema è che quando lo stato attivo raggiunge il tag, il contorno si spegne di 1000em a sinistra. Il contorno può consentire di disattivare il contorno del fuoco su tali elementi.

Credo che anche la barra degli strumenti per sviluppatori di IE stia usando qualcosa come il contorno "sotto il cofano" quando si evidenziano gli elementi per l'ispezione in modalità "seleziona". Ciò dimostra bene che il "contorno" non occupa spazio.


Mi piacerebbe sapere chi ha inventato questa tecnica di sostituzione delle immagini e perché. Il suo unico scopo sembra essere quello di far svanire il testo per chiunque abbia le immagini disabilitate. Cosa c'è di sbagliato in un'immagine normale, con testo alternativo appropriato?
Stewart,

È il metodo Phark (ora piuttosto screditato proprio per il motivo che dici), che era un adattamento della sostituzione dell'immagine di Fahrner . Lo stavo semplicemente usando come un modo rapido per dimostrare un'applicazione pratica del perché qualcuno potrebbe voler modificare il contorno del fuoco :)
Matt Sach

1

pensa al contorno come a un bordo che un proiettore disegna fuori da qualcosa come un bordo è un vero oggetto attorno a quella cosa.
una proiezione può facilmente sovrapporsi ma il bordo non ti lascia passare.
alcune volte quando lo uso grid+%width, border modifica il ridimensionamento sulla porta di visualizzazione, ad esempio un div con width:100%in un genitore width:100pxriempie completamente il genitore, ma quando aggiungo border:solid 5pxa div lo rende più piccolo per fare spazio al bordo (anche se è raro e aggirabile!)
ma con lo schema non ha questo problema poiché lo schema è più virtuale: D è solo una linea all'esterno dell'elemento ma il problema è che se non si esegue la spaziatura correttamente si sovrappone ad altri contenuti.

per farla breve:
delineare i professionisti:
non si scherza con la spaziatura e le posizioni
contro:
alte possibilità di sovrapposizione


1

Differenze tra bordo e contorno:

Il bordo fa parte del modello di riquadro, quindi viene conteggiato rispetto alle dimensioni dell'elemento. Il contorno non fa parte del modello a scatola quindi non influisce sugli elementi vicini.

demo:

#border {
  border: 10px solid black;
}
#outline {
  outline: 10px solid black;
}
<html>
<body>
<span id="border">Border</span>Other text<br><br>
<span id="outline">Outline</span>Other text
</body>
</html>

Altre differenze:
il contorno viene visualizzato al di fuori del bordo.
I contorni non possono avere angoli arrotondati; i bordi possono.


-2

Copiato da W3Schools:

Definizione e utilizzo

Un contorno è una linea che viene disegnata attorno agli elementi (al di fuori dei bordi) per far "risaltare" l'elemento.


Questo non spiega la differenza tra i 2, solo ciò che outlineè
Kaspar Lee
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.