2013-07-24 14 views
8

Próbowałem utworzyć trójkąty w CSS na responsywną stronę i nie mogłem znaleźć dobrego przykładu na stackoverflow, więc oto jak to zrobiłem.Tworzenie responsywnych trójkątów za pomocą CSS

+0

Istnieje świetny artykuł Chrisa Coyera w CSS-tricks.com, który pokazuje, jak tworzyć więcej niż trójkąty z czystym CSS. http://css-tricks.com/the-shapes-of-css/ – sulfureous

+0

@sulfureous yeah, to niesamowite zasoby. –

+0

możliwy duplikat [Responsywnego trójkąta div] (http://stackoverflow.com/questions/26891619/responsive-triangle-div) –

Odpowiedz

7

Tworzenie wrażliwych kształtów kątowych jest trochę trudne, ponieważ nie można używać wartości procentowych jako wartości border w swoim CSS, więc napisałem kilka funkcji do obliczenia szerokości strony i odpowiednio zmieniania rozmiarów trójkąta. Pierwszy oblicza rozmiar podczas ładowania strony, drugi przelicza rozmiar wraz ze zmianą szerokości strony.

CSS:

.triangle { 
    width: 0; 
    height: 0; 
    border-top: 50px solid rgba(255, 255, 0, 1); 
    border-right: 100px solid transparent; 
} 

HTML:

<div class="triangle"></div> 

JS:

$(document).ready(function() { 
    var windowWidth = $(window).width(); 
    $(".triangle").css({ 
     "border-top": windowWidth/2 + 'px solid rgba(255, 255, 0, 1)' 
    }); 
    $(".triangle").css({ 
     "border-right": windowWidth/1.5 + 'px solid transparent' 
    }); 
}); 

$(window).resize(function() { 
    var windowWidthR = $(window).width(); 
    $(".triangle").css({ 
     "border-top": windowWidthR/2 + 'px solid rgba(255, 255, 0, 1)' 
    }); 
    $(".triangle").css({ 
     "border-right": windowWidthR/1.5 + 'px solid transparent' 
    }); 
}); 

Oto jsFiddle - http://jsfiddle.net/craigcannon/58dVS/17/

+1

Dobrze ... +1 dla pytań i odpowiedzi, ale jakikolwiek pomysł, dlaczego używasz ' % "dla' rgba' –

+0

również, procent wynosi więcej niż 100%? – Raptor

+0

@ Mr.Alien lol. Dobre miejsce. Myślę, że właśnie skopiowałem wartość z photoshopa i włączyłem% przez przypadek. Przegląd teraz. –

0

Można osiągnąć to samo za pomocą prostych CSS

Aby to czuły go używać w zapytaniach mediów ..

Spróbuj następującą JsFiddle

http://jsfiddle.net/arunberti/52grj/

.triangle { 
    width: 0; 
    height: 0; 
    border-top: 50px solid rgba(255%, 204%, 0%, 1); 
    border-right: 100px solid transparent; 
} 
+0

Oczywiście, ale trzeba będzie tworzyć zapytania o media co 10 pikseli, aby zachować spójny projekt. –

5

Reponsive trójkąty można osiągnąć tylko z CSS, korzystając z wyściółką oblicza w stosunku do szerokości rodzica, aby objąć duży trójkąt o stałej szerokości. Aby utworzyć trójkąt up-wskazującego ze 100% szerokość:

.triangle-up { 
    width: 50%; 
    height: 0; 
    padding-left:50%; 
    padding-bottom: 50%; 
    overflow: hidden; 
} 
.triangle-up div { 
    width: 0; 
    height: 0; 
    margin-left:-500px; 
    border-left: 500px solid transparent; 
    border-right: 500px solid transparent; 
    border-bottom: 500px solid green; 
} 

lub używając pseudoelements i tylko jeden div:

.triangle-up { 
    width: 50%; 
    height: 0;  
    padding-left:50%; 
    padding-bottom: 50%; 
    overflow: hidden; 
} 
.triangle-up:after { 
    content: ""; 
    display: block; 
    width: 0; 
    height: 0; 
    margin-left:-500px; 
    border-left: 500px solid transparent; 
    border-right: 500px solid transparent; 
    border-bottom: 500px solid #959595; 
} 

Here's a fiddle. Aby uzyskać pełne wyjaśnienie, jak działają te elementy, oraz w lewym i prawym fragmencie trójkąta wskazującego pozycję zobacz mój artykuł na temat Pure CSS responsive triangles. Podany CSS jest dla trójkąta o stosunku wysokości do podstawy równym 2. Próbując zmienić proporcje trójkąta nie wiedząc, jak te trójkąty mogą być skomplikowane, fałszywa reakcja.

+0

Link do Twojego artykułu jest martwy! :-(Czysta sztuczka! – chadoh