Degrade kenarlıklar


274

Bir kenarlığa bir degrade uygulamak çalışıyorum, bunu yapmak kadar basit olduğunu düşündüm:

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

Ancak bu işe yaramıyor.

Sınır degradeleri yapmanın doğru yolunun ne olduğunu bilen var mı?

Yanıtlar:


191

WebKit şimdi (ve en azından Chrome 12) degradeleri kenarlık resmi olarak destekler:

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

Prova bağlantısı - http://www.webkit.org/blog/1424/css3-gradients/
Tarayıcı desteği: http://caniuse.com/#search=border-image


21
Bu bağlantıda sınır resminden hiç bahsedilmiyor ...: /
aaaidan

4
Sınır yarıçapı kullanılırken hiçbir tarayıcıda çalışmaz! Görünüşe göre, sınır görüntü özelliği sınır yarıçapı açık olsa bile her zaman kare kenarlıklar oluşturur. Bu nedenle iç içe elemanlara (veya a: önce elemanına) alternatif en esnek çözümdür. İşte bir JSFiddle, bu yapılabilecek en kolay yolu gösterir: jsfiddle.net/wschwarz/e2ckdp2v
Walter Schwarz

112

kenarlıklar yerine, arka plan gradyanları ve dolgu kullanacağım. aynı görünüm, ama çok daha kolay, daha desteklenen.

basit bir örnek:

.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; }
<div class="g">
	<div>bla</div>
</div>


DÜZENLEME: :before@WalterSchwarz'ın işaret ettiği gibi seçiciden de yararlanabilirsiniz :

body {
    padding: 20px;
}
.circle {
    width: 100%;
    height: 200px;
    background: linear-gradient(to top, #3acfd5 0%, #3a4ed5 100%);
    border-radius: 100%;
    position: relative;
    text-align: center;
    padding: 20px;
    box-sizing: border-box;
}
.circle::before {
    border-radius: 100%;
    content: '';
    background-image: linear-gradient(to bottom, #3acfd5 0%, #3a4ed5 100%);
    padding: 10px;
    width: 100%;
    height:100%;
    top: -10px;
    left: -10px;
    position:absolute;
    z-index:-1;
}
<div class="circle">Test</div>


3
A: before öğesini kullanmak daha iyidir, çünkü CSS üzerinden tam kontrole sahip olursunuz ve HTML işaretlemesi temiz kalır. İşte bunun yapılabilecek en kolay yolu gösteren bir JSFiddle: jsfiddle.net/wschwarz/e2ckdp2v
Walter Schwarz

"Çok daha fazla desteklenen" ifadesinin IE10 desteği de dahil olacağını lütfen unutmayın. Bkz. CanIUse kenarlık resmini vs CanIUse Gradient .
Ağustos

56

border-image-slice bir CSS kenar resmi gradyanını genişletir

Bu (anladığım kadarıyla), "görüntünün" bölümlere varsayılan dilimlenmesini önler - onsuz, sınır yalnızca bir tarafta ise ve tüm öğenin etrafındaysa her köşede dört küçük degrade görünür.

  border-bottom: 6px solid transparent;
  border-image: linear-gradient(to right, red , yellow);
  border-image-slice: 1;

8
Chrome'da, bununla birleştirilirse border-radiuskenarlık yarıçapı yoksayılır :(
Ben

49

Mozilla şu anda yalnızca arka plan görüntüsü özelliğinin değerleri olarak ve stenografi arka planında CSS gradyanlarını desteklemektedir.

- 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


27

Bunu deneyin, web kitinde iyi çalışıyor

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


1
Üstler ve dipler neden düz renktedir?
john ktejik

11

Bu bir hack'tir, ancak bazı durumlarda bu efekti degradeyi belirtmek için arka plan görüntüsünü kullanarak ve ardından gerçek arka planı bir kutu gölgesiyle maskeleyerek elde edebilirsiniz. Örneğin:

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 */
}

Gönderen: http://blog.nateps.com/the-elusive-css-border-gradient


4

Bunu dene, benim için çalıştı.

div{
  border-radius: 20px;
  height: 70vh;
  overflow: hidden;
}

div::before{
  content: '';
  display: block;
  box-sizing: border-box;
  height: 100%;

  border: 1em solid transparent;
  border-image: linear-gradient(to top, red 0%, blue 100%);
  border-image-slice: 1;
}
<div></div>

Bağlantı keman ile https://jsfiddle.net/yash009/kayjqve3/1/ umarım bu yardımcı olur


3

Ben szajmon'a katılıyorum. Onun ve Quentin'in cevaplarıyla ilgili tek sorun tarayıcılar arası uyumluluk.

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
Lütfen, filterböyle küçük bir şey için IE'yi desteklemek için hayır , sadece sağlam bir sınır kullanın.
Ricardo Zea

@Ricardo - nedenini açıklamak ister misiniz?
Alohci

@Alohci, elbette, birçok sebep var. Unutmayın ki, şöhretinizi bilen bir kişi bu şeyleri zaten biliyordur, bunu bilmeyen ve / veya öğrenen diğerleri için: 1. Zarif Bozunumu kullanmak daha akıllıdır . 2. Biz Web Tasarımcıları / Geliştiricileri olarak biz tarayıcılar için değil, kullanıcılar için web siteleri oluşturmayı düşünmeliyiz. Ve sadece 3 noktada bırakmak için, 3. 'Yapabileceğin' bunu yapman gerektiği anlamına gelmez. Satır içi stil ve kaçınılmaz olanlarla aynı !important. Alohci, sıranız nedenini de açıklıyor :)
Ricardo Zea

