J'utilise des composants stylisés et je souhaite cibler le premier enfant de Text
, mais je ne peux pas le faire.
const Text = styled.p` font-size: 12px; &:first-child { margin-bottom: 20px; } `; ... component return( <div> <p>I am just regular text</p> <p>Me too</p> <Text>Hello Joe</Text> // this should have the margin bottom <Text>Goodbye</Text > </div> )
4 Réponses :
Il ne devrait pas y avoir d'espace entre le &
et le :first-child
&:first-child { margin-bottom: 20px; }
c'est ce que je pensais aussi, et j'avais essayé ça aussi, mais ça ne marche pas
Impair. La propriété font-size s'applique-t-elle correctement?
J'ai légèrement mis à jour ma question, il y a un span
dans la balise p
, cela aurait-il quelque chose à voir avec le fait que cela ne fonctionne pas? Désolé de ne pas avoir inclus plus tôt.
@dan a raison, c'était l'espace vide. Vérifiez cette démo: tout fonctionne: codesandbox.io/s/8882z34y19
pouvez-vous vérifier la question mise à jour - c'est pourquoi elle est désactivée
Enfin, j'ai votre problème. Le composant stylisé se confond avec les deux premières balises p
natives (de mon point de vue) et c'est la raison pour laquelle le CSS n'est pas appliqué.
J'utiliserai une solution de contournement comme celle-ci:
const Text = styled.p` font-size: 12px; color: blue; &.colors { margin-bottom: 20px; color: red !important; } `; <div> <p>I am just regular text</p> <p>Me too</p> <Text className="colors">Hello Joe</Text> <Text>Goodbye</Text> </div>
En faisant cela, vous sélectionnez le troisième enfant (qui inclut les deux premières balises p
) pour le CSS
OU, vous pouvez faire quelque chose comme ceci: Ajouter un nom de classe pour la balise et donner du CSS pour cette classe.
const Text = styled.p` font-size: 12px; color: blue; &:nth-child(3) { margin-bottom: 20px; color: red !important; } `;
Voici la démo
J'espère que cela aide :)
J'ai légèrement mis à jour ma question, il y a un span
dans la balise p
, cela aurait-il quelque chose à voir avec le fait que cela ne fonctionne pas? Désolé de ne pas avoir inclus plus tôt. De plus, lorsque j'utilise votre code, tout est en bleu, donc pour une raison quelconque, le premier enfant ne fonctionne pas
si étrange, ne fonctionne toujours pas pour moi ici. Vous donnera de toute façon des votes positifs
@Thinker lol J'ai écrit presque exactement les mêmes mots et j'ai également fourni une démo en utilisant deux couleurs différentes. Je pense que nous pourrions être des âmes sœurs css, .. je plaisante ..: D
pouvez-vous vérifier la question mise à jour - c'est pourquoi elle est désactivée
@peterflanagan vous avez raison. Maintenant, je reçois le problème. C'est becz des deux premières balises p
. J'ai mis à jour mes solutions. J'espère que cela aide :)
il vaut mieux utiliser: last-of-type sur certains composants stylisés au lieu d'utiliser: nth-child et cela fonctionne parfaitement
const Text = styled.p` font-size: 12px; color: blue; &:nth-child(3) { margin-bottom: 20px; color: red !important; } `;
export default styled.div` :last-of-type { background: red; }`
Utilisez comme ça
const Text = styled.p` font-size: 12px; > * { &:first-child { margin-bottom: 20px; } } `;