Comment faire des lignes doubles frontière en CSS, chaque ligne de couleur différente, sans utiliser l'image de fond?

Comment faire une bordure de ligne double en CSS, chaque ligne dans une couleur différente sans utiliser background-image?

, Par exemple comme ceci:

entrez la description de l'image ici

Code:

<h2> heading 2 </h2>
<p> paragraph text </p>

<h2> heading 2 </h2>
<p> paragraph text </p>

Note: Je ne considère pas IE 8, 7, 6

25
demandé sur Teun Zengerink 2011-04-22 11:44:23

11 réponses

Je viens de trouver le chemin sur la recherche google et cela fonctionne bien pour moi.

h2 {
    border-bottom: 1px solid blue;
    box-shadow: 0 1px 0 red;}

Source: http://www.cvwdesign.com/txp/article/425/useful-tip-for-creating-double-borders-with-css3

Edit: j'ai trouvé un autre moyen de réaliser plusieurs border en utilisant des pseudo-éléments CSS 2.1

Support: Firefox 3.5+, Safari 4+, Chrome 4+, Opera 10+, IE8 +

Http://nicolasgallagher.com/multiple-backgrounds-and-borders-with-css2/

53
répondu Jitendra Vyas 2011-04-22 09:47:08

Vous pouvez le faire avec le pseudo-élément: after:

Http://jsfiddle.net/aCgAA/

h2 {
padding: 5px 0;
border-bottom: solid 3px pink;
font-weight: bold;
position: relative;
margin-bottom: 8px;
}

h2:after {
content: '';
border-bottom: solid 3px blue;
width: 100%;
position: absolute;
bottom: -6px;
left: 0;
}

Cela se dégrade gracieusement en une seule ligne si le sélecteur :after n'est pas disponible.

15
répondu Duopixel 2016-09-01 14:31:53

C'est possible en CSS3 très facilement. essayez avec le code suivant

h2
{
  border-bottom: 2px solid blue;
  -moz-box-shadow: 0px 2px 0px #ff0000; /* Firefox 3.6 and earlier */
  -webkit-box-shadow: 0px 2px 0px #ff0000; /* Safari and Chrome */
  box-shadow: 0px 2px 0px #ff0000;
}
7
répondu Ariful Islam 2011-04-22 08:47:09
border-bottom: 1px solid blue;
box-shadow: 0 1px 0 red;
5
répondu Hosam alzagh 2012-07-28 13:51:39

Je ne pense pas qu'il y ait un moyen de le faire sans un élément supplémentaire.

Il y a outline, mais cela n'autorise pas une règle outline-bottom: un contour ne peut être identique que sur les quatre côtés.

La pseudo-classe :after permettra l'ajout de contenu de texte uniquement, pas d'éléments.

Voici comment le faire avec un supplément de hr.

3
répondu Pekka 웃 2011-04-22 07:55:46

Avez-vous essayez d'ajouter un <span> entre <h2> et <p> avec le code css suivant:

span {
height:0;
border-top:blue;
border-bottom:#ff0000;
line-height:0;
}
3
répondu wei 2011-07-25 01:16:47

Semblable à ce qu'ADW a dit, en fait, je vais éditer son violon pour aider à expliquer la différence.

Dans votre description, Vous avez explicitement décrit h2 suivi de p devrait avoir la double bordure entre les deux.

La solution D'ADW est assez bonne, seulement quand il n'y a qu'un p après le h2, mais s'il y a un autre p, il aura une étrange ligne rouge entre les paragraphes. C'est pourquoi nous ne devrions sélectionner que le p qui suit immédiatement un h2.

CSS sélecteur de p suivant immédiatement h2 est h2 + p

Essayez ceci: http://jsfiddle.net/gR4qy/42/

h2 { border-bottom: solid pink;}
h2 + p { border-top: solid blue; }

Ce n'est rien de nouveau. C'est CSS 2.1! http://www.w3.org/TR/CSS2/selector.html

Malheureusement, il n'y a rien à quoi je puisse penser pour me débarrasser de la bordure bleue si le p est manquant. Vous êtes seul là-bas: S

Désolé, je dois obtenir 50 points avant de pouvoir commenter et je ne sais pas comment obtenir des points, donc j'ai pposted ceci comme un nouveau réponse: S

1
répondu vahanpwns 2013-08-14 15:00:58
h2 { border-bottom: solid blue;}
p { border-top: solid red; }

Vous rapprochera, puis jouez avec les marges et le remplissage jusqu'à ce que les choses s'alignent.

Http://jsfiddle.net/gR4qy/

0
répondu ADW 2011-04-22 07:55:52

Enlevez simplement les marges entre les éléments afin que leurs bordures s'ajustent les unes contre les autres. Voici un exemple complet - la taille des bordures est grande, donc c'est facile à voir.

<!DOCTYPE html>
<html>
<head>
<title>Example</title>

<style type="text/css">
h2 { border-bottom: 10px solid blue; margin-bottom: 0; }
p { border-top: 10px solid green; margin-top: 0; }
</style>

</head>
<body>

<h2>Hiya</h2>
<p>La la la</p>

<h2>Hiya</h2>
<p>La la la</p>

</body>
</html>
0
répondu Will Martin 2011-04-22 07:57:37

Juste eu à faire cela, nous mettons en œuvre une ombre à deux tons dans notre application. Être une application mobile, nous voulons éviter box-shadow (performance) donc une solution encore plus simple en utilisant : après , où son absolument positionné en fonction de son parent est:

 :after{
   content: '';
   display: block;
   height:0;
   border-top: 1px solid rgba(0, 0, 0, .1);
   border-bottom: 2px solid rgba(0, 0, 0, .05);
   position: absolute;
   bottom: -3px;
   left: 0;
   width: 100%;
 }
0
répondu Linearza 2015-03-22 10:05:53

Vous pouvez le faire comme ceci:

Voir Aussi VIOLON

h2 {
    border-bottom: 3px solid red;
}
p {
    border-top: 3px solid blue;
    margin-top: -20px;
    padding-top: 20px;
}
0
répondu Danield 2016-04-15 14:43:38