Ve sonra bu yorum ve bu her şeyi özetliyor. Eminim orada daha çok şey var.
Ricardo Zea


3

Aşağıdaki örneği deneyin:

.border-gradient {
      border-width: 5px 5px 5px 5px;
      border-image: linear-gradient(45deg, rgba(100,57,242,1) 0%, rgba(242,55,55,1) 100%);
      border-image-slice: 9;
      border-style: solid;
}

2

Aynı efekti elde etmek için bir başka saldırı, birden fazla arka plan görüntüsü, IE9 + 'da desteklenen bir özellik, newish Firefox ve çoğu WebKit tabanlı tarayıcı kullanmaktır: http://caniuse.com/#feat=multibackgrounds

IE6-8'de birden fazla arka plan kullanmak için bazı seçenekler de vardır: http://www.beyondhyper.com/css3-multiple-backgrounds-in-non-supportive-browsers/

Örneğin, maviden beyaza doğrusal bir gradyan olan 5 piksel genişliğinde bir sol kenarlık istediğinizi varsayalım. Degradeyi bir görüntü olarak oluşturun ve bir PNG'ye dışa aktarın. Başka bir CSS arka listeleyin sonra sol sınır renk geçişine ilişkin one:

#kutu {
    arka fon:
        url (/images/theBox-leftBorderGradient.png) yinelenmedi,
        ...;
}

backgroundShorthand özelliğinin arka plan konumu bölümünü değiştirerek bu tekniği üst, sağ ve alt kenarlık gradyanlarına uyarlayabilirsiniz .

Verilen örnek için bir jsFiddle: http://jsfiddle.net/jLnDt/


2

Css-Tricks'ten Degrade Kenarlıklar: 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; 
}

1

Tarayıcılar arası destek için , ne yapmak istediğinize bağlı olarak, :beforeya da :aftersahte öğelerle degrade kenarlığı taklit etmeyi de deneyebilirsiniz .


1

Degrade Kenarlık Örneği

Kullanılması border-image css özelliğini

Kredi: Mozilla'da sınır resmi

.grad-border {
  height: 1px;
  width: 85%;
  margin: 0 auto;
  display: flex;
}
.left-border, .right-border {
  width: 50%;
  border-bottom: 2px solid #695f52;
  display: inline-block;
}
.left-border {
  border-image: linear-gradient(270deg, #b3b3b3, #fff) 1;
}
.right-border {
  border-image: linear-gradient(90deg, #b3b3b3, #fff) 1;
}
<div class="grad-border">
  <div class="left-border"></div>
  <div class="right-border"></div>
</div>


0

bu kodu dene

.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%); 
}

ya da belki bu kemana bakın: http://jsfiddle.net/necolas/vqnk9/


0

İşte yarıya inen degrade kenarlıklara sahip güzel bir yarı çapraz tarayıcı yolu. Basitçe ayarlayarak renk durağı içinrgba(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>

Kullanım açıklaması:

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

Daha fazla bilgi için: https://developer.mozilla.org/tr-TR/docs/Web/CSS/linear-gradient


-2

Bu konuda güzel bir css hilesi makalesi var: https://css-tricks.com/gradient-borders-in-css/

Ben çok arka plan ve arka plan kökenli özelliği kullanarak oldukça basit, tek bir öğe, bu çözüm bulmak mümkün.

.wrapper {
  background: linear-gradient(#222, #222), 
              linear-gradient(to right, red, purple);
  background-origin: padding-box, border-box;
  background-repeat: no-repeat; /* this is important */
  border: 5px solid transparent;
}

Bu yaklaşımla ilgili güzel şeyler:

  1. Z-endeksinden etkilenmez
  2. Şeffaf kenarlığın genişliğini değiştirerek kolayca ölçeklenebilir

Şuna göz atın: https://codepen.io/AlexOverbeck/pen/axGQyv?editors=1100

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.