Perbatasan gradien

274

Saya mencoba menerapkan gradien ke perbatasan, saya pikir itu sesederhana melakukan ini:

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

Tetapi ini tidak berhasil.

Apakah ada yang tahu apa cara yang benar untuk melakukan gradien perbatasan?

Menandai
sumber

Jawaban:

191

WebKit sekarang (dan setidaknya Chrome 12) mendukung gradien sebagai gambar tepi:

-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/
Dukungan browser: http://caniuse.com/#search=border-image

Tony
sumber
21
Tautan itu tidak menyebutkan gambar perbatasan sama sekali ...: /
aaaidan
4
Tidak berfungsi di peramban apa pun saat menggunakan radius batas! Rupanya properti border-image selalu membuat batas-batas kuadrat bahkan jika radius-perbatasan aktif. Jadi alternatif dengan elemen bersarang (atau elemen: sebelum) adalah solusi yang paling fleksibel. Inilah JSFiddle yang menunjukkan cara termudah untuk melakukannya: jsfiddle.net/wschwarz/e2ckdp2v
Walter Schwarz
112

alih-alih perbatasan, saya akan menggunakan gradien latar belakang dan padding. terlihat sama, tetapi jauh lebih mudah, lebih didukung.

contoh sederhana:

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


EDIT: Anda juga dapat memanfaatkan :beforepemilih seperti yang ditunjukkan @WalterSchwarz:

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>

szajmon
sumber
3
Menggunakan elemen: sebelum lebih baik, karena Anda kemudian memiliki kontrol penuh melalui CSS dan markup HTML tetap bersih. Ini adalah JSFiddle yang menunjukkan cara termudah untuk melakukannya: jsfiddle.net/wschwarz/e2ckdp2v
Walter Schwarz
Harap dicatat bahwa "jauh lebih didukung" akan berarti termasuk dukungan untuk IE10. Lihat CanIUse border-image vs CanIUse Gradient .
Agustus
56

border-image-slice akan memperluas gradien gambar tepi CSS

Ini (seperti yang saya pahami) mencegah pengiris default "gambar" menjadi beberapa bagian - tanpanya, tidak ada yang muncul jika perbatasan berada di satu sisi saja, dan jika itu di sekitar seluruh elemen empat gradien kecil muncul di setiap sudut.

  border-bottom: 6px solid transparent;
  border-image: linear-gradient(to right, red , yellow);
  border-image-slice: 1;
Dave Everitt
sumber
8
Di Chrome, jika ini dikombinasikan dengan border-radius, jari-jari perbatasan diabaikan :(
Ben
49

Mozilla saat ini hanya mendukung gradien CSS sebagai nilai properti gambar latar belakang, dan juga dalam latar belakang steno.

- 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

Quentin
sumber
27

Coba ini, berfungsi baik di web-kit

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

GibboK
sumber
1
mengapa atasan dan bawahan warna solid?
john ktejik
11

Ini adalah retasan, tetapi Anda dapat mencapai efek ini dalam beberapa kasus dengan menggunakan gambar latar belakang untuk menentukan gradien dan kemudian menutupi latar belakang sebenarnya dengan bayangan kotak. Sebagai contoh:

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

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

Nate Smith
sumber
4

Coba ini, itu berhasil untuk saya.

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>

Tautannya adalah ke biola https://jsfiddle.net/yash009/kayjqve3/1/ harap ini membantu

Yash009
sumber
3

Saya setuju dengan szajmon. Satu-satunya masalah dengan jawabannya dan Quentin adalah kompatibilitas lintas-browser.

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; }
Scotty
sumber
3
Tolong, tidak filteruntuk mendukung IE untuk hal sepele seperti itu, cukup gunakan perbatasan padat.
Ricardo Zea
@ Ricardo - peduli untuk menjelaskan mengapa?
Alohci
@Alohci, tentu saja, banyak alasan. Perhatikan bahwa penjelasan saya bukan untuk Anda karena seseorang dengan reputasi Anda sudah mengetahui hal-hal ini, itu untuk orang lain yang tidak mengetahuinya dan / atau sedang belajar: 1. Lebih pintar menggunakan Degradasi Anggun . 2. Kita sebagai Desainer / Pengembang Web harus berpikir tentang membangun situs web untuk pengguna, bukan untuk browser. Dan hanya membiarkannya pada 3 poin, 3. Hanya karena Anda 'dapat' melakukannya bukan berarti Anda 'harus' melakukannya. Sama seperti dengan inline styling dan yang tidak terhindarkan !important. Sekarang, Alohci, giliran Anda menjelaskan alasannya juga :)
Ricardo Zea
Dan kemudian komentar ini dan yang satu ini merangkum semuanya. Saya yakin ada lebih banyak lagi orang di sana.
Ricardo Zea
3

Coba contoh di bawah ini:

.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;
}
Vijay Chauhan
sumber
2

Peretasan lain untuk mendapatkan efek yang sama adalah dengan memanfaatkan beberapa gambar latar belakang, fitur yang didukung di IE9 +, Firefox yang baru, dan sebagian besar peramban berbasis WebKit: http://caniuse.com/#feat=multibackgrounds

Ada juga beberapa opsi untuk menggunakan beberapa latar belakang di IE6-8: http://www.beyondhyper.com/css3-multiple-backgrounds-in-non-supportive-browsers/

Misalnya, Anda menginginkan batas kiri selebar 5px yang merupakan gradien linier dari biru ke putih. Buat gradien sebagai gambar dan ekspor ke PNG. Buat daftar latar belakang CSS lainnya setelah yang untuk gradien batas kiri:

#kotak {
    Latar Belakang:
        url (/images/theBox-leftBorderGradient.png) tidak boleh diulang,
        ...;
}

Anda dapat menyesuaikan teknik ini ke gradien batas atas, kanan, dan bawah dengan mengubah bagian posisi latar belakang dari backgroundproperti steno.

Berikut adalah jsFiddle untuk contoh yang diberikan: http://jsfiddle.net/jLnDt/

Daniel Trebbien
sumber
2

Gradient Borders dari Css-Tricks: 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; 
}
VVS
sumber
1

Untuk dukungan lintas-browser, Anda dapat mencoba juga meniru batas gradien dengan :beforeatau :afterelemen semu, tergantung pada apa yang ingin Anda lakukan.

Denees
sumber
1

Contoh untuk Gradient Border

Menggunakan properti css border-image

Penghargaan untuk: gambar-batas di Mozilla

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

Magaesh
sumber
0

coba kode ini

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

atau mungkin merujuk ke biola ini: http://jsfiddle.net/necolas/vqnk9/

x'tian
sumber
0

Berikut cara semi-browser yang bagus untuk memiliki batas gradien yang menghilang setengah jalan. Cukup dengan mengatur color-stop torgba(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>

Penggunaan menjelaskan:

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

Lebih lanjut di sini: https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient

Ya Barry
sumber
-2

Ada artikel trik css yang bagus tentang ini di sini: https://css-tricks.com/gradient-borders-in-css/

Saya dapat menemukan solusi yang sangat sederhana, elemen tunggal, untuk ini menggunakan beberapa latar belakang dan properti latar belakang.

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

Hal-hal baik tentang pendekatan ini adalah:

  1. Itu tidak terpengaruh oleh z-index
  2. Ini dapat dengan mudah skala hanya dengan mengubah lebar perbatasan transparan

Lihat itu: https://codepen.io/AlexOverbeck/pen/axGQyv?editors=1100

Alex
sumber