CSS 삼각형은 어떻게 작동합니까?


1846

CSS Tricks-Shapes of CSS 에는 다양한 CSS 모양이 있으며 특히 삼각형에 의지합니다.

CSS 삼각형

#triangle-up {
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
}
<div id="triangle-up"></div>

어떻게 그리고 왜 작동합니까?


59
당신은 할 수 있습니다 : jsfiddle.net/wbZet
mskfisher

55
없는 광장은 어떻습니까? jsfiddle.net/minitech/sZgaa
Ry-

1
@mskfisher 정삼각형의 아래쪽 테두리 크기는 ceil (sqrt (3) * 60)이 아니어야합니다. 그러면 몇 픽셀 더!
Niloct

1
@ Niloct : 나는 둥근 숫자로 빨리 눈을 ball 다. 더 정확한 등변 측정은 (side : 58, bottom : 100) 또는 (side : 60, bottom : 104)입니다.
mskfisher

1
여기의 좋은 CSS 삼각형 발생기 모든 방향 및 크기는 : apps.eky.hk/css-triangle-generator은
앨런 Stepps

답변:


2239

CSS Triangles : 다섯 가지 행위의 비극

마찬가지로 알렉스 상기 45도 각도로 서로에 대해 동일한 폭 엉덩이까지의 테두리 :

경계는 45도 각도로 만나고 중간에 내용이 있습니다.

상단 테두리가 없으면 다음과 같습니다.

상단 테두리 없음

그런 다음 너비를 0으로 지정하십시오 ...

폭 없음

... 높이는 0입니다 ...

키도 없어

... 그리고 마지막으로 두 측면 테두리를 투명하게 만듭니다.

투명한 측면 테두리

그 결과 삼각형이 생깁니다.


10
@Jauzsika, :before또는 :after의사 클래스 를 사용하여 추가 요소를 추가하지 않고도 이러한 삼각형을 페이지에 추가 할 수 있습니다 .
zzzzBov

stackoverflow.com/questions/5623072/… 나는 BoltClock 씨가 말하는 것을 생각합니다.
thirtydot

99
jsfiddle.net/pimvdb/mA4Cu/104 애니메이션을 사용하십시오 . 나와 같은 훨씬 더 많은 시각적 증거가 필요한 사람들을 위해…
pimvdb

다른 left-borderright-border이등변이 아닌 삼각형을 만들 수 있습니다. 그리고 많은 삼각형이 결합 될 때 ... jsfiddle.net/zRNgz
JiminP

2
2018 년에는이 핵을 사용하는 대신 CSS로 삼각형을 만드는 더 좋은 방법이 있습니까?
Scribblemacher

518

경계선은 교차되는 각진 모서리를 사용합니다 (너비가 동일한 경계선을 가진 45 ° 각도이지만 경계 너비를 변경하면 각도가 기울어 질 수 있습니다).

테두리 예

div {
  width: 60px;
  border-width: 30px;
  border-color: red blue green yellow;
  border-style: solid;
}
<div></div>

jsFiddle을 살펴보십시오 .

특정 테두리를 숨기면 삼각형 효과를 얻을 수 있습니다 (위에서 볼 수 있듯이 다른 부분을 다른 색으로 지정). transparent삼각형 모양을 얻기 위해 종종 가장자리 색으로 사용됩니다.


487

기본 사각형과 테두리로 시작하십시오. 각 테두리마다 다른 색이 지정되어 구분할 수 있습니다.

.triangle {
    border-color: yellow blue red green;
    border-style: solid;
    border-width: 200px 200px 200px 200px;
    height: 0px;
    width: 0px;
}

이것은 당신에게 이것을 제공합니다 :

네 개의 테두리가있는 사각형

그러나 상단 테두리가 필요하지 않으므로 너비를로 설정하십시오 0px. 이제 테두리 하단이 200px삼각형을 200px로 만듭니다.

.triangle {
    border-color: yellow blue red green;
    border-style: solid;
    border-width: 0px 200px 200px 200px;
    height: 0px;
    width: 0px;
}

