Il existe de nombreuses formes CSS différentes sur CSS Tricks - Shapes of CSS et je suis particulièrement perplexe avec un triangle:
#triangle-up {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
<div id="triangle-up"></div>
Comment et pourquoi ça marche?
css
geometry
polygon
css-shapes
Stanislav Shabalin
la source
la source
Réponses:
CSS Triangles: une tragédie en cinq actes
Comme l'a dit Alex , des bordures de largeur égale se touchent les unes contre les autres à des angles de 45 degrés:
Lorsque vous n'avez pas de bordure supérieure, cela ressemble à ceci:
Ensuite, vous lui donnez une largeur de 0 ...
... et une hauteur de 0 ...
... et enfin, vous rendez les deux bordures latérales transparentes:
Cela se traduit par un triangle.
la source
:before
ou des:after
pseudo-classes.left-border
etright-border
non isocèle, on peut faire. Et quand de nombreux triangles sont combinés ... jsfiddle.net/zRNgzLes bordures utilisent un bord angulaire où elles se croisent (angle de 45 ° avec des bordures de largeur égale, mais le changement des largeurs de bordure peut biaiser l'angle).
Jetez un œil au jsFiddle .
En masquant certaines bordures, vous pouvez obtenir l'effet triangle (comme vous pouvez le voir ci-dessus en rendant les différentes portions de couleurs différentes).
transparent
est souvent utilisé comme couleur de bord pour obtenir la forme du triangle.la source
Commencez avec un carré et des bordures de base. Chaque bordure recevra une couleur différente afin que nous puissions les distinguer:
ce qui vous donne ceci :
Mais il n'y a pas besoin de bordure supérieure, alors définissez sa largeur sur
0px
. Maintenant, notre bordure inférieure200px
fera notre triangle de 200 pixels de haut.et nous obtiendrons ceci :
Ensuite, pour masquer les deux triangles latéraux, définissez la couleur de la bordure sur transparent. Étant donné que la bordure supérieure a été supprimée, nous pouvons également définir la couleur de la bordure supérieure sur transparente.
enfin, nous obtenons ceci :
la source
There's another way to draw ..
, qui se révèle être de la même manière :) Belle explication cependantUne approche différente:
Triangles CSS3 avec rotation de transformation
La forme triangulaire est assez facile à réaliser en utilisant cette technique. Pour les personnes qui préfèrent voir une animation expliquant comment cette technique fonctionne ici, c'est:
Sinon, voici une explication détaillée en 4 actes (ce n'est pas une tragédie) de la façon de faire un triangle rectangle isocèle avec un élément.
<div class="tr"></div>
ÉTAPE 1: Faites une div
Facile, assurez-vous simplement que
width = 1.41 x height
. Vous pouvez utiliser n'importe quelle technologie ( voir ici ), y compris l'utilisation de pourcentages et de rembourrage pour maintenir le rapport d'aspect et créer un triangle réactif . Dans l'image suivante, le div a une bordure jaune doré.Dans cette div, insérez un pseudo-élément et donnez-lui 100% de largeur et de hauteur de parent. Le pseudo-élément a un fond bleu dans l'image suivante.
À ce stade, nous avons ce CSS :
ÉTAPE 2: Tournons
Tout d'abord, le plus important: définir une origine de transformation . L' origine par défaut est au centre du pseudo-élément et nous en avons besoin en bas à gauche. En ajoutant ce CSS au pseudo-élément:
transform-origin:0 100%;
outransform-origin: left bottom;
Maintenant, nous pouvons faire pivoter le pseudo-élément de 45 degrés dans le sens des aiguilles d'une montre avec
transform : rotate(45deg);
À ce stade, nous avons ce CSS :
ÉTAPE 3: cachez-le
Pour masquer les parties indésirables du pseudo-élément (tout ce qui déborde le div avec la bordure jaune), il vous suffit de définir
overflow:hidden;
sur le conteneur. après avoir enlevé la bordure jaune, vous obtenez ... un TRIANGLE ! :DEMO
CSS:
ÉTAPE 4: allez plus loin ...
Comme indiqué dans la démo , vous pouvez personnaliser les triangles:
skewX()
.Pourquoi utiliser cette technique?
Pourquoi ne pas utiliser cette technique?
la source
skewX
ont été dérivées serait utile.Voici une animation dans JSFiddle que j'ai créée pour la démonstration.
Voir également l'extrait ci-dessous.
Ceci est un GIF animé réalisé à partir d'un screencast
Afficher l'extrait de code
Version aléatoire
Afficher l'extrait de code
Version à la fois
Afficher l'extrait de code
la source
Disons que nous avons le div suivant:
Maintenant, éditez le CSS étape par étape, ainsi vous aurez une idée claire de ce qui se passe autour
ÉTAPE 1: Lien JSfiddle:
Ceci est une simple div. Avec un CSS très simple. Un profane peut donc comprendre. Div a des dimensions de 150 x 150 pixels avec une bordure de 50 pixels. L'image est jointe:
ÉTAPE 2: Lien JSfiddle:
Maintenant, je viens de changer la couleur de la bordure des 4 côtés. L'image est jointe.
ÉTAPE: 3 Lien JSfiddle:
Maintenant, je viens de changer la hauteur et la largeur de div de 150 pixels à zéro. L'image est jointe
ÉTAPE 4: JSfiddle:
Maintenant, j'ai rendu toutes les bordures transparentes à l'exception de la bordure inférieure. L'image est jointe ci-dessous.
ÉTAPE 5: Lien JSfiddle:
Maintenant, je viens de changer la couleur d'arrière-plan en blanc. L'image est jointe.
Nous avons donc obtenu le triangle dont nous avions besoin.
la source
Et maintenant quelque chose de complètement différent ...
Au lieu d'utiliser des astuces css, n'oubliez pas les solutions aussi simples que les entités html:
Résultat:
▲
Voir: Quelles sont les entités HTML pour les triangles haut et bas?
la source
Considérez le triangle ci-dessous
Voici ce que l'on nous donne:
Pourquoi est-il sorti sous cette forme? Le diagramme ci-dessous explique les dimensions, notez que 15px a été utilisé pour la bordure inférieure et 10px a été utilisé pour la gauche et la droite.
Il est assez facile de faire un triangle à angle droit également en supprimant la bordure droite.
la source
Pour aller plus loin, en utilisant CSS basé sur cela, j'ai ajouté des flèches à mes boutons précédent et suivant (oui, je sais que ce n'est pas 100% cross-browser, mais néanmoins lisse).
la source
D'ACCORD, ce triangle sera créé à cause de la façon dont les bordures des éléments fonctionnent ensemble en HTML et CSS ...
Comme nous utilisons généralement des bordures de 1 ou 2 pixels, nous ne remarquons jamais que les bordures font un angle de 45 ° les unes avec les autres avec la même largeur et si la largeur change, le degré d'angle est également modifié, exécutez le code CSS que j'ai créé ci-dessous:
Ensuite, à l'étape suivante, nous n'avons ni largeur ni hauteur, quelque chose comme ceci:
Et maintenant, nous rendons les bordures gauche et droite invisibles pour rendre notre triangle souhaitable comme ci-dessous:
Si vous ne souhaitez pas exécuter l'extrait de code pour voir les étapes, j'ai créé une séquence d'images pour examiner toutes les étapes d'une image:
la source
Une approche différente. Avec gradient linéaire (pour IE, uniquement IE 10+). Vous pouvez utiliser n'importe quel angle:
Voici jsfiddle
la source
CSS
clip-path
C'est quelque chose que je pense que cette question a manqué;
clip-path
clip-path
utilisera l'élément lui-même plutôt que ses bordures pour couper la forme que vous spécifiez dans ses paramètres. Il utilise un système de coordonnées basé sur un pourcentage super simple qui rend l'édition très facile et signifie que vous pouvez le ramasser et créer des formes étranges et merveilleuses en quelques minutes.Exemple de forme de triangle
Inconvénient
Il a un inconvénient majeur pour le moment, l'un étant son manque de support majeur, n'étant vraiment couvert que par les
-webkit-
navigateurs et n'ayant aucun support sur IE et seulement très partiel dans FireFox.Ressources
Voici quelques ressources et documents utiles pour mieux comprendre
clip-path
et commencer à créer les vôtres.clip-path
générateurclip-path
Documentation MDNclip-path
Prise en charge du navigateurla source
C'est une vieille question, mais je pense que cela vaudra la peine de partager comment créer une flèche en utilisant cette technique de triangle.
Étape 1:
Permet de créer 2 triangles, pour le second nous allons utiliser la
:after
pseudo classe et la positionner juste en dessous de l'autre:Étape 2
Maintenant, il suffit de définir la couleur de bordure prédominante du deuxième triangle sur la même couleur de l'arrière-plan:
Afficher l'extrait de code
Jouez avec toutes les flèches:
http://jsfiddle.net/tomsarduy/r0zksgeu/
la source
Mixage triangle SASS (SCSS)
J'ai écrit ceci pour faciliter (et sécher) la génération automatique d'un triangle CSS:
exemple de cas d'utilisation:
Page aire de jeux
Remarque importante:
si le triangle semble pixellisé dans certains navigateurs, essayez l'une des méthodes décrites ici .
la source
Si vous souhaitez appliquer une bordure au triangle, lisez ceci: Créer un triangle avec CSS?
Presque toutes les réponses se concentrent sur le triangle construit à l'aide de la bordure, je vais donc élaborer la
linear-gradient
méthode (comme commencé dans la réponse de @lima_fil ).L'utilisation d'une valeur de degré comme
45°
nous obligera à respecter un rapport spécifique deheight/width
afin d'obtenir le triangle que nous voulons et cela ne sera pas réactif:Afficher l'extrait de code
Au lieu de faire cela , il faut tenir compte des valeurs prédéfinies de direction comme
to bottom
,to top
, etc. Dans ce cas , nous pouvons obtenir toute sorte de forme triangulaire tout en gardant réactif.1) Triangle rectangle
Pour obtenir un tel triangle nous avons besoin d' un gradient linéaire et une direction diagonale comme
to bottom right
,to top left
,to bottom left
, etc.Afficher l'extrait de code
2) triangle isocèle
Pour celui-ci, nous aurons besoin de 2 gradients linéaires comme ci-dessus et chacun prendra la moitié de la largeur (ou de la hauteur). C'est comme si nous créons une image miroir du premier triangle.
Afficher l'extrait de code
3) triangle équilatéral
Celui-ci est un peu délicat à gérer car nous devons garder une relation entre la hauteur et la largeur du dégradé. Nous aurons le même triangle que ci-dessus mais nous rendrons le calcul plus complexe afin de transformer le triangle isocèle en triangle équilatéral.
Pour vous faciliter la tâche, nous considérerons que la largeur de notre div est connue et que la hauteur est suffisamment grande pour pouvoir dessiner notre triangle à l'intérieur (
height >= width
).Nous avons nos deux dégradés
g1
etg2
, la ligne bleue est la largeur de ladiv
w
et chaque gradient en aura 50% (w/2
) et chaque côté du triangle devrait être égal àw
. La ligne verte est la hauteur des deux gradientshg
et nous pouvons facilement obtenir la formule ci-dessous:(w/2)² + hg² = w²
--->hg = (sqrt(3)/2) * w
--->hg = 0.866 * w
Nous pouvons compter
calc()
pour faire notre calcul et obtenir le résultat recherché:Afficher l'extrait de code
Une autre façon est de contrôler la hauteur de div et de garder la syntaxe de gradient facile:
Afficher l'extrait de code
4) Triangle aléatoire
Pour obtenir un triangle aléatoire, c'est facile car nous devons simplement supprimer la condition de 50% de chacun MAIS nous devons garder deux conditions (les deux doivent avoir la même hauteur et la somme des deux largeurs doit être de 100%).
Afficher l'extrait de code
Mais que se passe-t-il si nous voulons définir une valeur pour chaque côté? Nous devons simplement refaire le calcul!
Définissons
hg1
ethg2
comme la hauteur de notre gradient (les deux sont égaux à la ligne rouge) puiswg1
etwg2
comme la largeur de notre gradient (wg1 + wg2 = a
). Je ne vais pas détailler le calcul mais à la fin nous aurons:Maintenant, nous avons atteint la limite de CSS car même avec
calc()
nous ne serons pas en mesure de l'implémenter, nous devons simplement rassembler le résultat final manuellement et les utiliser comme taille fixe:Afficher l'extrait de code
Prime
Nous ne devons pas oublier que nous pouvons également appliquer la rotation et / ou l'inclinaison et nous avons plus d'options pour obtenir plus de triangle:
Afficher l'extrait de code
Et bien sûr, nous devons garder à l'esprit la solution SVG qui peut être plus appropriée dans certaines situations:
Afficher l'extrait de code
la source
voici un autre violon:
https://jsfiddle.net/qdhvdb17/
la source
D'autres l'ont déjà bien expliqué. Permettez-moi de vous donner une animation qui vous expliquera cela rapidement: http://codepen.io/chriscoyier/pen/lotjh
Voici du code pour jouer avec et apprendre les concepts.
HTML:
CSS:
Jouez avec cela et voyez ce qui se passe. Réglez la hauteur et la largeur sur zéro. Ensuite, supprimez la bordure supérieure et rendez la gauche et la droite transparente, ou regardez simplement le code ci-dessous pour créer un triangle CSS:
la source
Si vous voulez jouer avec
border-size
,width
etheight
voir comment ceux -ci peuvent créer des formes différentes, essayez ceci:la source
Essaye ça:-
la source
Je sais que c'est un ancien, mais j'aimerais ajouter à cette discussion qu'il existe au moins 5 méthodes différentes pour créer un triangle en utilisant uniquement HTML et CSS.
borders
linear-gradient
conic-gradient
transform
etoverflow
clip-path
Je pense que tous ont été couverts ici, sauf pour la méthode 3, en utilisant le
conic-gradient
, donc je vais le partager ici:la source