Débordement de comportement après l'utilisation de CSS3 transformer
Veuillez vérifier les démo
J'ai deux div
s le premier div
est utilisé pour l'affichage de la barre de défilement et la deuxième div
est utilisé pour la rotation de l'intérieur le contenu de la div
.
Ma question est pourquoi la barre de défilement est de montrer, même si il n'y a pas de dépassement de capacité de l'intérieur du contenu.
Veuillez vérifier la démo et me dire ce que je fais de mal ici, et comment remédier à ce problème ou tout autre moyen d'atteindre cet objectif.
HTML
<div style="width: 1096px; height: 434px; overflow: auto; position: relative; border:solid 5px #555555">
<div id="RotationDiv">
<img style="left: 54px; top: 337px; width: 326px; height: 422px; position: absolute;" src="http://fc01.deviantart.net/fs70/f/2012/304/6/b/walfas_custom___vending_machine_2_by_grayfox5000-d5jljhe.png" />
</div>
</div>
CSS
#RotationDiv {
-ms-transform-origin: 539px 539px;
-webkit-transform-origin: 539px 539px;
width: 434px;
height: 1096px;
overflow: visible;
-ms-transform: rotate(90deg);
-webkit-transform: rotate(90deg);
background-color:Red;
}
que vous voulez ou ne voulez pas la barre de défilement?
Je veux barres de défilement, mais seulement lorsque les composants internes de dépassement de la div.
sa en raison de la css rotation de la propriété, même si vous êtes à la rotation de l'image à l'horizontale, c'est encore de l'utiliser à la verticale des propriétés. Vous êtes mieux de simplement de le changer dans photoshop ou quelque chose
Je veux barres de défilement, mais seulement lorsque les composants internes de dépassement de la div.
sa en raison de la css rotation de la propriété, même si vous êtes à la rotation de l'image à l'horizontale, c'est encore de l'utiliser à la verticale des propriétés. Vous êtes mieux de simplement de le changer dans photoshop ou quelque chose
OriginalL'auteur Siddiqui | 2014-01-21
Vous devez vous connecter pour publier un commentaire.
Vous utilisez
transformer
donc il change de modèle de formatage visuel d'un élément.De MDN:
Une ligne à nouveau à partir de MDN:
De W3C : 2 Module Interactions
Si vous avez un parent de l'élément avec les dimensions ci-dessous.
Maintenant, vous sont en train de transformer cet élément à l'aide de
Donc, ici, l'élément se transforme visuellement, mais pas littéralement, en d'autres termes si vous transformez un élément, il faut de l'espace physique sur un document comme un élément statique prend, c'est juste visuellement transforme l'élément. Je vais partager un schéma qui vous permettra de mieux comprendre..
Donc si vous avez transformé votre élément de ce genre, mais encore l'espace vertical a été prise en raison de la
height
de votre transformé élément, qui a transformé visuellement, mais pas littéralement...Donc, maintenant, quelle est la solution? Utilisation
position: absolute;
sur l'élément enfant, et de toute façon vous utilisezposition: relative;
sur le parent.Démo
Permet d'avoir un cas de test, j'ai les styles comme ci-dessous
Cas de Test
Ici, je suis la transformation d'un élément ayant
class
de.transformed
donc si vous le voyez, l'élément netransform
et je suis aussi la modification de l'origine, mais la prochaine box ne bouge pas, comme la transformée élément prendre littérale de l'espace dans le flux, il n'est pas sorti de l'écoulement commeposition: absolute;
fait, mais bien que la notion distincte.Si vous avez besoin d'utiliser
position: absolute;
ou votrediv
va encore prendre de l'espace à la verticale et donc vous voyez que la barre de défilement ...Poopy IE Solution Compatible
Comme vous avez dit, eh bien, oui, c'est à dire sera toujours afficher la barre de défilement que l'élément en position
absolute
existe toujours dans les mêmes dimensions, alors quelle est la séance d'entraînement ici?Tout d'abord, vous sont en train de transformer l'élément à définir dans le conteneur parent, aussi, vous n'avez pas besoin de la
overflow
donc, la première question est de savoir si vous n'avez pas besoinoverflow
que pourquoi utiliserauto
? Vous pouvez utiliserhidden
.Si pas
hidden
pour le parent, et vous êtes à la recherche de l'avant pour placer le contenu sous la transformée élément, de mieux vous envelopper la transformée élément à l'intérieur d'un autre élément avec les mêmes dimensions deoverflow: hidden;
et assurez-vous de déplacer leposition: absolute;
propriété de ce bloc. - DémoSi toujours pas heureux? Alors pourquoi
transform
ensemble de l'élément?transform
image pertinente seulement - DémoAjoutée, mais en réalité, votre approche est erronée, donc peu d'exemples de plus..
Que d'efforts O_o en Fait, c'est un article plutôt que d'une réponse...
Dans votre commentaire vous avez mentionné que mon approche est erronée. Pouvez-vous veuillez donner un peu de sens à propos de la bonne approche pour transformer l'image?
Je l'ai expliqué dans mon dernier edit, qu'au lieu de la rotation de l'élément complet, penser à faire une rotation seule image 🙂
OriginalL'auteur Mr. Alien
C'est parce qu'il est encore en utilisant la verticale des propriétés (comme hmore009 dit dans les commentaires).
Si nous prenons un coup d'oeil ici, vous pouvez voir ce que sa fait de sorte que vous savez que c'est vrai.
Exemple 1:
De sorte que votre hauteur et la largeur du conteneur sont comme suit:
Maintenant que vous avez fait la bonne chose et on les échange pour la transformer
#RotationDiv
:Cela fonctionne bien si nous devions changer le conteneur à
overflow: hidden;
cela signifie que nous ne peux pas le voir tout de hauteur supplémentaire.DÉMO
Exemple 2:
Mais je suppose que pour une raison quelconque vous ne voulez pas le faire, probablement du fait de ne pas savoir pourquoi le dépassement est dû. Donc permet de jeter un oeil de plus près à ce qui se passe.
Si on enlève la hauteur de
#RotationDiv
le débordement n'est plus là. C'est un peu filaire n'est-ce pas? Et bien non, la hauteur a été a été utilisé pour la transformation et la hauteur verticale.DÉMO
Alors, comment pouvons-nous savoir qu'il était à la hauteur de la cause?
Maintenant, si nous donnons
#RotationDiv
la même hauteur que le conteneur, nous pouvons voir qu'il n'existe aucun débordement.DÉMO
Maintenant, si nous ajoutons
1px
sur la hauteur de ce que nous obtenir le dépassement de coups de pied dans. Hmm, si la hauteur doit être la cause. Même quand nous transformons la hauteur semble encore être utilisé pour la hauteur verticale dans le conteneur.DÉMO
Comment pouvons-nous résoudre ce problème?
Bien que nous avons déjà vu une option, donner le conteneur
overflow: hidden;
ou tout simplement de l'enlever complètement. Cela va arrêter le défilement à l'intérieur du conteneur.DÉMO
Ou vous pouvez simplement obtenir un éditeur d'image (il y a quelques gratuits en ligne) et de retourner l'image, comme ça. Permettrait d'économiser beaucoup de difficulté à le faire de cette façon.
Autres alors que vous pourriez l'image seulement supprimer
#RotationDiv
et donner le conteneurbackground: red;
DÉMO
Comment j'allais le faire encore à l'aide de transformer:
Je voudrais enlever le
overflow: auto;
, supprimer les inutilesdiv
et le jeu de la transformation à laimg
.C'est à vous de décider comment vous voulez le faire, il existe de nombreuses façons. La meilleure façon, je dirais qu'il n'utilisez pas de transformer et il suffit de retourner l'image à l'aide d'un éditeur d'image (par exemple Photoshop).
DÉMO
OriginalL'auteur Ruddy
bien j'ai eu du mal provoquant le débordement trop
mon problème est que l'échelle horizontale faite horizontale débordement, donc je l'ai juste changer l'échelle horizontale à la verticale de mise à l'échelle et il a résolu le problème (ou contourné le problème tbh)
ma compréhension de ce bug, c'est que depuis il n'a pas de solution commune, donc rendez-vous autour de lui.
OriginalL'auteur FelixWang