IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Garder même position absolute d'un div après transformation rotate et scale


Sujet :

Positionnement en CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut Garder même position absolute d'un div après transformation rotate et scale
    Bonjour à tous,

    Après moultes recherches, je n'arrive pas à trouver de solution simple à mon problème. Je génère des pages html contenant des DIV rectangulaires dont la position est absolute sur ma page. Je dois effectuer ensuite des transformations différentes sur chaque div : rotation et scale, mais j'aimerais que mes div gardent la même position absolute qu'avant transformation.
    En jouant sur le centre de rotation avec transform-origin je n'arrive pas à obtenir ce que je souhaite car les rotations n'ont jamais la même valeur (90, 180, 270 deg).

    Voici un exemple de div :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id='divTest' style='display:block;position:absolute;border: solid 1 px;left: 97px;top: 858px;transform: scale(0.5) rotate(270deg);transform-origin: 50% 50%;-ms-transform: scale(0.5) rotate(270deg);-ms-transform-origin: 50% 50%;-webkit-transform: scale(0.5) rotate(270deg);-webkit-transform-origin: 50% 50%;'></div>

    Voici ce que j'aimerais faire :
    Le div initial en rouge est le div ci-dessus. Le div en bleu est ce que j'obtiens et le div vert est ce que j'aimerais obtenir.

    Nom : rotate_pb.png
Affichages : 2562
Taille : 9,3 Ko

    Auriez vous une solution à mon problème ?

    Merci beaucoup d'avance

  2. #2
    Membre chevronné
    Profil pro
    Chef Gérant
    Inscrit en
    Octobre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef Gérant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2005
    Messages : 230
    Par défaut
    as tu essayer, logiquement, transform-origin:top left; ou transform-origin: 0 0 ; ?

    Sinon,par exemple : top right + positionement relatif avec decalage : http://codepen.io/anon/pen/qcADf

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Merci pour ta réponse. Le problème avec transform-origin top left (équivalent à 0 0) c'est que le centre de rotation se retrouve en haut à gauche donc ma div ne se retrouve pas du tout à la même distance left et top qu'initialement.

    Le positonnement relatif avec décalage semble ne pas marcher, car par exemple si je fais une rotation de 90deg, il faut faire margin-left:[height de la div]px et si je fais une rotation de 270deg par exemple, c'est margin-top:[width de la div] qu'il faut faire ...

    Je suis ouvert aux solutions en javascript

  4. #4
    Membre chevronné
    Profil pro
    Chef Gérant
    Inscrit en
    Octobre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef Gérant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2005
    Messages : 230
    Par défaut
    Il ya la solution de donner une class a chaque degrés de rotation utilisé , de façon a maitriser totalement coordonnées d'origine et eventuellement le repositionement visuel en relatif, plutôt que d'inserer les degres de rotation dans le code.

    Maintenant, si il y a 360 class a sortir, pas sur que ce soit la solution

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Il n'y a que 4 rotations (3 en fait) : 0(360) 90 180 270 degrés
    par contre chaque div a une position différente ... Comment faire ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    une solution avec transform origin = top left (0;0)

    si rotate(0deg) :
    margin-left:0px
    margin-top:0px

    si rotate(90deg) :
    margin-left: 0px
    margin-top: [Width]px

    si rotate(180deg) :
    margin-left: [Width]px
    margin-top: [Height]px

    si rotate(270deg) :
    margin-left: [Height]px
    margin-top: 0px

    On peut généraliser avec un peu de trigonométrie :
    0 <= deg <= 90° :
    margin-left: 0px
    margin-top: sin(deg)x[width]px

    90 <= deg <= 180° :
    margin-left: -cos(deg)x[width]px
    margin-top: -cos(deg)x[height]+sin(deg)x[width]px

    180 <= deg <= 270° :
    margin-left: -cos(deg)x[width]-sin(deg)x[height]px
    margin-top: -cos(deg)x[height]px

    270 <= deg <= 360° :
    margin-left: -sin(deg)x[height]px
    margin-top: 0px

    schéma : Nom : rotations.png
Affichages : 2422
Taille : 57,6 Ko

    formule générique (fonctionne entre 0 et 360°) :
    margin-left: Max(-cos(deg)x[width];0) - Max(sin(deg)x[height];0) px
    margin-top: Max(-cos(deg)x[height];0) + Max(sin(deg)x[width];0) px

    Il n'existe rien de plus simple ?
    Je pense que je vais utiliser du javascript pour repositionner mes div après transformation, cependant j'ai cru comprendre que selon les navigateurs, les comportements ne sont jamais les mêmes ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Position d'un div après une rotation
    Par icl1c dans le forum jQuery
    Réponses: 3
    Dernier message: 23/03/2011, 23h47
  2. position absolute d''un div, bug IE6
    Par ginkgomedia dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/03/2009, 19h14
  3. position:absolute dans un div
    Par MayOL69bg dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 28/03/2007, 16h10
  4. Div : position: absolute, relative ou static ?
    Par philippef dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 16/01/2007, 12h59
  5. [CSS] Redimensionnement de div en position absolute
    Par Fluckysan dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 25/09/2006, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo