CSS에서 테두리 불투명도를 설정할 수 있습니까?


409

이와 같은 요소로 요소의 테두리를 반투명하게 만드는 CSS 방법이 있습니까?

border-opacity: 0.7;

그렇지 않다면 누구나 이미지를 사용하지 않고 어떻게 할 수 있는지 알고 있습니까?

답변:


626

불행히도 opacity요소는 전체 요소 (텍스트 포함)를 반투명하게 만듭니다. 테두리를 반투명하게 만드는 가장 좋은 방법은 rgba 색상 형식을 사용하는 것입니다. 예를 들어 불투명도가 50 % 인 빨간색 테두리가 표시됩니다.

div {
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}

이 접근법의 문제점은 일부 브라우저가 rgba형식을 이해하지 못하며 이것이 전체 선언 인 경우 테두리를 전혀 표시하지 않는다는 것입니다. 해결책은 두 가지 테두리 선언을 제공하는 것입니다. 첫 번째는 가짜 불투명하고 두 번째는 실제입니다. 브라우저가 가능하면 두 번째 브라우저를 사용하고 그렇지 않은 경우 첫 번째 브라우저를 사용합니다.

div {
    border: 1px solid rgb(127, 0, 0);
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}

첫 번째 테두리 선언은 흰색 배경 위에 50 % 불투명 한 빨간색 테두리와 동일한 색상이됩니다 (테두리 아래의 그래픽은 번지지 않지만).

업데이트 : "background-clip : padding-box;"를 추가했습니다. 이 답변에 (댓글에서 SooDesuNe의 제안에 따라) 단색 배경색을 적용하더라도 테두리가 투명하게 유지됩니다.


네, 그리고 우리는 그가 처음 겪었던 문제로 돌아 왔습니다. ^^ "나는 테두리 색상에 rgba를 사용하는 것에 대해 생각했지만, 현대적인 브라우저에서는 잘 작동하지 않습니다." 내 솔루션이 거의 모든 브라우저에서 작동하는 동안
Breezer

23
실제로 rgba는 최신 브라우저에서 훌륭하게 작동합니다 (IE6-8이 "현대"라고 생각하지 않는 한).
kingjeffrey

4
잘 그들은 그들이 P라고 가정합니다. 그리고 당신이 그것들을 사용하여 50 % 이상을 얻었을 때, 당신은 그것이 적어도 ie7 +를 위해 잘 작동한다는 것을 알 것입니다
Breezer

42
이것이 바로 "가짜 불투명도"가 떨어지는 이유입니다. 모든 브라우저가 동일하게 렌더링 될 필요는 없다는 사실을 인정하면서 웹 디자이너로서의 삶이 훨씬 쉬워졌습니다. 을 지원하면 border-radius모서리가 둥글게됩니다. 그렇지 않다면 그렇지 않습니다. 컨텐츠는 여전히 액세스 가능하지만 여전히보기 좋으며, 유능한 브라우저를 사용하는 경우 더 좋아 보입니다. 지난 1.5 년간 모든 프로젝트에서 이러한 방식으로 운영 한 고객 중 한 명이이 문제에 대해 불만을 제기 한 적이 없습니다.
kingjeffrey

23
경계가있는 컨텐츠 뒤의 컨텐츠가 경계 요소 자체의 배경색이 아닌 빛을 발하게하려면 background-clip:padding-box;역시 설정해야합니다 .
SooDesuNe

134

오프셋이 0 인 단색 그림자를 사용하면 쉽습니다.

#foo {
  border-radius: 1px;
  box-shadow: 0px 0px 0px 8px rgba(0,0,0,0.3);       
}

또한 요소에 테두리 반경을 설정하면 둥근 테두리가 생깁니다.

jsFiddle 데모

여기에 이미지 설명을 입력하십시오


이것은 항상 작동합니다. 스 니펫에 감사드립니다. ) 예 : 국경을 넘어서
Thomas Richter

이것은 조심해서 사용해야합니다! box-shadow크기가없고 레이아웃이 깨져서 여백이 고르지 않게됩니다! jsfiddle.net/bj81hew7/2
William

14

다른 사람들이 언급했듯이 : CSS-3은 rgba(...)구문을 사용하여 불투명도 (알파) 값으로 테두리 색상을 지정할 수 있다고 말합니다 .

