Boîte de flèche avec CSS

Comment puis-je faire cette boîte en CSS?

J'ai vu quelques tutoriels qui enseignent comment créer des boîtes avec des flèches, cependant, dans mon cas, aucun de ces tutoriels ne convient.

boîte

24
demandé sur rightfold 2013-04-24 02:16:08

3 réponses

J'ai créé votre élément avec la bordure 1px environnante. J'utilise un élément <div> et profite du :before et :after pseudo-éléments (navigateur-support ). Le rectangle principal a une bordure 1px régulière, mais les éléments triangulaires sont essentiellement des triangles 2, l'un plus sombre que l'autre.

Le triangle plus clair se trouve au-dessus du triangle plus sombre, ce qui a pour effet de le cacher, et est légèrement décalé vers la gauche pour montrer le triangle plus sombre en dessous. L'illusion qui en résulte est une bordure sombre 1px sur le triangle lui-même.

Voici une question qui pose une question similaire:

Comment puis-je créer une "tooltip tail" en utilisant CSS pur?

L'une des réponses a en fait une excellente explication de la façon dont on peut atteindre cet effet de triangle:

Https://stackoverflow.com/a/5623150/196921

Aussi, c'est une excellente référence pour toutes les choses de fantaisie que vous pouvez faire avec bordures (grâce à PSCoder):

... et voici un générateur CSS doux (Merci à David Taiaroa):


Quoi Qu'il en soit, voici le code correspondant:

    #arrow {
      width: 128px;
      height: 100px;
      background-color: #ccc;
      border: 1px solid #999;
      position: relative;
    }
    #arrow:after {
      content: '';
      position: absolute;
      top: 0px;
      left: 128px;
      width: 0;
      height: 0;
      border: 50px solid transparent;
      border-left: 12px solid #ccc;
    }
    #arrow:before {
      content: '';
      position: absolute;
      top: 0px;
      left: 129px;
      width: 0;
      height: 0;
      border: 50px solid transparent;
      border-left: 12px solid #999;
    }
<div id="arrow"></div>
33
répondu Hristo 2017-05-23 10:30:09

Voici la solution que j'ai créée

Il y a 2 façons simples de le faire. La première, la moins efficace est d'avoir 2 éléments. Je profite du pseudo élément :after. J'ai utilisé position:absolute sur :after pour 2 raisons.

  1. vous pouvez placer l'élément où vous devez
  2. Il empêche la fin du triangle d'être coupée

La clé pour créer le triangle utilise la propriété border. Vous avez 2 bordures avec la couleur de transparent set. Ces 2 bordures sont opposées à la direction que vous voulez aller. Donc, si vous voulez faire un triangle rectangle, puis utilisez top et bottom. Ce qui donne à la flèche sa forme est la dernière bordure. Il va aussi dans la direction opposée. Donc, pour un triangle rectangle, vous utiliseriez border-left avec une couleur. Pour obtenir ce à la bonne hauteur, vous devez faire la moitié de la hauteur de la boîte que vous souhaitez placer sur

6
répondu Cody Guldner 2013-04-24 00:03:25

SVG est le moyen recommandé de créer de telles formes. Il offre la simplicité et l'échelle-capacité.

Nous pouvons utiliser l'élément polygon ou path de SVG pour créer une forme comme ci-dessus et la remplir avec une couleur unie, un dégradé ou un motif.

Un Seul attribut points est utilisé pour définir des formes de polygon élément. Cet attribut consiste en une liste de points. Chaque point doit avoir 2 nombres, une coordonnée x et une coordonnée Y. Une ligne droite est tracée automatiquement à partir dernier point au point de départ pour fermer la forme.

Voici le code nécessaire pour créer cette forme:

<polygon points="10,12 265,10 285,93 265,184 10,184"
         stroke="#333"
         stroke-width="2"
         fill="#eee" />

Voici une brève description du code ci-dessus:

  • points attribut définit la structure de la forme.
  • stroke attribut définit la couleur pour le contour / bordure.
  • stroke-width définit l'épaisseur du contour / bordure.
  • fill attribut définit la couleur de la forme intérieure à être remplir.

L'Image De Sortie:

Forme Du Polygone

Exemple De Travail:

body {
  background: #b6cdc7  url("https://www.hdwallpapers.net/previews/hot-air-balloon-over-the-mountain-987.jpg") no-repeat;
  background-position: center bottom;
  background-size: cover;
  margin: 0;
}

.box {
  justify-content: center;
  align-items: center;
  height: 100vh;
  display: flex;
}
<div class="box">
  <svg width="300" height="200" viewBox="0 0 300 200">
    <polygon points="10,12 265,10 285,93 265,184 10,184" stroke="#333" stroke-width="2" fill="#eee" />
  </svg>
</div>

Cette forme peut également être remplie de dégradé ou de motif.

Forme de polygone remplie de dégradé

Exemple De Travail:

body {
  background: #b6cdc7 url("https://www.hdwallpapers.net/previews/hot-air-balloon-over-the-mountain-987.jpg") no-repeat;
  background-position: center bottom;
  background-size: cover;
  margin: 0;
}

.box {
  justify-content: center;
  align-items: center;
  height: 100vh;
  display: flex;
}
<div class="box">
  <svg width="300" height="200" viewBox="0 0 300 200">
    <defs>
      <linearGradient id="grad">
        <stop offset="0" stop-color="#11a798" />
        <stop offset="1" stop-color="#23645d" />
      </linearGradient>
    </defs>
    <polygon id="shape" points="10,12 265,10 285,93 265,184 10,184" stroke="#333" stroke-width="2" fill="url(#grad)" />
  </svg>
</div>

Nous pouvons appliquer de l'ombre sur cette forme en utilisant les filtres de SVG.

Forme de polygone avec dégradé et ombre

De Travail Exemple:

body {
  background: #b6cdc7 url("https://www.hdwallpapers.net/previews/hot-air-balloon-over-the-mountain-987.jpg") no-repeat;
  background-position: center bottom;
  background-size: cover;
  margin: 0;
}

.box {
  justify-content: center;
  align-items: center;
  height: 100vh;
  display: flex;
}
<div class="box">
  <svg width="300" height="200" viewBox="0 0 300 200">
    <defs>
      <linearGradient id="grad">
        <stop offset="0" stop-color="#11a798" />
        <stop offset="1" stop-color="#23645d" />
      </linearGradient>
      <filter id="shadow">
        <feGaussianBlur in="SourceAlpha" stdDeviation="4" />
        <feMerge>
          <feMergeNode />
          <feMergeNode in="SourceGraphic" />
        </feMerge>
      </filter>
    </defs>
    <polygon id="shape" points="10,12 265,10 285,93 265,184 10,184" stroke="#333" stroke-width="2" fill="url(#grad)" filter="url(#shadow)" />
  </svg>
</div>
4
répondu Mohammad Usman 2017-08-29 13:02:08