그라디언트 테두리


274

테두리에 그라디언트를 적용하려고 하는데이 작업이 간단하다고 생각했습니다.

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

그러나 이것은 작동하지 않습니다.

테두리 그라디언트를 수행하는 올바른 방법이 무엇인지 아는 사람이 있습니까?

답변:


191

이제 WebKit (및 Chrome 12 이상)은 그라디언트를 테두리 이미지로 지원합니다.

-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/ 브라우저 지원 : http://caniuse.com/#search=border-image


21
그 링크는 ... 전혀 국경 이미지를 언급하지 않습니다 /
aaaidan

4
경계 반경을 사용할 때 어떤 브라우저에서도 작동하지 않습니다! 분명히 border-image 속성은 border-radius가 켜져 있더라도 항상 사각형 테두리를 만듭니다. 따라서 중첩 요소 (또는 : before 요소)의 대안이 가장 유연한 솔루션입니다. 다음은이 작업을 수행 할 수있는 easyest 방법 JSFiddle 이잖아 쇼입니다 : jsfiddle.net/wschwarz/e2ckdp2v
월터 슈왈츠

112

테두리 대신 배경 그라데이션과 패딩을 사용합니다. 같은 모양이지만 훨씬 더 쉽고 더 많이 지원됩니다.

간단한 예 :

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


편집 : :before@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>


3
CSS를 통해 모든 것을 제어 할 수 있고 HTML 마크 업이 깨끗하게 유지되므로 : before 요소를 사용하는 것이 좋습니다. 다음은 가장 쉬운 방법을 보여주는 JSFiddle입니다. jsfiddle.net/wschwarz/e2ckdp2v
Walter Schwarz

"훨씬 더 많은 지원"은 IE10에 대한 지원을 포함 함을 의미합니다. CanIUse 테두리 이미지CanIUse 그라디언트를 참조하십시오 .
aug

56

border-image-slice CSS 테두리 이미지 그라디언트를 확장합니다

이것은 (내가 이해하는 것처럼) "이미지"가 섹션으로 기본 슬라이스되는 것을 방지합니다. 테두리가 없으면 테두리가 한쪽에만 있고 전체 요소 주위에 있으면 작은 구배가 각 모서리에 나타납니다.

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

8
Chrome에서이와 결합 border-radius하면 경계 반경이 무시됩니다. (
Ben

49

Mozilla는 현재 속기 배경뿐만 아니라 background-image 속성 값으로 CSS 그라디언트 만 지원합니다.

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

이것을 시도하십시오, 웹 키트에서 잘 작동합니다

.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
왜 상하가 단색입니까?
john ktejik

11

그것은 해킹이지만 배경 이미지를 사용하여 그라디언트를 지정한 다음 상자 그림자로 실제 배경을 마스킹 하여이 효과를 얻을 수 있습니다. 예를 들면 다음과 같습니다.

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

보낸 사람 : http://blog.nateps.com/the-elusive-css-border-gradient


4

이것을 시도하십시오, 그것은 나를 위해 일했습니다.

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>

링크는 바이올린 https://jsfiddle.net/yash009/kayjqve3/1/에 있습니다. 이것이 도움이되기를 바랍니다.


3

나는 szajmon에 동의합니다. 그와 Quentin의 답변에 대한 유일한 문제는 브라우저 간 호환성입니다.

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
filter그런 사소한 것에 IE를 지원 하지 않으 려면 단단한 테두리를 사용하십시오.
Ricardo Zea

@Ricardo-왜 설명해야합니까?
Alohci

@Alohci, 물론 많은 이유가 있습니다. 당신의 평판을 가진 사람이 이미 이런 것들을 알고 있기 때문에 나의 설명은 당신을위한 것이 아니라는 것을 알고 있습니다. 그것은 그것을 알지 못하거나 배우고있는 다른 사람들을위한 것입니다. 1. 우아한 분해 를 사용하는 것이 더 똑똑합니다 . 2. 우리는 웹 디자이너 / 개발자로서 브라우저가 아닌 사용자를위한 웹 사이트 구축에 대해 생각해야합니다. 그냥 3 점으로 남겨 두십시오. 3 '할 수있다'고해서 반드시 '해야'한다는 의미는 아닙니다. 인라인 스타일링과 피할 수없는 것과 동일합니다 !important. 이제 Alohci, 당신 차례도 이유를 설명합니다 :)
Ricardo Zea

그리고 이 댓글이 하나 개의 합이 모든 걸 포기하고. 나는 거기에 더 많은 양심이 있다고 확신한다.
Ricardo Zea


3

아래 예제를 시도하십시오.

.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

동일한 효과를 얻기위한 또 다른 해킹은 여러 배경 이미지, IE9 +에서 지원되는 기능, 최신 Firefox 및 대부분의 WebKit 기반 브라우저를 이용하는 것입니다 : http://caniuse.com/#feat=multibackgrounds

IE6-8에서 여러 배경을 사용하는 옵션도 있습니다. http://www.beyondhyper.com/css3-multiple-backgrounds-in-non-supportive-browsers/

예를 들어, 파란색에서 흰색으로 선형 그라디언트 인 5px 너비의 왼쪽 테두리를 원한다고 가정하십시오. 이미지로 그라디언트를 만들고 PNG로 내 보냅니다. 다음에 다른 CSS 배경 나열하십시오.왼쪽 테두리 그라디언트 다음에 .

#상자 {
    배경:
        url (/images/theBox-leftBorderGradient.png) 왼쪽 반복,
        ...;
}

background속기 속성 의 배경 위치 부분을 변경하여이 기술을 위쪽, 오른쪽 및 아래쪽 테두리 그라데이션에 적용 할 수 있습니다 .

주어진 예제에 대한 jsFiddle은 다음과 같습니다. http://jsfiddle.net/jLnDt/


2

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

1

브라우저 간 지원을 위해 원하는 요소에 따라 :before또는 :after의사 요소 로 그라디언트 테두리를 모방 할 수 있습니다 .


1

그라디언트 테두리의

사용 국경 이미지 CSS 속성을

크레딧 : Mozilla의 border-image

.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

이 코드를 사용해보십시오

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

또는이 바이올린을 참조하십시오 : http://jsfiddle.net/necolas/vqnk9/


0

반쯤 아래로 페이드 아웃되는 그라디언트 테두리를 갖는 멋진 세미 크로스 브라우저 방법입니다. 간단하게 설정하여 색상 정지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>

사용법 설명 :

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

더 여기 : https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient


-2

https://css-tricks.com/gradient-borders-in-css/에 대한 멋진 CSS 트릭 기사가 있습니다.

여러 배경과 background-origin 속성을 사용하여 매우 간단하고 단일 요소 인 솔루션을 만들 수있었습니다.

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

이 접근 방식의 좋은 점은 다음과 같습니다.

  1. Z- 색인의 영향을받지 않습니다
  2. 투명 테두리의 너비 만 변경하면 쉽게 확장 할 수 있습니다

확인하십시오 : https://codepen.io/AlexOverbeck/pen/axGQyv?editors=1100

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.