확인하고 싶은 경우에 간단한 예가 있습니다.

  • Safari 및 Chrome에서 작동합니다 (아마도 모든 웹킷 브라우저에서 작동 함).

  • Firefox에서 작동합니다

  • IE에서 전혀 작동하지 않는다고 생각하지만 작동시킬 필터 또는 동작이 있다고 생각합니다.

이 stackoverflow post 도 있습니다. 이것은 다른 문제를 제안합니다. 즉, 테두리가 지정한 배경색 (또는 배경 이미지)을 맨 위에 렌더링합니다. 따라서 많은 경우 테두리 알파의 유용성을 제한합니다.


4
경계 문제는 해결 될 수 있으며 background-clip: padding-box;지원 될 때까지 -webkit 및 -moz 공급 업체 확장을 사용할 수 있습니다.
kingjeffrey

귀하가 연결 한 질문에이 답변을 추가했습니다.
kingjeffrey

6

W3C 유효성 검사기를 사용하여 CSS 코딩을 확인하면 주요 브라우저에서 작동하더라도 CSS 코드가 적합한 지 확인할 수 있습니다.

위에서 작성된 CSS를 통해 투명한 테두리 만들기

border: 1px solid rgba(255, 0, 0, .5);

CSS3조차도 W3C 표준에서 허용되지 않습니다. 직접 입력 유효성 검사기를 다음 CSS 코드와 함께 사용했습니다.

.test { border: 1px solid rgba(255, 0, 0, .5); }

결과는

값 오류 : 테두리 너무 많은 값 또는 값이 인식되지 않습니다 : 1px solid rgba (255,0,0,0.5)

안타깝게도 W3C에서는 알파 값 ( "rgb"끝에있는 문자 "a")을 테두리 색 값의 일부로 받아 들일 수 없습니다. 모든 브라우저에서 작동하기 때문에 왜 표준화되지 않았는지 궁금합니다. 유일한 단점은 W3C 표준을 고수할지 아니면 CSS에서 무언가를 만들기 위해 비켜 놓을 것인지입니다.

쓰다 W3C 온라인 CSS 유효성 검사기 / 직접 입력 .

유효성 검사기를 사용하여 작업을 확인하는 것이 좋습니다. 코딩 작업 후 여러 시간 동안 교차 작업을 수행 할 때 코딩에서 작거나 큰 오류를 찾는 데 도움이됩니다.


11
잘못되었습니다. 이것은 W3C 표준에서 완벽하게 수용 가능하며 유효성 검사기의 버그입니다. 이 답변을 참조하십시오 . 유효성 검사기를 사용하는 것이 좋습니다. 그렇지만 모든 것을 신뢰하지는 마십시오.
BoltClock

5

* 내가 아는 한 이런 종류의 상황에서 내가 일반적으로하는 일이 없다는 것은 더 큰 크기 ((테두리 크기 * 2) + 원래 크기) 아래에 블록을 만들고 사용하여 투명하게 만드는 것입니다.

filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;

여기에 예가 있습니다

#main{
    width:400px;
    overflow:hidden;
    position:relative;
}
.border{
    width:100%;
    position:absolute;
    height:100%;
    background-color:#F00;
    filter:alpha(opacity=50);
    -moz-opacity:0.5;
    -khtml-opacity: 0.5;
    opacity: 0.5;
}
.content{
    margin:15px;/*size of border*/
    background-color:black;
}
<div id="main">
    <div class="border">
    </div>
    <div class="content">
        testing
    </div>
</div>

최신 정보:

이 질문은 모두 8 세 이상이기 때문에이 답변은 구식입니다. 오늘날 모든 최신 브라우저는 rgba, 상자 그림자 등을 지원합니다. 그러나 이것은 8 년 전과 비교했을 때 좋은 예입니다.


그래, 그게 내가 실제로 한 일이며, 요소의 위치로 인해 혼란을 겪습니다.
mcbeav

내가 어떻게 생각하고 있었는지 더 명확하게 볼 수 있도록 예제를 추가했습니다.
Breezer

그것은 할 수 할 수 -하지만 광범위한 크로스 브라우저 지원. 그러나 배경색에서 CSS 불투명도를 지원하는 모든 브라우저가 rgba(...)테두리 색도 지원할 가능성이 높습니다 . 여기서 시도해 볼 수 있습니다 .
Lee

