Cela devrait fonctionner, mais selon la façon dont les styles appliqués sont Select
externes, ils peuvent avoir une spécificité plus élevée et remplacent toujours les styles que vous avez appliqués. (Voir this article pour une amorce sur la façon dont la spécificité fonctionne)
Sans savoir quel Select
composant que vous utilisez c'est un peu difficile à déboguer, mais je suppose qu'il utilise les styles en ligne (par exemple l'hélice style
) qui ont une très haute spécificité et donc remplacer vos styles appliqués.
Il existe deux façons de modifier la spécificité de vos styles, les deux étant non recommandés si le composant externe n'utilise pas les styles en ligne.
La première façon de cogner la spécificité est d'utiliser !important
:
const StyledSelect = styled(Select)`
li {
margin-left: 20px!important;
}
`
Dans certains cas qui pourraient ne pas suffire, et il est aussi assez fastidieux une fois que vous avez plus de propriétés dont vous avez besoin pour passer outre la force. Une meilleure façon, mais toujours pas moyen recommandé aussi, il est d'utiliser le hack de classe: (notez les esperluette)
const StyledSelect = styled(Select)`
&&& li {
margin-left: 20px;
}
`
Qu'est-ce que styled-components
fait ici est de remplacer chacun de ces &
avec la classe générée, ce qui signifie le CSS qui en résulte ressembler à quelque chose comme ceci:
.sc-asdf123.sc-asdf123.sc-asdf123 li {
margin-left: 20px;
}
Ces trois classes bousculent massivement la spécificité des styles dans le bloc. Cela devrait faire l'affaire!
Pour le style pas le premier enfant, vous pouvez utiliser le first-child
en même temps que le sélecteur not
pseudo:
const StyledSelect = styled(Select)`
&&& li:not(:first-child) {
margin-left: 20px;
}
`
votre code va tous style li éléments à l'intérieur du composant Select. Si vous voulez exclure le premier li, vous devrez ajouter une règle/sélecteur css. Voir [cette question] (https://stackoverflow.com/questions/10033299/is-there-any-way-to-specify-a-css-shorthand-for-all-elements-except-the-first-l) – devboell
votre question est un peu floue. Le 'marge-left: 20px;' est-il correctement appliqué, et vous demandez-vous comment exclure le premier li? Ou votre style n'est-il pas appliqué du tout? – devboell