2017-05-15 31 views
1

我正在阅读shape 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; 
} 

我不知道背后的逻辑。而且我不知道如何为这个三角形添加边框。

+4

http://codepen.io/chriscoyier/pen/lotjh – makshh

回答

2

是的,这很棘手。 CSS三角形使用元素的透明边框的有色&组合的实现。

信用这个演示去Chris Coyier

(function(){var demo,run;demo=$("#whole-thing");run=function(){setTimeout(function(){return demo.addClass("step-1");},2500);setTimeout(function(){return demo.addClass("step-2");},5000);setTimeout(function(){return demo.addClass("step-3");},5500);setTimeout(function(){return demo.addClass("step-4");},6000);setTimeout(function(){return demo.addClass("step-5");},7500);setTimeout(function(){return demo.addClass("step-6");},10000);setTimeout(function(){return demo.addClass("step-7");},12000);setTimeout(function(){return demo.addClass("step-8");},14000);setTimeout(function(){return demo.addClass("step-9");},14500);setTimeout(function(){return demo.addClass("step-10");},15000);return setTimeout(function(){return demo.addClass("step-11");},18000);};run();$("#re-run").on('click',function(){$("#whole-thing").removeClass();return run();});}).call(this);
@import url(http://fonts.googleapis.com/css?family=Andika);.triangle-demo { width: 100px; height: 100px; margin: 0 auto; background: tan; border-top: 0 solid #EE7C31; border-left: 0 solid #F5D97B; border-bottom: 0 solid #D94948; border-right: 0 solid #8DB434; transition: 0.8s 0.2s;}.step-1 .triangle-demo { border-top-width: 10px;}.step-2 .triangle-demo { border-left-width: 10px;}.step-3 .triangle-demo { border-right-width: 10px;}.step-4 .triangle-demo { border-bottom-width: 10px;}.step-6 .triangle-demo { background: transparent;}.step-7 .triangle-demo { width: 0; height: 0;}.step-8 .triangle-demo { border-left-color: transparent;}.step-9 .triangle-demo { border-right-color: transparent;}.step-10 .triangle-demo { border-top-color: transparent;}.triangle-title { width: 300px; padding: 1rem; color: white; background: #D94948; border-radius: 20px; margin: auto; opacity: 0; transition: 0.8s 0.2s;}.step-11 .triangle-title { opacity: 1;}body { background: #333; font-family: 'Andika', sans-serif; color: white; text-align: center; font-size: large; transform: translateZ(0);}.steps { position: relative; height: 45px;}.steps > div { position: absolute; top: 0; left: 0; width: 100%; opacity: 0; background: #333; transition: 0.3s;}.steps .step-0 { opacity: 1;}.step-1 .steps .step-1 { opacity: 1;}.step-2 .steps .step-2 { opacity: 1;}.step-5 .steps .step-5 { opacity: 1;}.step-6 .steps .step-6 { opacity: 1;}.step-7 .steps .step-7 { opacity: 1;}.step-8 .steps .step-8 { opacity: 1;}.step-11 .steps .step-11 { opacity: 1;}h1 { text-transform: uppercase; letter-spacing: 1px; font-size: 1.5rem; border-bottom: 1px solid #555; color: #999;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><h1>How a CSS Triangle is Made</h1><div id="whole-thing"> <div class="steps"> <div class="step-0">Imagine a box.</div> <div class="step-1">The box has a border-top.</div> <div class="step-2">It also has the other borders.</div> <div class="step-5">Notice how the borders meet each other at angles.</div> <div class="step-6">The background of the box is transparent.</div> <div class="step-7">The box is actually zero width and zero height.</div> <div class="step-8">Three of the borders are actually transparent in color.</div> <div class="step-11">That's how a CSS triangle is made!</div> </div> <div class="triangle-demo"></div> <div class="triangle-title"> <button id="re-run">Run Again</button></div></div>

+0

这是* *一个真棒解释! +1 – gaynorvader

1

边界,因为CSS三角形是一种奇怪划定的边界不能添加到CSS三角形你想的方式。如果你想有一个边框,最好的方法是在你的小三角形后面有一个更大的三角形。因此,像这样: https://jsfiddle.net/9cL8g6pu/2/

#wrapper{ 
    position: relative; 
    width: 105px; 
    height: 105px; 
} 
#tri-up { 
    position: absolute; 
    top: 3px; left: -50px; 
    width: 0; 
    height: 0; 
    border-left: 50px solid transparent; 
    border-right: 50px solid transparent; 
    border-bottom: 100px solid red; 
} 
#t-up-bg{ 
    position: absolute; 
    top: 0; left: 0; 
    width: 0; 
    height: 0; 
    border-left: 53px solid transparent; 
    border-right: 53px solid transparent; 
    border-bottom: 105px solid blue;  
}