2012-09-17 29 views
9

Olası Çoğalt: onlar CSS ile yapmak mümkün
How to create a triangle in CSS3 using border-radiusYuvarlak oklar

musunuz?

Normal ok:

.some_element:after{  
    content: ''; 
    height: 0; 
    width: 0; 
    position: absolute;   
    top: 0; 
    left: 0;  
    border: 100px solid transparent; 
    border-top-color: #000;   
} 

(http://jsfiddle.net/W3xwE/)

Yuvarlak ok (Ben sadece alt tarafı yuvarlak istiyorum):

enter image description here

:(

+0

css sonrası resim yeteneğine sahiptir (ama çok yakından CSS3 bakmadım sanmayın henüz, bu c muhtemelen yanlış ancak), html5 tuval öğesinin uçları var. –

+0

yapılabilir, ancak bazı kesmek gerekir veya html5 yapabilirsiniz? tuval komut dosyaları ile –

+0

Farklı yönlendirme, ancak bu yararlı olabilir: http://stackoverflow.com/a/12042194/453277 –

cevap

18

Evet, Bu mümkün! Sen rotate kutuya bir border-radius verin ve 45deglinear-gradient'u background olarak kullanın.

DEMO

HTML:

<div class='arrow'></div> 

CSS:

.arrow { 
    width: 7em; 
    height: 7em; 
    border-radius: 0 0 2em 0; 
    margin: 5em; 
    transform: rotate(45deg); 
    background: linear-gradient(-45deg, black 50%, transparent 50%); 

} 

Eğer ok açısı farklı olmasını istiyorsanız

, o zaman da yapabilirsiniz skew o.

CSS gradients are not supported by IE9 (Etiketlerinizin arasında CSS3'ten bahsettiğiniz için bu sefer "veya daha büyük" demiyorum) gerçeğini göz önünde bulundurun. Bu durumda çözüm, sağlam bir arka plan kullanmak ve bir şekilde bir önceki elemanla kaplayarak ya da keserek üst bölümün gösterilmemesini sağlamaktır (bkz. the answer Tim Medora). , Ya elle önekleri -webkit-, -moz- ve -o- eklemeniz gerekecektir böylece:

Ayrıca, bu noktada (D bu yakında değişecek rağmen) hala öneksiz sözdizimi için destek yoktur. (Dabblet'in bunu yapması gereken -prefix-free kullanması nedeniyle bunları demoda eklemedim.)

+0

mozilla firefox desteklemiyor plz –

+0

için kod ekleyin arka plan: -moz-linear-gradyan (-45deg , siyah% 50, şeffaf% 50); * * önceden * düzeltilmemiş sürüm. – Ana

+2

Teşekkürler: PI sizin gibi CSS bildiğimi keşfettim :( – Alex

3

Bu, kırpma kontrolü için bir kutunun içine döndürülen bir kare yerleştirerek bunu yapmanın bir yoludur. Şahsen, sanırım @ Ana'nın çözümü çok daha temiz.

http://jsfiddle.net/K44mE/14/

<div id="outer"><div id="inner">&nbsp;</div></div> 

#inner{ 
    -ms-transform: rotate(45deg); 
    -webkit-transform: rotate(45deg); 
    -o-transform: rotate(45deg); 
    -moz-transform: rotate(45deg); 
    transform: rotate(45deg); 
    background-color:silver; 
    width:100px; 
    height:100px; 
    top: -70px; 
    left: 20px; 
    position:relative; 
    -moz-border-radius: 20px; 
    border-radius: 20px; 
} 

#outer { 
    position: absolute; 
    width: 140px; 
    height: 70px;  
    top:10px; 
    left:10px; 
    overflow: hidden;  
    border: 1px solid red; 
} 
0

CSS

.arrow { 
     width: 7em; 
     height: 7em; 
     border-radius: 0 0 2em 0; 
     margin: -2em 2.5em; 
     transform: rotate(45deg); 
     background: linear-gradient(-45deg, black 50%, transparent 50%); 

    } 

HTML

<div class='arrow'></div> 
+2

Bu komik değil mi? Yaptığım demo gibi görünüyor.Sadece bana hizmet eder doğaüstü fenomenlere inanmalıyım – Ana

+0

Bunun nasıl olduğunu bilmiyorum demo sayfası, arama sonucu sayfamdan biriydi: P – Champ