그리고 우리는 이것을 얻을 것입니다 :

네 개의 테두리가있는 사각형의 아래쪽 절반

그런 다음 양쪽 삼각형을 숨기려면 border-color를 투명하게 설정하십시오. 상단 테두리가 효과적으로 삭제되었으므로 경계 상단 색상도 투명하게 설정할 수 있습니다.

.triangle {
    border-color: transparent transparent red transparent;
    border-style: solid;
    border-width: 0px 200px 200px 200px;
    height: 0px;
    width: 0px;
}

마침내 우리는 이것을습니다 :

삼각형 아래쪽 테두리


21
근사하지만 같은 방식이 아닙니까? :-)
Stanislav Shabalin

5
There's another way to draw ..같은 방식으로 밝혀졌습니다 :) 멋진 설명
Hammad Khan

16
대규모 아티팩트가있는 JPEG를 사용하는 경우 -1입니다. 그러나 나중에 억제를 위해 링크 할 수있는 JPEG를 사용하지 않을 때의 훌륭한 예를 만들면 +1입니다. ;)
Henrik Heimbuerger

3
왜 여기에 gif가 사용되지 않습니까?
prusswan

4
@hheimbuerger 죄송합니다. 이미지를 수정하여 예를 엉망으로 만들었습니다. 앞으로이 답변의 개정 2에 연결해야합니다 .
Rory O'Kane

263

다른 접근법 :

변형 회전 CSS3 삼각형

이 기술을 사용하면 삼각형 모양을 쉽게 만들 수 있습니다. 이 기법이 어떻게 작동하는지 설명하는 애니메이션을 선호하는 사람들에게는 다음과 같습니다.

GIF 애니메이션 : 변환 회전으로 삼각형을 만드는 방법

그렇지 않으면, 여기에 하나의 요소로 이등변 직각 삼각형을 만드는 방법에 대한 4 가지 행위 (이것은 비극이 아닙니다)에 대한 자세한 설명이 있습니다.

  • 참고 1 : 이등변 삼각형이 아닌 멋진 물건의 경우 4 단계를 볼 수 있습니다 .
  • 참고 2 : 다음 스 니펫에는 공급 업체 접두사가 포함되지 않습니다. 그것들은 codepen 데모에 포함되어 있습니다 .
  • 참고 3 : 다음 설명을위한 HTML은 항상 다음과 같습니다. <div class="tr"></div>

1 단계 : 사업부 만들기

쉽게 확인하십시오 width = 1.41 x height. 가로 세로 비율을 유지하고 반응 형 삼각형을 만들기 위해 백분율 및 패딩 하단 사용을 포함한 모든 기술 ( 여기 참조 )을 사용할 수 있습니다 . 다음 이미지에서 div에는 황금색 테두리가 있습니다.

해당 div에 의사 요소를 삽입하고 부모의 너비와 높이를 100 %로 지정하십시오. 다음 이미지에서 의사 요소는 파란색 배경을 갖습니다.

변형 roate 단계 1로 CSS 삼각형 만들기

이 시점에서 CSS는 다음과 같습니다.

.tr {
    width: 30%;
    padding-bottom: 21.27%; /* = width / 1.41 */
    position: relative;
}

.tr: before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: #0079C6;
}

2 단계 : 회전하자

먼저 가장 중요한 것은 변환 원점을 정의합니다 . 기본 기원은 의사 요소의 중심에 우리는 왼쪽 하단을해야합니다. 이 CSS 를 의사 요소에 추가하면 :

transform-origin:0 100%; 또는 transform-origin: left bottom;

이제 의사 요소를 시계 방향으로 45도 회전 할 수 있습니다. transform : rotate(45deg);

CSS3 2 단계로 삼각형 만들기

이 시점에서 CSS는 다음과 같습니다.

.tr {
    width: 30%;
    padding-bottom: 21.27%; /* = width / 1.41 */
    position: relative;
}

.tr:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: #0079C6;
    transform-origin: 0 100%;        
    transform: rotate(45deg);
}

3 단계 : 숨기기

