2017-05-15 11 views
0

에 의해 부모 국경을 덮어 씁니다.CSS, 인 flexbox, CSS 그리드, 테두리, 나는이 상황이 내 자식 DIV

어떻게하면됩니까?

코드 :

<div class="container"> 
    <div class="triangle">How are you ?</div> 
</div> 

.container { 
    border: 1px solid gray; 
    position: relative; 
    width: 50vw; 
    height: 100px; 
    background: #fff; 
    overflow: hidden; 
} 

.triangle { 
    background-color: red; 
    display: inline-block; 
    transform: translateX(-50%) rotate(45deg) translateX(50%) rotate(-90deg); 
    transform-origin: center top; 
    box-shadow: 0px -50px 0px 50px red; 
} 

enter image description here

+0

사용 상자 그림자 내가 부트 스트랩 요소를 사용하고 내가 가진 모든 요소를 ​​무시하지 않을 국경 https://jsfiddle.net/L811uzey/1/ –

+0

을 그릴 수 테두리. 국경을 가진 해결책? –

+0

감사합니다. @GCyrillus, 여기 테두리와 문제가있는 부트 스트랩이 있습니다. https://jsfiddle.net/6Lagdk4z/ (Chrome에서 열기). –

답변

1

당신은 그렇게 할 의사를 사용하고, 단순히 음의 여백으로 triangle를 이동할 수 있습니다.

또한 overflow: hiddentriangle으로 옮겼습니다. 테두리가 겹치지 않습니다.

참고,이 샘플 두꺼운 테두리를 사용, 그래서 당신은 의사 가능한 것보다 더 많은 일을하려는 경우 하나는 쉽게이

.container { 
 
    border: 5px solid gray; 
 
    position: relative; 
 
    width: 50vw; 
 
    height: 80px; 
 
    background: #fff; 
 
} 
 
.triangle { 
 
    display: inline-block; 
 
    height: calc(100% + 10px);  /* 10px = border size * 2    */ 
 
    margin: -5px 0 0 -5px;   /* move element left/top = border size */ 
 
    width: 100%; 
 
    overflow: hidden; 
 
} 
 
.triangle::before { 
 
    content: attr(data-text); 
 
    display: inline-block; 
 
    background-color: red; 
 
    transform: translateX(-50%) rotate(45deg) translateX(50%) rotate(-90deg); 
 
    transform-origin: center top; 
 
    box-shadow: 0px -50px 0px 50px red; 
 
}
<div class="container"> 
 
    <div class="triangle" data-text="How ?"></div> 
 
</div> 
 
<br> 
 
<div class="container"> 
 
    <div class="triangle" data-text="How are you ?"></div> 
 
</div>

작동 볼 수 있습니다 물론 여기에 a 요소를 추가 할 수 있습니다. span

이 샘플에서는 음수 여백 대신 상대 위치를 사용했습니다. sh 아야 또 다른 방법.

.container { 
 
    border: 5px solid gray; 
 
    position: relative; 
 
    width: 50vw; 
 
    height: 80px; 
 
    background: #fff; 
 
} 
 
.triangle { 
 
    display: inline-block; 
 
    position: relative; 
 
    left: -5px;      /* move element left = border size */ 
 
    top: -5px;      /* move element top = border size */ 
 
    height: calc(100% + 10px);  /* 10px = border size * 2   */ 
 
    width: 100%; 
 
    overflow: hidden; 
 
} 
 
.triangle span { 
 
    display: inline-block; 
 
    background-color: red; 
 
    transform: translateX(-50%) rotate(45deg) translateX(50%) rotate(-90deg); 
 
    transform-origin: center top; 
 
    box-shadow: 0px -50px 0px 50px red; 
 
}
<div class="container"> 
 
    <div class="triangle"> 
 
    <span>How ?</span> 
 
    </div> 
 
</div> 
 
<br> 
 
<div class="container"> 
 
    <div class="triangle"> 
 
    <span>How are you ?</span> 
 
    </div> 
 
</div>

또한
+0

답장을 보내 주셔서 감사합니다, @ LGSon,하지만 div가 작을 때 나는 이상한 상황이 있습니다 : https://jsfiddle.net/9n09ag3h/1/ 삼각형의 바닥? –

+0

@ JohnSam 당신은 텍스트가 맞지 않는 곳에 맞추려고합니다. 그래서 당연히 이상하게 보일 것입니다. 어떻게 보이게 될지 이미지를 게시 할 수 있습니까? – LGSon

+1

@JohnSam 또 다른 것은, 만약 당신이 그것을 두 줄로 나누기를 원한다면, 수동으로 설정해야합니다. 실제 텍스트 요소는 그것이 보이는 삼각형에 맞아야한다는 것을 모르기 때문에, 여전히 사각형이지만 회전으로 보입니다. 그것은 아닙니다 – LGSon

1

당신은 대신 경계에 대한 box-shadow를 사용할 수 있습니다.

.container { 
 
    
 
    position: relative; 
 
    width: 50vw; 
 
    height: 100px; 
 
    background: #fff; 
 
    overflow: hidden; 
 
    box-shadow: inset 0 0 0 1px gray; 
 
} 
 

 
.triangle { 
 
    background-color: red; 
 
    display: inline-block; 
 
    transform: translateX(-50%) rotate(45deg) translateX(50%) rotate(-90deg); 
 
    transform-origin: center top; 
 
    box-shadow: 0px -50px 0px 50px red; 
 
}
<div class="container"> 
 
    <div class="triangle">How are you ?</div> 
 
</div>

+0

부트 스트랩 요소를 사용하고 있으며 모든 요소를 테두리. 국경을 가진 해결책? –

+0

@JohnSam 마크 업과 함께 할 수 있다고 생각하지 않습니다. 경계에 또 다른 요소를 도입 할 수 있습니다. https://codepen.io/mcoker/pen/Wjyqyj –