Je veux que les étoiles jaunes obscurcissent complètement les étoiles bleues
Quelqu'un pourrait-il m'aider à terminer cela? Ou au moins pointer dans la bonne direction?
Voici mon code:
<div class="star-ratings-css"> <div class="star-ratings-css-bottom"></div> <div class="star-ratings-css-top" style="width: 31%"></div> </div>
.star-ratings-css {
width: 100px;
}
.star-ratings-css-top {
display: block;
height: 22px;
position: relative;
overflow: hidden;
}
.star-ratings-css-bottom::before {
color: #167ac6;
content: "â
â
â
â
â
";
font-size: 22px;
position: absolute;
}
.star-ratings-css-top::before {
color: #f4b414;
content: "â
â
â
â
â
";
font-size: 22px;
position: relative;
}
Cela ne fonctionne pas comme je le souhaiterais. Qu'est-ce que je fais mal?
Les étoiles jaunes ne recouvrent pas complètement les étoiles bleues.
6 Réponses :
Supprimez simplement overflow: hidden; et cela fonctionnera comme un charme. Voici un exemple pour 4/5.
<div class="star-ratings-css"> <div class="star-ratings-css-bottom"></div> <div class="star-ratings-css-top" style="width: 31%"></div> </div>
.star-ratings-css {
width: 100px;
}
.star-ratings-css-top {
display: block;
height: 22px;
position: relative;
}
.star-ratings-css-bottom::before {
color: #167ac6;
content: "â
â
â
â
â
";
font-size: 22px;
position: absolute;
}
.star-ratings-css-top::before {
color: #f4b414;
content: "â
â
â
â
";
font-size: 22px;
position: relative;
}
Le code est trop compliqué et peut être facilement fait avec de meilleures balises que les Les deux types de balises utilisées dans la démo suivante sont: et Il y a une Chaque Donc, quand ce jeu de règles est en CSS: il stylera les étoiles dans deux états: Cliquez sur une étoile et toutes les étoiles à sa droite s'éteindront. Cliquez à l'extrémité gauche ou droite où il n'y a pas d'étoiles et toutes les étoiles seront désactivées.
HTML
<label for='s0' class='void'> </label>
<input id='s0' name='rad' type='radio' value='0'>
<label for='s1' class='star'>★</label>
<input id='s1' name='rad' type='radio' value='1'>
<label for='s2' class='star'>★</label>
<input id='s2' name='rad' type='radio' value='2'>
<label for='s3' class='star'>★</label>
<input id='s3' name='rad' type='radio' value='3'>
<label for='s4' class='star'>★</label>
<input id='s4' name='rad' type='radio' value='4'>
<label for='s5' class='star'>★</label>
<input id='s5' name='rad' type='radio' value='5' checked>
<label for='s0' class='void'> </label>
[name=rad] {
display: none
}
label {
display: inline-block;
outline: 0;
font-size: 10vh;
line-height: 1;
color: gold;
background: none;
transition: 0.6s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
}
[name=rad]:checked~.star {
color: navy;
transition: 0.6s;
}
#s0:checked~.star {
color: navy;
transition: 0.6s;
}
[name=rad]+label.star:hover {
color: cyan;
transition: 0.4s;
}
[name=rad]+label.star:active {
color: tomato;
transition: 0.4s;
} entrée et une étiquette pour chaque icône étoile, l ' ID de l'entrée correspond à l' étiquette [for] attribut. Lorsqu'une paire input / label est configurée de cette façon, elles sont associées de telle sorte que lorsque l'on clique sur l'un, l'autre est également cliqué. Toutes les entrées seront masquées et toutes les étiquettes seront stylisées.
CSS
entrée sera suivie du label: [name='rad']:checked ~ .star { `color: navy` }
<label for='ID3' class='star'>â
</label> // 1. User clicks
<input id='ID3' name='rad' type='radio'> // 2. Which puts this as: [name='rad']:checked
<label for='ID4' class='star'>â
</label> /* 3. Any labels that occur from this point on
will be styled: ~ .star {color:navy}*/
<input id='ID4' name='rad' type='radio'>
<label for='ID5' class='star'>â
</label>
couleur: or par défaut (activé) ou couleur: bleu marine (désactivé). Démo
<label for='ID' class='star'>â
</label>
<input id='ID' name='rad' type='radio'>
Vous pouvez utiliser la position absolue pour les sélecteurs : before et : after .
<div class="star-ratings-css"> <div class="star-ratings-css-bottom"></div> <div class="star-ratings-css-top" style="width: 31%"></div> </div>
.star-ratings-css {
width: 100px;
}
.star-ratings-css-top {
display: block;
height: 22px;
position: relative;
overflow: hidden;
}
.star-ratings-css-bottom::before {
color: #167ac6;
content: "â
â
â
â
â
";
font-size: 22px;
position:absolute;top:0;left:8px
}
.star-ratings-css-top::before {
color: #f4b414;
content: "â
â
â
â
â
";
font-size: 22px;
position:absolute;top:-8px;left:0
}
Essayez la fonction "Inspecter" du navigateur Chrome pour ajuster les paramètres CSS à ce que vous voulez afficher.
Les deux premières étoiles ont été rendues toutes jaunes avec les modifications suivantes.
Une autre option pour obtenir seulement deux (2) étoiles jaunes est ...
Pour votre information, tous les navigateurs avec des outils de développement accessibles ont une fonction Inspecter. Ce n'est pas unique à Chrome (et ils n'étaient pas les premiers à en avoir un).
Vous pouvez simplifier votre code en utilisant un élément
<div class="star-ratings-css" style="--p:20%;"></div> <br> <div class="star-ratings-css" style="--p:50%;"></div> <br> <div class="star-ratings-css"></div>
.star-ratings-css {
display: inline-block;
position: relative;
font-size: 22px;
}
.star-ratings-css::before {
color: #167ac6;
content: "â
â
â
â
â
";
}
.star-ratings-css::after {
color: #f4b414;
content: "â
â
â
â
â
";
position: absolute;
top: 0;
left: 0;
width: var(--p, 100%);
overflow: hidden;
white-space:nowrap;
}
Je vous remercie. Mais je l'ai mis sur wordpress, et mis la largeur à 50% alors il n'affichera pas 2½ étoiles! woovn.com/them-tinh-thanh-pho- vao-form-checkout-cua-woocomme rce
@ LêNghĩa a mis à jour ma réponse, vous devez ajouter white-space: nowrap;
@ LêNghĩa ce n'est pas le code que vous utilisez pour votre site Web :)
Il y a quelques problèmes avec votre exemple:
L'élément supérieur fait 31% de 100 pixels mais les étoiles ont une largeur différente. Si vous définissez la largeur à 50%, il n'affichera pas 2½ étoiles!
Vous définissez une hauteur de 22px sur l'élément du haut et qui est plus courte que la hauteur réelle de l'élément du bas (22px * hauteur de la ligne = ~ 30px) qui est le problème dont vous parlez. p >
Vous pouvez utiliser display: inline-block pour étirer le conteneur au contenu, c'est-à-dire à la largeur réelle de cinq étoiles. Cela fera en sorte que les largeurs de pourcentage correspondent au nombre (ou fraction) d'étoiles correct. Et supprimez la hauteur: 22px . Le code simplifié ressemblerait à ceci:
<div class="star-ratings-css"> <div class="star-ratings-inner" style="width: 31%"></div> </div>
.star-ratings-css {
display: inline-block;
position: relative;
font-size: 22px;
}
.star-ratings-inner {
position: absolute;
overflow: hidden;
}
.star-ratings-inner::after {
color: #f4b414;
content: "â
â
â
â
â
";
}
.star-ratings-css::after {
color: #167ac6;
content: "â
â
â
â
â
";
}
Je vous remercie. Mais je l'ai mis sur wordpress, et mis la largeur à 50% alors il n'affichera pas 2½ étoiles! woovn.com/them-tinh-thanh-pho- vao-form-checkout-cua-woocomme rce
Dans la direction de Temani Afif j'ai ajouté white-space: nowrap; et cela a fonctionné. Merci beaucoup
Supprimez la propriété CSS
heightsurstar-Ratings-css-top.