의사 요소의 원하지 않는 부분을 숨기려면 (노란색 테두리로 div를 오버플로하는 모든 것) overflow:hidden;컨테이너 에 설정 하면됩니다. 노란색 테두리를 제거한 후 TRIANGLE ! :

데모

CSS 삼각형

CSS :

.tr {
    width: 30%;
    padding-bottom: 21.27%; /* = width / 1.41 */
    position: relative;
    overflow: hidden;
}

.tr:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #0079C6;
    transform-origin: 0 100%;
    transform: rotate(45deg);
}

4 단계 : 더 나아가 ...

데모에 표시된대로 삼각형을 사용자 정의 할 수 있습니다.

  1. 을 (를) 사용하여 더 얇거나 더 평평하게 만듭니다 skewX().
  2. 변환 방향 및 회전 방향으로 재생하여 왼쪽, 오른쪽 또는 다른 방향을 가리 킵니다.
  3. 3D 변형 속성으로 약간의 반사 를 만듭니다 .
  4. 삼각형 테두리를
  5. 삼각형 안에 이미지를 넣습니다
  6. 훨씬 더 ... CSS3 의 힘을 발휘하십시오 !

왜이 기술을 사용합니까?

  1. 삼각형은 쉽게 반응 할 수 있습니다.
  2. 테두리 가있는 삼각형을 만들 수 있습니다 .
  3. 삼각형의 경계를 유지할 수 있습니다. 이는 커서가 삼각형 안에 있을 때만 호버 상태 또는 클릭 이벤트를 트리거 할 수 있음을 의미합니다 . 이 같은 상황에서 매우 편리 될 수 있습니다 이것 각 삼각형은 그 자체가 가져가 상태를 가지고 각각의 삼각형은 그것의 이웃을 오버레이 수 없습니다.
  4. 반사와 같은 멋진 효과를 만들 수 있습니다 .
  5. 2D 및 3D 변환 속성을 이해하는 데 도움이됩니다.

왜이 기술을 사용하지 않습니까?

  1. 주요 단점은 브라우저 호환성입니다 . 2d 변환 속성은 IE9 +에서 지원되므로 IE8을 지원할 계획이라면이 기술을 사용할 수 없습니다. 자세한 정보는 CanIuse 를 참조하십시오 . 리플렉션 브라우저 지원 과 같은 3D 변환을 사용하는 멋진 효과 는 IE10 +입니다 (자세한 내용은 canIuse 참조 ).
  2. 반응 형의 것이 필요하지 않으며 일반 삼각형이 좋습니다. 여기에 설명 된 테두리 기술을 사용해야합니다. 여기에는 amaizing 게시물 덕분에 브라우저 호환성이 향상되고 이해하기 쉽습니다.

16
아마도 1.41은 √2의 근사치이며 사용자가 만든 삼각형의 빗변의 길이라는 점을 언급 할 가치가 있습니다.
KRyan

나는 대답을 간단하게 유지하고 싶었지만 당신은 옳습니다. @KRyan
web-tiki

실제로, 이것을 사용하려고 할 때, 서로 다른 너비를 어떻게 사용했는지에 대한 언급 skewX이 유용 할 것입니다.
KRyan

1
이 방법은 삼각형에 1px 단색 테두리가 필요할 때 더 효과적입니다.
Roman Losev

이것은 삼각형의 테두리를 만들려는 경우에 해당합니다.이 주석 상자를 만들 때 테두리가 붙어 있습니다 AnnotationBox
vanduc1102

182

다음은 데모 용으로 만든 JSFiddle애니메이션입니다 .

아래의 스 니펫도 참조하십시오.

스크린 캐스트로 만든 애니메이션 GIF입니다.

삼각형의 애니메이션 GIF


무작위 버전


한 번에 모든 버전


49

다음과 같은 div가 있다고 가정 해 봅시다.

<div id="triangle" />

이제 CSS를 단계별로 편집하면 주위에서 무슨 일이 일어나고 있는지 알 수 있습니다.

1 단계 : JSfiddle 링크 :

 #triangle {
        background: purple;
        width :150px;
        height:150PX;
        border-left: 50px solid black ;
        border-right: 50px solid black;
        border-bottom: 50px solid black;
        border-top: 50px solid black;
    }

이것은 간단한 사업부입니다. 매우 간단한 CSS. 그래서 평신도가 이해할 수 있습니다. Div의 크기는 150 x 150 픽셀이며 테두리는 50 픽셀입니다. 이미지가 첨부됩니다 :

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

2 단계 : JSfiddle 링크 :

#triangle {
    background: purple;
    width :150px;
    height:150PX;
    border-left: 50px solid yellow ;
    border-right: 50px solid green;
    border-bottom: 50px solid red;
    border-top: 50px solid blue;
}

이제 방금 4면의 테두리 색상을 변경했습니다. 이미지가 첨부되었습니다.

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

STEP : 3 JSfiddle 링크 :

#triangle {
    background: purple;
    width :0;
    height:0;
    border-left: 50px solid yellow ;
    border-right: 50px solid green;
    border-bottom: 50px solid red;
    border-top: 50px solid blue;
}

이제 div의 높이와 너비를 150 픽셀에서 0으로 변경했습니다. 이미지가 첨부

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

4 단계 : JSfiddle :

#triangle {
    background: purple;
    width :0px;
    height:0px;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 50px solid red;
    border-top: 50px solid transparent;
}

이제 아래쪽 테두리를 제외한 모든 테두리를 투명하게 만들었습니다. 이미지는 아래에 첨부되어 있습니다.

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

5 단계 : JSfiddle 링크 :

#triangle {
    background: white;
    width :0px;
    height:0px;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 50px solid red;
    border-top: 50px solid transparent;
}

이제 배경색을 흰색으로 변경했습니다. 이미지가 첨부되었습니다.

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

따라서 우리는 필요한 삼각형을 얻었습니다.


3
첫 단계에서 왜 황천 포털을 사용 했습니까?
LuizLoyola

38

그리고 지금 완전히 다른 무언가가 ...

CSS 트릭을 사용하는 대신 html 엔티티만큼 간단한 솔루션을 잊지 마십시오.

&#9650;

결과:

참조 : 위쪽 및 아래쪽 삼각형의 HTML 엔터티는 무엇입니까?


2
나는 "치다"가 적절한 단어라고 생각하지 않습니다. 이 솔루션은 글꼴 메트릭을 사용하므로 모양을 제어 할 수 없다는 점은 말할 것도없이 정확한 위치 지정은 다소 모호합니다.
user776686

32

아래 삼각형을 고려하십시오

.triangle {
    border-bottom:15px solid #000;
    border-left:10px solid transparent;
    border-right:10px solid transparent;
    width:0;
    height:0;
}

이것이 우리에게 주어진 것입니다 :

작은 삼각형 출력

왜 이런 모양으로 나왔습니까? 아래 다이어그램은 크기를 설명합니다. 아래쪽 테두리에는 15px, 왼쪽과 오른쪽에는 10px가 사용되었습니다.

큰 삼각형

오른쪽 테두리를 제거하여 직각 삼각형을 만드는 것은 매우 쉽습니다.

직각 삼각형


29

한 걸음 더 나아가서 이것을 기반으로 CSS를 사용하여 뒤로 및 다음 버튼에 화살표를 추가했습니다 (예, 100 % 크로스 브라우저는 알지 못하지만 덜 매끄 럽습니다).

.triangle {
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
  margin:20px auto;
}

.triangle-down {
  border-bottom:none;
  border-top: 100px solid red;
}

.triangle-left {
  border-left:none;
  border-right: 100px solid red;
  border-bottom: 50px solid transparent;
  border-top: 50px solid transparent;
}

.triangle-right {
  border-right:none;
  border-left: 100px solid red;
  border-bottom: 50px solid transparent;
  border-top: 50px solid transparent;
}

.triangle-after:after {
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-bottom: 5px solid red;
  margin:0 5px;
  content:"";
  display:inline-block;
}

.triangle-after-right:after {
  border-right:none;
  border-left: 5px solid blue;
  border-bottom: 5px solid transparent;
  border-top: 5px solid transparent;

}

