J'ai besoin de créer une ligne en CSS
pur avec une fossette au milieu. Est-il possible? Si oui, comment puis-je faire cela?
Les règles CSS
que je connais pour rendre le div
entier en demi-cercle ou changer la bordure de l'élément.
Par exemple: border-radius
, ou perspective
ou border-top-radius
...
3 Réponses :
ce n'est pas possible avec border-radius, essayez avec clip-path
Avez-vous un exemple? avec une ligne qui traverse
Voici mon point de vue en utilisant un pseudo-contenu positionné de manière absolue et un conteneur relatif. Je crée une forme ovale dans le contenu :: after
et cache la moitié supérieure de celui-ci en utilisant overflow: hidden
.
<div class="thing"></div>
.thing { width: 400px; height: 200px; position: relative; overflow: hidden; } .thing::before, .thing::after { content: ''; z-index: 1; position: absolute; } .thing::before { border-top: 2px solid black; left: 0; right: 0; top: 0; height: 2px; } .thing::after { border-radius: 60%; left: 20px; right: 20px; height: 300px; border: 2px solid black; top: -234px; background-color: white; } html { margin: 3em; }
Vous pouvez envisager plusieurs arrière-plans. Un radial-gradient
pour la courbe et un linear-gradient
pour les petites lignes:
<div class="box"></div> <div class="box" style="--rad:80px;--p:20px;"></div> <div class="box" style="--rad:50px;--p:20px;--b:2px"></div> <div class="box" style="--rad:100px;--p:70px;--b:8px"></div>
.box { --b:5px; /*border*/ --r:100px; /*radius*/ --p:50px; /*offset from top */ height:100px; background: radial-gradient(circle var(--r) at 50% calc(-1*var(--p)), transparent calc(100% - var(--b) - 1px), #000 calc(100% - var(--b)), #000 100%) 0 0/100% var(--b), radial-gradient(circle var(--r) at 50% calc(-1*var(--p)), transparent calc(100% - var(--b) - 1px), #000 calc(100% - var(--b)), #000 99%,transparent 100%); background-repeat:no-repeat; } body { background:pink; }
Vous pouvez ajouter une variable CSS pour mieux contrôler les différentes valeurs. J'envisagerai une autre syntaxe pour mieux contrôler les lignes du haut en utilisant un autre radial-gradient
qui sera le même que le principal mais avec une taille réduite afin que nous n'en voyions qu'une petite partie et nous gardons son dernière couleur à être le noir pour avoir nos lignes.
<div class="box"></div>
.box { width:300px; height:200px; background: linear-gradient(#000,#000) top left/70px 5px, linear-gradient(#000,#000) top right/70px 5px, radial-gradient(circle 100px, /*circle with 100px radius*/ transparent calc(100% - 6px), #000 calc(100% - 5px), /*around 5px border*/ #000 99%,transparent 100%) 0 -150px; /*we move the centre of the circle by -150px to top*/ background-repeat:no-repeat; } body { background:pink; }
@velvetInk si on comprend le truc, ça peut être très simple;)
Vous êtes si doué pour les dégradés radiaux! J'ai besoin de lire sur eux. Avez-vous une ressource d'apprentissage préférée?
@AndyHoffman pas vraiment, j'utilise généralement la spécification officielle pour comprendre les différentes valeurs et comment cela fonctionne ( drafts.csswg.org/css-images-3/#radial-gradients ) alors j'essaye de jouer avec eux afin de réaliser différentes choses.