CSS3 bordures des gradients

j'essaye d'appliquer un dégradé à une frontière, j'ai pensé que c'était aussi simple que cela:

border-color: -moz-linear-gradient(top, #555555, #111111);

cela ne fonctionne pas, est-ce que quelqu'un sait quelle est la bonne façon de faire des gradients de Frontière.

235
demandé sur Zaffy 2010-04-27 01:42:58

13 réponses

WebKit now (et Chrome 12 au moins) supporte les gradients comme image de bordure:

-webkit-border-image: -webkit-gradient(linear, left top, left bottom, from(#00abeb), to(#fff), color-stop(0.5, #fff), color-stop(0.5, #66cc00)) 21 30 30 21 repeat repeat;

Prooflink -- http://www.webkit.org/blog/1424/css3-gradients/

Prise en charge du navigateur: http://caniuse.com/#search=border-image

168
répondu Tony 2013-03-26 20:56:23

au lieu des bordures, j'utiliserais des gradients de fond et du rembourrage. même apparence, mais beaucoup plus facile, plus soutenu.

un exemple simple:

<div class="g">
    <div>bla</div>
</div>

CSS:

.g {
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.33, rgb(14,173,173)), color-stop(0.67, rgb(0,255,255)));
background-image: -moz-linear-gradient(center bottom, rgb(14,173,173) 33%, rgb(0,255,255) 67% );
padding: 2px;
}

.g > div { background: #fff; }

JsFiddle

éditer: Vous pouvez également utiliser le sélecteur :before comme @WalterSchwarz a souligné dans ce jsFiddle

99
répondu szajmon 2015-03-20 17:58:34

Mozilla ne supporte actuellement que les gradients CSS comme valeurs de la propriété background-image, ainsi que dans l'arrière-plan shorthand.

- https://developer.mozilla.org/en/CSS/-moz-linear-gradient

Example 3 - Gradient Borders

border: 8px solid #000;
-moz-border-bottom-colors: #555 #666 #777 #888 #999 #aaa #bbb #ccc;
-moz-border-top-colors: #555 #666 #777 #888 #999 #aaa #bbb #ccc;
-moz-border-left-colors: #555 #666 #777 #888 #999 #aaa #bbb #ccc;
-moz-border-right-colors: #555 #666 #777 #888 #999 #aaa #bbb #ccc;
padding: 5px 5px 5px 15px; 

- http://www.cssportal.com/css3-preview/borders.htm

47
répondu Quentin 2010-04-26 21:53:42

border-image-slice permettra de prolonger la CSS border-image gradient

ceci (tel que je le comprends) empêche le découpage par défaut de l '"image" en sections - sans lui, rien n'apparaît si la bordure est d'un seul côté, et si c'est autour de l'élément entier quatre petits gradients apparaissent dans chaque coin.

  border-bottom: 6px solid transparent;
  border-image: linear-gradient(to right, red , yellow);
  border-image-slice: 1;
34
répondu Dave Everitt 2017-02-09 21:58:56

Essayer cela, fonctionne très bien sur le web kit

http://jsfiddle.net/284sa /

.border { 
    width: 400px;
    padding: 20px;
    border-top: 10px solid #FFFF00;
    border-bottom:10px solid #FF0000;
    background-image: 
        linear-gradient(#FFFF00, #FF0000),
        linear-gradient(#FFFF00, #FF0000)
    ;
    background-size:10px 100%;
    background-position:0 0, 100% 0;
    background-repeat:no-repeat;
}

<div class="border">Hello!</div>
23
répondu GibboK 2013-08-30 09:33:14

C'est un hack, mais vous pouvez obtenir cet effet dans certains cas en utilisant l'image d'arrière-plan pour spécifier le gradient et masquer ensuite l'arrière-plan réel avec un box-shadow. Par exemple:

p {
  display: inline-block;
  width: 50px;
  height: 50px;
  /* The background is used to specify the border background */
  background: -moz-linear-gradient(45deg, #f00, #ff0);
  background: -webkit-linear-gradient(45deg, #f00, #ff0);
  /* Background origin is the padding box by default.
  Override to make the background cover the border as well. */
  -moz-background-origin: border;
  background-origin: border-box;
  /* A transparent border determines the width */
  border: 4px solid transparent;
  border-radius: 8px;
  box-shadow:
    inset 0 0 12px #0cc, /* Inset shadow */
    0 0 12px #0cc, /* Outset shadow */
    inset -999px 0 0 #fff; /* The background color */
}

de: http://blog.nateps.com/the-elusive-css-border-gradient

9
répondu Nate Smith 2011-09-21 01:04:03

je suis d'accord avec szajmon. Le seul problème avec ses réponses et celles de Quentin est la compatibilité entre les navigateurs.

HTML:

<div class="g">
    <div>bla</div>
</div>

CSS:

.g {
background-image: -webkit-linear-gradient(300deg, white, black, white); /* webkit browsers (Chrome & Safari) */
background-image: -moz-linear-gradient(300deg, white, black, white); /* Mozilla browsers (Firefox) */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#000000', gradientType='1'); /* Internet Explorer */
background-image: -o-linear-gradient(300deg,rgb(255,255,255),rgb(0,0,0) 50%,rgb(255,255,255) 100%); /* Opera */
}

.g > div { background: #fff; }
3
répondu Scotty 2012-01-20 23:10:53

Webkit supporte les gradients dans les bordures , et accepte maintenant le gradient dans le format Mozilla.

Firefox prétend supporter des gradients de deux façons:

  1. à l'Aide de la frontière de l'image avec border-image-source
  2. utilisant les couleurs border-right (right/left/top/bottom)

IE9 n'a pas de support.

2
répondu SamGoody 2012-07-11 21:50:03

un autre hack pour atteindre le même effet est d'utiliser plusieurs images d'arrière-plan, une fonctionnalité qui est prise en charge dans IE9+, newish Firefox, et la plupart des navigateurs WebKit-basés: http://caniuse.com/#feat=multibackgrounds

il y a aussi des options pour l'utilisation de plusieurs arrière-plans dans IE6-8: http://www.beyondhyper.com/css3-multiple-backgrounds-in-non-supportive-browsers /

par exemple, supposons que vous voulez un bord gauche large de 5px qui est un gradient linéaire du bleu au blanc. Créez le gradient comme une image et exportez vers un PNG. Liste de toutes les autres CSS origines après l'un pour la bordure gauche de gradient:

#theBox {
    background:
        url(/images/theBox-leftBorderGradient.png) left no-repeat,
        ...;
}

vous pouvez adapter cette technique aux gradients supérieurs, droits et inférieurs des bordures en changeant la partie de la position de fond de la propriété background .

voici un jsFiddle pour le donné exemple: http://jsfiddle.net/jLnDt /

2
répondu Daniel Trebbien 2012-09-12 23:18:49

frontières de Gradient de Css-trucs: http://css-tricks.com/examples/GradientBorder /

.multbg-top-to-bottom {
  border-top: 3px solid black;
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#000), to(transparent));
  background-image: -webkit-linear-gradient(#000, transparent);
  background-image:
      -moz-linear-gradient(#000, transparent),
      -moz-linear-gradient(#000, transparent);
  background-image:
      -o-linear-gradient(#000, transparent),
      -o-linear-gradient(#000, transparent);
  background-image: 
      linear-gradient(#000, transparent),
      linear-gradient(#000, transparent);
  -moz-background-size: 3px 100%;
  background-size: 3px 100%;
  background-position: 0 0, 100% 0;
  background-repeat: no-repeat; 
}
2
répondu VVS 2014-10-27 14:23:25

pour le soutien de navigateur croisé, vous pouvez essayer aussi bien imiter une bordure de gradient avec :before ou :after pseudo éléments, dépend de ce que vous voulez faire.

1
répondu Denees 2014-03-05 09:21:52

essayez ce code

.gradientBoxesWithOuterShadows { 
height: 200px;
width: 400px; 
padding: 20px;
background-color: white; 

/* outer shadows  (note the rgba is red, green, blue, alpha) */
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.4); 
-moz-box-shadow: 0px 1px 6px rgba(23, 69, 88, .5);

/* rounded corners */
-webkit-border-radius: 12px;
-moz-border-radius: 7px; 
border-radius: 7px;

/* gradients */
background: -webkit-gradient(linear, left top, left bottom, 
color-stop(0%, white), color-stop(15%, white), color-stop(100%, #D7E9F5)); 
background: -moz-linear-gradient(top, white 0%, white 55%, #D5E4F3 130%); 
}

ou peut-être se référer à ce violon: http://jsfiddle.net/necolas/vqnk9 /

0
répondu x'tian 2014-05-15 08:07:29

voici une belle façon semi-cross-browser pour avoir des bordures de gradient qui s'estompent à mi-chemin. Simplement en réglant le "color-stop à rgba(0, 0, 0, 0)

.fade-out-borders {
min-height: 200px; /* for example */

-webkit-border-image: -webkit-gradient(linear, 0 0, 0 50%, from(black), to(rgba(0, 0, 0, 0))) 1 100%;
-webkit-border-image: -webkit-linear-gradient(black, rgba(0, 0, 0, 0) 50%) 1 100%;
-moz-border-image: -moz-linear-gradient(black, rgba(0, 0, 0, 0) 50%) 1 100%;
-o-border-image: -o-linear-gradient(black, rgba(0, 0, 0, 0) 50%) 1 100%;
border-image: linear-gradient(to bottom, black, rgba(0, 0, 0, 0) 50%) 1 100%;
}

<div class="fade-out-border"></div>
"151930920 d'Utilisation", a expliqué:

Formal grammar: linear-gradient(  [ <angle> | to <side-or-corner> ,]? <color-stop> [, <color-stop>]+ )
                              \---------------------------------/ \----------------------------/
                                Definition of the gradient line         List of color stops  

plus ici: https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient

0
répondu Yes Barry 2014-07-03 00:40:23