.triangle-before:before {
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-bottom: 5px solid blue;
  margin:0 5px;
  content:"";
  display:inline-block;
}

.triangle-before-left:before {
  border-left:none;
  border-right: 5px solid blue;
  border-bottom: 5px solid transparent;
  border-top: 5px solid transparent;

}
<div class="triangle"></div>
<div class="triangle triangle-down"></div>
<div class="triangle triangle-left"></div>
<div class="triangle triangle-right"></div>

<a class="triangle-before triangle-before-left" href="#">Back</a>
<a class="triangle-after triangle-after-right" href="#">Next</a>


1
이것은 어떻게 크로스 브라우저가 아닌가? 삼각형은 IE6으로 다시 작동해야합니다.
chriscauley

4
: before 및 : after의 사용은 100 % 지원되지 않습니다.
PseudoNinja

2
Psuedo 요소는 <IE8에서 지원되지 않습니다.
alex

19

좋아, 이 삼각형은 요소의 테두리가 HTML과 CSS에서 함께 작동하는 방식 때문에 만들어 질 것입니다 ...

일반적으로 1 또는 2px 테두리를 사용하므로 테두리 가 동일한 너비로 서로 45도 각도이루는 것을 결코 알지 못합니다 . 너비가 변경되면 각도가 변경되면 아래에서 만든 CSS 코드를 실행하십시오.

.triangle {
  width: 100px;
  height: 100px;
  border-left: 50px solid black;
  border-right: 50px solid black;
  border-bottom: 100px solid red;
}
<div class="triangle">
</div>

다음 단계에서는 다음과 같은 너비 또는 높이가 없습니다.

.triangle {
  width: 0;
  height: 0;
  border-left: 50px solid black;
  border-right: 50px solid black;
  border-bottom: 100px solid red;
}
<div class="triangle">
</div>

이제 왼쪽과 오른쪽 테두리를 보이지 않게하여 원하는 삼각형을 아래와 같이 만듭니다.

.triangle {
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
}
<div class="triangle"></div>

스 니펫을 실행하여 단계를 보지 않으려는 경우 하나의 이미지에서 모든 단계를 볼 수 있도록 이미지 시퀀스를 만들었습니다.

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


18

다른 접근법. 선형 그라디언트 사용 (IE의 경우 IE 10+ 만 해당) 모든 각도를 사용할 수 있습니다 :

.triangle {
    margin: 50px auto;
    width: 100px;
    height: 100px;
/* linear gradient */
    background: -moz-linear-gradient(-45deg,  rgba(255,0,0,0) 0%, rgba(255,0,0,0) 50%, rgba(255,0,0,1) 50%, rgba(255,0,0,1) 100%);
 /* FF3.6+ */
    background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(255,0,0,0)), color-stop(50%,rgba(255,0,0,0)), color-stop(50%,rgba(255,0,0,1)), color-stop(100%,rgba(255,0,0,1)));
 /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(-45deg,  rgba(255,0,0,0) 0%,rgba(255,0,0,0) 50%,rgba(255,0,0,1) 50%,rgba(255,0,0,1) 100%);
 /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(-45deg,  rgba(255,0,0,0) 0%,rgba(255,0,0,0) 50%,rgba(255,0,0,1) 50%,rgba(255,0,0,1) 100%);
 /* Opera 11.10+ */
    background: -ms-linear-gradient(-45deg,  rgba(255,0,0,0) 0%,rgba(255,0,0,0) 50%,rgba(255,0,0,1) 50%,rgba(255,0,0,1) 100%);
 /* IE10+ */
    background: linear-gradient(135deg,  rgba(255,0,0,0) 0%,rgba(255,0,0,0) 50%,rgba(255,0,0,1) 50%,rgba(255,0,0,1) 100%);
 /* W3C */;
}
<div class="triangle"></div>

여기 jsfiddle이 있습니다


이것은 아름다운 솔루션이지만 IE 10 이상에만 해당됩니다.
Eric Hu

13

CSS clip-path

