2017-12-23 221 views
5

Próbuję utworzyć trójkątny kształt z pseudo elementami. jak ten na obrazku poniżej. enter image description hereTrójkąt Html/Css z pseudo elementami

Ale to jest to, co otrzymuję. enter image description here

Oto, co próbowałem tak daleko.

.container .form--container:before { 
    content: ""; 
    position: absolute; 
    top: 0px; 
    left: 130px; 
    width: 28px; 
    height: 28px; 
    transform: translate(-1rem, -100%); 
    border-left: 1.5rem solid #979797; 
    border-right: 1.5rem solid #979797; 
    border-bottom: 1.5rem solid white; 
} 

Odpowiedz

6

Kwestia dotyczy wykorzystania granicy. możesz sprawdzić ten link: How do CSS triangles work?, a zrozumiesz, jak działa granica i dlaczego otrzymujesz dane wyjściowe.

Alternatywnym rozwiązaniem jest użycie obrót i granicę takiego:

.box { 
 
    border: 1px solid; 
 
    margin: 50px; 
 
    height: 50px; 
 
    position:relative; 
 
    background: #f2f2f5; 
 
} 
 

 
.box:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 20px; 
 
    height: 20px; 
 
    border-top: 1px solid; 
 
    border-left: 1px solid; 
 
    top: -11px; 
 
    left: 13px; 
 
    background: #f2f2f5; 
 
    transform: rotate(45deg); 
 
}
<div class="box"> 
 

 
</div>

A w przypadku, gdy chcesz swoją pudełko ze strzałką być przejrzyste, tu jest inny trik, aby to osiągnąć (ponieważ powyższe rozwiązanie uważa jednolity kolor jako tło):

body { 
 
margin:0; 
 
background-image:linear-gradient(to right,yellow,pink); 
 
} 
 

 
.box { 
 
    border: 1px solid; 
 
    border-top:transparent; /*make border-top transparent*/ 
 
    margin: 50px; 
 
    height: 50px; 
 
    position:relative; 
 
} 
 

 
.box:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 20px; 
 
    height: 20px; 
 
    border-top: 1px solid ; 
 
    border-left: 1px solid; 
 
    top: -11px; 
 
    left: 13px; 
 
    transform: rotate(45deg); 
 
} 
 
/* Use after element to mimic the border top with a gap using linear gradient*/ 
 
.box:after { 
 
    content: ""; 
 
    position: absolute; 
 
    left:0; 
 
    right:0; 
 
    height: 1px; 
 
    background-image:linear-gradient(to right,black 10px,transparent 10px,transparent 39px,black 39px); 
 
}
<div class="box"> 
 

 
</div>