Due bordi di colore


95

Il cliente desidera due bordi di colore per un aspetto in rilievo. Posso farlo su un elemento? Speravo di evitare di impilare due elementi DOM con bordi individuali.


Sei disposto a utilizzare Javascript per ottenere l'effetto? jquery.malsup.com/corner
nopuck4you

Risposte:


140

Sì: usa la outlineproprietà; funge da secondo confine al di fuori del tuo confine. Attenzione, però, può interagire in modo traballante con margini, imbottiture e ombre. In alcuni browser potrebbe essere necessario utilizzare anche un prefisso specifico del browser; per essere sicuri che lo rilevi: -webkit-outlinee simili (sebbene WebKit in particolare non lo richieda).

Questo può essere utile anche nel caso in cui si desidera eliminare il contorno per alcuni browser (come nel caso in cui si desideri combinare il contorno con un'ombra esterna; in WebKit il contorno è all'interno dell'ombra; in FireFox è all'esterno, quindi -moz-outline: 0è utile per assicurarti di non ottenere una linea nodosa attorno alla tua bellissima ombra esterna CSS).

.someclass {
  border: 1px solid blue;
  outline: 1px solid darkblue;
}

Modifica: alcune persone hanno osservato che outlinenon va bene con IE <8. Anche se questo è vero; supportare IE <8 non è davvero qualcosa che dovresti fare.


27
-1 per "supportare IE <8 non è davvero qualcosa che dovresti fare". Non supportare IE6 potrebbe andare bene. Ma non supportare IE7 è ridicolo, nessun sito con un pubblico non tecnico può permetterselo
Pekka

6
outlineesiste dai CSS2.
BoltClock

156
+1 per non supportare IE 7, mentre il tuo sito dovrebbe sempre funzionare e apparire ragionevolmente bene in IE 7, il supporto completo non è necessario. soprattutto se è solo un bordo a due colori. Personalmente sto usando box-shadow e altre funzionalità "avanzate". IE7 non riesce a vedere una scatola-ombra, ... un grosso problema. non c'è motivo di utilizzare una soluzione meno adatta, eccessivamente complicata o addirittura obsoleta, solo per aggirare le stranezze di IE7.
Marian Theisen

2
Inoltre, vedere questo riferimento per buoni motivi di accessibilità NON hackerare la proprietà del contorno per scopi di progettazione: outlinenone.com
Joel Glovier

11
Una parola di cautela, outlineè meno versatile di border. In particolare, W3C dice : "Nota. Il contorno è lo stesso su tutti i lati. A differenza dei bordi, non esiste la proprietà 'outline-top' o 'outline-left' ." (Enfasi mia)
Bob Stein,

68

Questo è molto possibile. Ci vuole solo un piccolo trucco CSS!

div.border {
  border: 1px solid #000;
  position: relative;
}

div.border:before {
  position: absolute;
  display: block;
  content: '';
  border: 1px solid red;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
<div class="border">Hi I have two border colors<br />I am also Fluid</div>

È quello che stai cercando?


In effetti è complicato, ma si degrada con grazia e funziona anche sul browser stock del mio HTC (Android)! Se lo usi border-radius, prova a ridurre il raggio del bordo interno di un pixel, in modo da rendere quasi impercettibile lo spazio tra i due bordi arrotondati.
influenza

Questo è carino. Usare bottom:1pxpiuttosto che ha height:100%funzionato meglio per me solo per un bordo inferiore :)
Nick

se hai un riempimento per div.border, ho scoperto che l'aggiunta di un margine negativo con le stesse dimensioni per il div.border:before, ha aiutato a mantenere tutto in linea. Forse c'è un modo migliore per farlo? jsFiddle
NW Tech

+1 per l'utilizzo di pseudo-elementi. Penso che questa risposta sia migliore di quella di Williham Totland
Matías Cánepa

È fantastico! :)
BennKingy

33

Un altro modo è usare box-shadow:

#mybox {
box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-moz-box-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
-webkit-shadow:
  0 0 0 1px #CCC,
  0 0 0 2px #888,
  0 0 0 3px #444,
  0 0 0 4px #000;
}

<div id="mybox">ABC</div>

Vedi esempio qui.


Lo preferisco poiché funziona con border-radius a differenza del metodo outline
Johan

18

Hai provato i diversi stili di bordo disponibili nelle specifiche CSS? Esistono già due stili di bordo che potrebbero soddisfare le tue esigenze:

border-style: ridge;

O

border-style: groove;

1
Questo era esattamente ciò di cui avevo bisogno. (Correzione di <fieldset> in IE8)
DOOManiac

14

Il contorno è buono, ma solo quando vuoi il bordo tutt'intorno.

Diciamo che se vuoi farlo solo in basso o in alto puoi usare

<style>

  #border-top {
  border-top: 1px solid  #ccc;
  box-shadow: inset 0 1px 0 #fff;
}
</style>

<p id="border-top">This is my content</p>

E per il fondo:

<style>

      #border-bottom {
      border-top: 1px solid  #ccc;
      box-shadow: 0 1px 0 #fff;
    }
</style>

    <p id="border-bottom">This is my content</p>

Spero che questo aiuti.


6

Invece di usare schemi non supportati e problematici, usa solo

  • background-color + padding per il bordo interno
  • bordo normale per quello esterno.

Esempio:

HTML:

<img src="http://cdn3.thumbs.common.smcloud.net/common/8/6/s/863444wpPN.jpg/r-0,500-n-863444wpPN.jpg" alt="malkovich" />

CSS:

img {
    padding: 1px;
    background: yellow;
    border:1px solid black;
}

TEST (JSFiddle) :


Funziona bene, ma solo se hai contenuti con sfondo.
Culme

4

Se per "goffratura" intendi due bordi l'uno attorno all'altro con due colori diversi, c'è la outlineproprietà ( outline-left, outline-right....) ma è scarsamente supportata nella famiglia IE (vale a dire, IE6 e 7 non la supportano affatto ). Se hai bisogno di due bordi, un secondo elemento wrapper sarebbe davvero il migliore.

Se intendi usare due colori nello stesso bordo. Usa ad es

border-right: 1px white solid;
border-left: 1px black solid;
border-top: 1px black solid;
border-bottom: 1px white solid;

ci sono speciali border-stylesanche per questo ( ridge, outsete inset), ma tendono a variare tra i vari browser nella mia esperienza.


3
Credo che quello che sta chiedendo sia qualcosa di simile border : black white; che significa definire due colori diversi per un bordo che appare in sequenza allo stesso tempo.
Tarik

1
@ Braveyard ah, capisco. Questo sarebbe teoricamente possibile utilizzando outlinema non funzionerà bene in IE <8
Pekka

3
Nota che esiste solo il contorno ... sfortunatamente non esistono cose come outline-left, outline-right, outline-top o outline-bottom.
David Sherret,

-1

Non è possibile, ma dovresti controllare se border-stylevalori come inset, outseto qualche altro, hanno ottenuto l'effetto desiderato .. (ne dubito però .. )

CSS3 ha le proprietà border-image , ma non conosco ancora il supporto dai browser (maggiori informazioni su http://www.css3.info/preview/border-image/ ) ..


Niente è impossibile nel mondo della programmazione: P, beh, mi piace fare sempre questa affermazione :)
Tarik

-1

Scrivi semplicemente

style="border:medium double;"

per il tag html


1
Ciò dà due bordi con ma un colore tra di loro.
Williham Totland,

-1

Potresti usare

<html>
<head>
<title>Two Colors</title>
<style type="text/css">

.two-colors {
background: none repeat scroll 0% 0% rgb(245, 245, 245); border-color: rgba(111,111,111,0.2) transparent;
 padding: 4px; outline: 1px solid green;
}

</style>

<style type="text/css">
      body {
        padding-top: 20px;
        padding-bottom: 40px;
        background-color:yellow;        
      }
    </style>

</head>
<body>
<a target="_blank" href="people.htm">
  <img class="two-colors" src="people.jpg" alt="Klematis" width="213" height="120" />
  </a>

</body>
</html>

-2

Questo produce un bell'effetto.

<div style="border: 1px solid gray; padding: 1px">
<div style="border: 1px solid gray">
   internal stuff
</div>
</div>
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.