이것은 내가이 질문을 놓쳤다 고 느끼는 것입니다. clip-path

clip-path 간단히 말해서

clip-path속성을 사용한 클리핑 은 직사각형 종이에서 모양 (원 또는 오각형과 같은)을 자르는 것과 유사합니다. 이 속성은 " CSS Masking Module Level 1 "사양에 속합니다 . 스펙은 "CSS 마스킹은 시각적 요소의 일부 또는 전부를 숨기는 두 가지 수단을 제공합니다 : 마스킹 및 클리핑".


clip-path매개 변수에서 지정한 모양을 자르기 위해 테두리 대신 요소 자체를 사용합니다. 그것은 매우 간단한 백분율 기반의 좌표 시스템을 사용하여 매우 쉽게 편집 할 수 있으며 몇 분 만에 이상하고 멋진 모양을 만들 수 있습니다.


삼각형 모양 예

div {
  -webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
  background: red;
  width: 100px;
  height: 100px;
}
<div></div>


단점

현재 주요 단점이 있습니다. 지원이 부족하다는 점입니다. -webkit-브라우저 에서만 적용되고 IE에서는 지원되지 않으며 FireFox에서는 부분적으로 만 지원됩니다.


자원

다음은 이해를 높이고 clip-path자신 만의 창작을 시작하는 데 도움이되는 유용한 자료와 자료 입니다.


11

이것은 오래된 질문이지만이 삼각형 기술을 사용하여 화살표를 만드는 방법을 공유 할 가치가 있다고 생각합니다.

1 단계:

두 개의 삼각형을 만들 수 있습니다. 두 번째 삼각형은 :after의사 클래스 를 사용 하고 다른 클래스 바로 아래에 배치합니다.

2 개의 삼각형

.arrow{
    width: 0;
    height: 0;
    border-radius: 50px;
    display: inline-block;
    position: relative;
}

    .arrow:after{
        content: "";
        width: 0;
        height: 0;
        position: absolute;
    }


.arrow-up{
     border-left: 50px solid transparent;
     border-right: 50px solid transparent;
     border-bottom: 50px solid #333;
}
    .arrow-up:after{
         top: 5px;
         border-left: 50px solid transparent;
         border-right: 50px solid transparent;
         border-bottom: 50px solid #ccc;
         right: -50px;
    }
<div class="arrow arrow-up"> </div>

2 단계

이제 두 번째 삼각형의 주요 테두리 색상을 배경의 동일한 색상으로 설정해야합니다.

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

모든 화살표가있는 바이올린 :
http://jsfiddle.net/tomsarduy/r0zksgeu/


9

SASS (SCSS) 삼각형 믹스 인

CSS 삼각형을 자동으로 생성하기 쉽도록 DRY를 작성했습니다.

// Triangle helper mixin (by Yair Even-Or)
// @param {Direction} $direction - either `top`, `right`, `bottom` or `left`
// @param {Color} $color [currentcolor] - Triangle color
// @param {Length} $size [1em] - Triangle size
@mixin triangle($direction, $color: currentcolor, $size: 1em) {
  $size: $size/2;
  $transparent: rgba($color, 0);
  $opposite: (top:bottom, right:left, left:right, bottom:top);

  content: '';
  display: inline-block;
  width: 0;
  height: 0;
  border: $size solid $transparent;
  border-#{map-get($opposite, $direction)}-color: $color;
  margin-#{$direction}: -$size;
}

사용 사례 :

span {
  @include triangle(bottom, red, 10px);
}

운동장 페이지


중요 사항 : 일부 브라우저에서
삼각형이 픽셀 화 되어있는 경우 여기에 설명 된 방법 중 하나를 시도 하십시오 .


8

삼각형에 테두리를 적용하려면 다음을 읽으십시오. CSS로 삼각형을 만드시겠습니까?

거의 모든 답변은 테두리를 사용하여 작성된 삼각형에 초점을 맞추므로 @lima_fillinear-gradient 의 답변에서 시작된 방법 을 자세히 설명 하겠습니다 .

