Si j'ai une div avec quelques éléments enfants et que la transformation css est mise à l'échelle. J'ai un élément enfant que je ne veux pas mettre à l'échelle
#parent{
-webkit-transform: scale(.5);
}
span:last-child{
-webkit-transform: Something to ignore the parent scale;
}
<div id="parent">
<span>Child 1</span>
<span>Child 2</span>
<span>Child 3 (Don't Scale Me)</span>
</div>
Cela peut-il être fait avec css seulement? Sans changer le code HTML ni utiliser js.
Malheureusement, ce n'est pas possible.
Vous avez à peu près deux autres options:
Exemples:
// Example 1.
span:not(:last-child) {
display: inline-block; /* You can't scale inline elements */
transform: scale(2);
}
// Example 2.
#parent{
transform: scale(.5);
}
span:last-child{
transform: scale(2);
}
J'ai bien peur que vous deviez utiliser un sélecteur plus détaillé, comme celui-ci #parent > span:not(:last-child)
. Exemple .
Une autre solution possible avec une sortie plus propre, mais avec une petite modification du code html, consiste à placer l'élément en dehors de l'élément parent, ce qui doit être mis à l'échelle.
Après cela, définissez child div sur parent. Maintenant, définissez la valeur supérieure sur 0 moins la hauteur du parent et à gauche sur 0.
De cette façon, les éléments enfants ne seront pas affectés et ne seront pas flous.
Pour moi, cette solution a toujours bien fonctionné.
Jetez un oeil à cette question similaire, mais avec un exemple beaucoup plus simple, à cause du moins de code: Mettre à l'échelle l'élément parent mais supprimer la mise à l'échelle des éléments enfants
#parent {
height: 200px; width: 300px;
background: beige;
transition: transform 0.3s linear;
transform-Origin: top left;
}
#child {
/* top value 0 is minus the height of parent*/
top: -200px; left: 0px;
position: relative;
pointer-events: none;
}
.scale {
transition: transform 0.3s linear;
transform-Origin: top left;
}
#parent:hover {
transform: scale(2.0);
transition: transform 0.3s linear;
}
/* affect child elements by hover, too */
#parent:hover + #child > .scale {
transform: scale(2.0);
transition: transform 0.3s linear;
}
/* set span to block for transforming */
span {
display: block;
padding-bottom: 10px;
}
<div id="parent">
</div>
<div id="child">
<span class="scale">Child 1</span>
<span class="scale">Child 2</span>
<span>Child 3 (Don't Scale Me)</span>
</div>
/ * set span to block pour transformer * /
Comment utiliser la transformation CSS3 sur une étendue?
/ * affecte aussi les éléments enfants en survol * /
Comment affecter d'autres éléments lorsqu'un survol est survolé ou mieux Que signifie le sélecteur CSS “+” (signe plus)?
Je pense qu'il n'y a pas d'autre solution pour obtenir une sortie propre, car l'échelle affectera toujours les sous-éléments, mais vous pouvez effectuer cette solution de contournement.
Cela devrait fonctionner avec une position fixe des divs, aussi.
De toute façon, vous devez changer le code html pour obtenir une sortie propre.
J'ai trouvé hack pour que Chrome résolve le problème de flou.
#parent { transform: scale(5);}
#child { transform: scale(0.2) translate3d( 0, 0, 0);}