@Lee, IE는 "필터"불투명도를 지원하지만 어떤 형태의 rgba도 지원하지 않습니다 (IE9까지).
kingjeffrey

2

다른 해결책으로 에서 작업 일부 경우 다음 변경 border-styledotted.

전경색과 배경색 사이에 교대로 픽셀 그룹이있는 것은 부분적으로 투명한 픽셀의 연속적인 선과 동일하지 않습니다. 반면에 CSS는 훨씬 적게 필요하며 브라우저 별 지시문이 없어도 모든 브라우저에서 훨씬 더 호환됩니다.


0

다른 답변은 국경 불투명도 문제의 기술적 측면을 다루는 반면 해킹을 제시하고 싶습니다 (순수한 CSS 및 HTML 만 해당). 기본적으로 테두리 div와 내용 div가있는 컨테이너 div를 만듭니다.

<div class="container">
  <div class="border-box"></div>
  <div class="content-box"></div>
</div>

그런 다음 CSS : (콘텐츠 경계를 없음으로 설정하고 경계 두께를 고려하도록 배치를 처리하십시오)

.container {
  width: 20vw;
  height: 20vw;
  position: relative;
}
.border-box {
  width: 100%;
  height: 100%;
  border: 5px solid black;
  position: absolute;
  opacity: 0.5;
}
.content-box {
  width: 100%;
  height: 100%;
  border: none;
  background: green;
  top: 5px;
  left: 5px;
  position: absolute;
}

0

아니요, CSS로 테두리의 불투명도 설정할 수 는 없습니다 .

예를 들어, 색상을 모르는 경우을 사용하여 테두리의 불투명도 만 변경할 수있는 방법이 없습니다 rgba().


-1

이 시도:

<h2>Snippet for making borders transparent</h2>
<div>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta.
    Mauris massa. Vestibulum lacinia arcu eget nulla. <b>Lorem ipsum dolor sit amet, consectetur adipiscing elit</b>. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim
    lacinia nunc. <i>Lorem ipsum dolor sit amet, consectetur adipiscing elit</i>. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor.
    <i>Lorem ipsum dolor sit amet, consectetur adipiscing elit</i>. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod
    in, nibh. Quisque volutpat condimentum velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. Sed lacinia, urna non tincidunt mattis, tortor neque adipiscing diam, a cursus ipsum ante quis
    turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. <b>Nam nec ante</b>. Suspendisse in justo eu magna luctus suscipit. Sed lectus. <i>Sed convallis tristique sem</i>.
    Integer euismod lacus luctus magna. <b>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos</b>. Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum
    ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum. Morbi in ipsum sit amet pede facilisis laoreet. Donec lacus nunc,
    viverra nec, blandit vel, egestas et, augue. Vestibulum tincidunt malesuada tellus. Ut ultrices ultrices enim. <b>Suspendisse in justo eu magna luctus suscipit</b>. Curabitur sit amet mauris. Morbi in dui quis est pulvinar ullamcorper. </p>
</div>
<div id="transparentBorder">
  This &lt;div&gt; has transparent borders.
</div>

그리고 여기 우리의 마법 CSS가 있습니다.

* {
  padding: 10pt;
  font: 13px/1.5 Helvetica Neue, Arial, Helvetica, 'Liberation Sans', FreeSans, sans-serif;
}

b {
  font-weight: bold;
}

i {
  font-style: oblique;
}

H2 {
  font-size: 2em;
}

div[id='transparentBorder'] {
  height: 100px;
  width: 200px;
  padding: 10px;
  position: absolute;
  top: 40%;
  left: 30%;
  text-align: center;
  background: Black;
  border-radius: 4px;
  border: 10pt solid rgba(0, 0, 0, 0.5);
  -moz-background-clip: border;
  /* Firefox 3.6 */
  -webkit-background-clip: border;
  /* Safari 4? Chrome 6? */
  background-clip: border-box;
  /* Firefox 4, Safari 5, Opera 10, IE 9 */
  -moz-background-clip: padding;
  /* Firefox 3.6 */
  -webkit-background-clip: padding;
  /* Safari 4? Chrome 6? */
  background-clip: padding-box;
  /* Firefox 4, Safari 5, Opera 10, IE 9 */
  text-align: center;
  margin: 0;
  color: #fff;
  cursor: pointer;
}

여기서 데모를 확인 하십시오.

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