같은 정도 값을 사용하면 원하는 삼각형을 얻기 위해 45°특정 비율을 존중해야 height/width하며 반응하지 않습니다.

대신이 일을 우리는 같은 방향의 미리 정의 된 값 고려해야한다 to bottom, to top응답 성을 유지하면서 우리가 삼각형 모양의 어떤 종류를 얻을 수 있습니다이 경우, 등.

1) 사각형 삼각형

이러한 삼각형을 얻기 위해, 우리는 하나의 선형 기울기와 같이 대각선 방향으로 필요한 to bottom right, to top left, to bottom left

2) 이등변 삼각형

이를 위해 위와 같이 2 개의 선형 그라디언트가 필요하며 각각은 너비 (또는 높이)의 절반을 차지합니다. 첫 번째 삼각형의 거울 이미지를 만드는 것과 같습니다.

3) 정삼각형

그래디언트의 높이와 너비 사이의 관계를 유지해야하므로 다루기가 약간 까다 롭습니다. 우리는 위와 같은 삼각형을 가지지 만 이등변 삼각형을 등변 삼각형으로 변환하기 위해 계산을 더 복잡하게 만들 것입니다.

쉽게하기 위해 div의 너비를 알고 높이를 삼각형을 그릴 수있을만큼 충분히 큽니다 ( height >= width).

그라데이션이있는 CSS 삼각형

우리는 두 개의 그라디언트를 가지고 g1있으며 g2, 파란색 선은 너비 div w이며 각 그라디언트 는 그 너비의 50 %를 w/2가지며 삼각형의 각면은 동일합니다 w. 녹색 선은 그라디언트의 높이이며 hg아래 수식을 쉽게 얻을 수 있습니다.

(w/2)² + hg² = w²---> hg = (sqrt(3)/2) * w--->hg = 0.866 * w

우리는 calc()계산을 수행하고 필요한 결과를 얻기 위해 의지 할 수 있습니다.

또 다른 방법은 div의 높이를 제어하고 그라디언트 구문을 쉽게 유지하는 것입니다.

4) 임의의 삼각형

임의의 삼각형을 얻으려면 각 하나의 조건을 50 % 만 제거하면되지만 두 조건을 유지해야합니다 (둘 다 동일한 높이를 가져야하며 두 너비의 합은 100 % 여야 함).

그러나 각 측면의 값을 정의하려면 어떻게해야합니까? 우리는 단순히 다시 계산해야합니다!

그라데이션이있는 CSS 삼각형

의 정의하자 hg1hg2다음 우리 그라데이션의 높이로 (모두 적색 라인 동일하다) wg1wg2우리 그래디언트의 폭 ( wg1 + wg2 = a). 계산에 대해 자세히 설명하지는 않지만 결국에는 다음을 갖습니다.

wg2 = (a²+c²-b²)/(2a)
wg1 = a - wg2
hg1 = hg2 = sqrt(b² - wg1²) = sqrt(c² - wg2²)

이제 우리는 calc()이것을 구현할 수 없어서 CSS의 한계에 도달 했으므로 최종 결과를 수동으로 수집하여 고정 된 크기로 사용해야합니다.

보너스

우리는 또한 회전 및 / 또는 기울기를 적용 할 수 있으며 더 많은 삼각형을 얻을 수있는 더 많은 옵션이 있음을 잊지 않아야합니다.

물론 어떤 상황에서는 더 적합 할 수있는 SVG 솔루션 을 명심해야 합니다.


4

여기 또 다른 바이올린이 있습니다.

.container:after {
    position: absolute;
    right: 0;
    content: "";
    margin-right:-50px;
    margin-bottom: -8px;
    border-width: 25px;
    border-style: solid;
    border-color: transparent transparent transparent #000;
    width: 0;
    height: 0;
    z-index: 10;
    -webkit-transition: visibility 50ms ease-in-out,opacity 50ms ease-in-out;
    transition: visibility 50ms ease-in-out,opacity 50ms ease-in-out;
    bottom: 21px;
}
.container {
    float: left;
    margin-top: 100px;
    position: relative;
    width: 150px;
    height: 80px;
    background-color: #000;
}

.containerRed {
    float: left;
    margin-top: 100px;
    position: relative;
    width: 100px;
    height: 80px;
    background-color: red;
}

https://jsfiddle.net/qdhvdb17/


4

다른 사람들은 이미 이것을 잘 설명했습니다. 이것을 빨리 설명 할 애니메이션 을 드리겠습니다. http://codepen.io/chriscoyier/pen/lotjh

다음은 개념을 가지고 배우고 배울 수있는 코드입니다.

HTML :

<html>
  <body>
    <div id="border-demo">
    </div>
  </body>
</html>

CSS :

/*border-width is border thickness*/
#border-demo {
    background: gray;
    border-color: yellow blue red green;/*top right bottom left*/
    border-style: solid;
    border-width: 25px 25px 25px 25px;/*top right bottom left*/
    height: 50px;
    width: 50px;
}

이것을 가지고 놀고 무슨 일이 일어나는지보십시오. 높이와 너비를 0으로 설정하십시오. 그런 다음 상단 테두리를 제거하고 왼쪽과 오른쪽을 투명하게 만들거나 아래 코드를보고 CSS 삼각형을 만드십시오.

#border-demo {
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid blue;
}

2

당신이 주위를 재생하려면 border-size, width그리고 height그 다른 모양을 만들 수있는 방법을 참조,이 시도 :

const sizes = [32, 32, 32, 32];
const triangle = document.getElementById('triangle');

function update({ target }) {
  let index = null;
  
  if (target) {
    index = parseInt(target.id);

    if (!isNaN(index)) {
      sizes[index] = target.value;
    }
  }
  
  window.requestAnimationFrame(() => {
    triangle.style.borderWidth = sizes.map(size => `${ size }px`).join(' ');
    
    if (isNaN(index)) {
      triangle.style[target.id] = `${ target.value }px`;
    }
  });
}

document.querySelectorAll('input').forEach(input => {
  input.oninput = update;
});

update({});
body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

#triangle {
    border-style: solid;
    border-color: yellow magenta blue black;
    background: cyan;
    height: 0px;
    width: 0px;
}

#controls {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: white;
  display: flex;
  box-shadow: 0 0 32px rgba(0, 0, 0, .125);
}

#controls > div {
  position: relative;
  width: 25%;
  padding: 8px;
  box-sizing: border-box;
  display: flex;
}

input {
  margin: 0;
  width: 100%;
  position: relative;
}
<div id="triangle" style="border-width: 32px 32px 32px 32px;"></div>

<div id="controls">
  <div><input type="range" min="0" max="128" value="32" id="0" /></div>
  <div><input type="range" min="0" max="128" value="32" id="1" /></div>
  <div><input type="range" min="0" max="128" value="32" id="2" /></div>
  <div><input type="range" min="0" max="128" value="32" id="3" /></div>
  <div><input type="range" min="0" max="128" value="0" id="width" /></div>
  <div><input type="range" min="0" max="128" value="0" id="height" /></div>
</div>


1

이 시도:-

.triangle {
    border-color: transparent transparent red transparent;
    border-style: solid;
    border-width: 0px 200px 200px 200px;
    height: 0px;
    width: 0px;
}
<div class="triangle"></div>


0

나는 이것이 오래된 것임을 알고 있지만 HTML & CSS만으로 삼각형만드는 적어도 5 가지 방법이 있다는 것을이 토론에 추가하고 싶습니다 .

  1. 사용 borders
  2. 사용 linear-gradient
  3. 사용 conic-gradient
  4. 사용 transform하여overflow
  5. 사용 clip-path

나는 방법 3을 제외하고는 모두를 사용하여 여기에서 다룬다 고 생각합니다 conic-gradient. 그래서 여기에서 공유 할 것입니다.

.triangle{
        width: 40px;
        height: 40px;
        background: conic-gradient(at 50% 50%,transparent 135deg,green 0,green 225deg, transparent 0);
    }
<div class="triangle"></div>

원뿔 그라디언트를 사용하여 CSS 삼각형 만들기

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