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 :

Taille et positionnement d'un div dans un div à taille variable


Sujet :

Positionnement en CSS

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut Taille et positionnement d'un div dans un div à taille variable
    Bonjour à tous,

    Oui je sais le titre....


    Voici mon problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class='tab'>
      <div class='tab_top'></div>
    </div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    .tab{
    position: relative;
    width: 300px;
    height: 300px;
    }
    
    .tab_top{
    position: absolute;
    
    top: 0px;
    left: 10px;
    height: 10px;
    width: 280px;
    
    background: orange;
    }

    Voila ce que je voudrais :

    J'aimerais que le div tab_top soit position au top de tab en laissant 10px à gauche et à droite.

    Normalement tel que c'est marqué là, ça fonctionne mais mon problème est que la taille de tab peut varier et donc entrer le width:280px en dure risque de ne plus fonctionner.

    J'aurais voulu savoir comment traduire en css la réquête suivant

    width:100%-20px

    Je voudrais que la taille soit de 100% - 2*10px. Comment traduire cela en css ?

    Je pourrais passer par javascript mais je préfère une solution css invariable. Vous l'aurez peut être compris, c'est pour définir des borders à une boite et j'utilise la méthode des div en absolute.


    Merci,


    Vodnok,

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    A priori je dirais impossible en css, du moins, pas si on veut être compatible avec tous les navigateurs, ou alors pas à ma connaissance ( mais si c'est possible rassures-toi, mes deux correcteurs perso, Candy et Erwan31 , viendront me rectifier ^^ )

    Il y a bien "expression()" mais ça appelle du JS, donc ça revient au même, et c'est MSIE7 only il me semble.
    Il y a bien "max-width" mais IE ne le reconnait pas ( IE7 ? )

    Donc t'es obligé de passer par JS pour connaitre la taille navigateur et faire le calcul...

    Sinon tu peux opter pour une solution de ce type, qui combine tout via des commentaires conditionnels :
    Voir les posts de Janvier 2007 en bas de page
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Merci de la réponse. Je vais passer en JS alors. D'un autre côté la solution permet d'alleger le code.

    Ca....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class='tab'>
    </div>
    <script>addBorders(params);</script>

    Au lieu de ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div class='tab'>
    <div class='tabT'></div>
    <div class='tabTR'></div>
    <div class='tabR'></div>
    <div class='tabBR'></div>
    <div class='tabB'></div>
    <div class='tabBL'></div>
    <div class='tabL'></div>
    <div class='tabTL'></div>
    </div>

    Le JS est cependant ennyuant dans le cas du resize dynamique en drag&drop mais ça me semble pas impossible.

    J'avais lu un article avec les différentes solutions et aucune n'étaient parfaites.

    Si quelqu'un a une autre idée pour le problème...

  4. #4
    Membre émérite
    Avatar de Candygirl
    Femme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 912
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Points : 2 907
    Points
    2 907
    Par défaut
    Citation Envoyé par vodnok Voir le message
    Vous l'aurez peut être compris, c'est pour définir des borders à une boite et j'utilise la méthode des div en absolute.
    ? pourrais tu montrer une image de ce que tu cherches à obtenir ?

    Sans positionnement absolu tu n'as qu'à donner un margin-right et left de 10px et ton élément occupera automatiquement le reste de l'espace à disposition.
    Les bons réflexes:
    • avant de poser une question:
      règles | faq | tutoriels | recherche
    • clarté, politesse, vocabulaire et orthographe soignés = efficacité
    • remercier ceux qui ont pris le temps d'aider et si c'est le cas

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Sans positionnement absolu, cela devient barbar car je dois alors avoir un div en plus contenu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div class='tab'>
    <div class='tabT'></div>
    <div class='tabTR'></div>
    <div class='tabR'></div>
    <div class='tabBR'></div>
    <div class='tabB'></div>
    <div class='tabBL'></div>
    <div class='tabL'></div>
    <div class='tabTL'></div>
    <div class='content'></div>
    </div>
    Et ce n'est plus transparent et la cision contenu apparence n'est plus assez clair. De plus et ça je ne l'avais pas dit, je crois, c'est que certaines boites auront plusieurs modes d'affichage.

    Je suis occupé à faire ce que j'appel un 'styleBox'. Pour faire simple, un visiteur peut définir un style de boite et l'appliquer aux div sur le site le permettant. Sachant que les différentes boites peuvent avoir des tailles différentes, je ne peux connaitre à l'avance la taille que doit avoir certains éléments. StyleBox génère donc des classes Css sur base des paramètres entré par l'utilisateur lors de la définition de son styleBox

    Il y a pour le moment 2 modes : un mode basique avec des border et un mode image.

    Dans le mode 1 : c'est assez simple. Mais dans le mode 2 j'ai 8 div à rajouter avec pour chacun une propriété css.

    Donc je dois mettre absolument le contenu dans le div principale sinon par la suite ça risque d'être compliqué pour accéder à la div en Ajax vu qu'alors soir ce sera $(tab).innerHTML ou $(#tab #content).innerHTML. Je pourrais dire que quelque soit le mode d'affichage, le contenu d'une boite se trouve dans content mais je préfère sans.

    J'ai tout de même testé sans les absolus et cela ne me satisfait pas. Je viens de trouver une solution sur base d'un petit code Js.

    Comme expliqué dans mon premier post, j'ai un problème avec le width (pour T et B) et avec le height (pour L et R). J'ai donc retiré ces propriétés aux classes respectives et ensuite via une fonction js, je fixe le taille désirée en fonction de la taille d'une boite - la taille des élements dans les coins.


    Pour le moment donc, pour chaque boite, je dois mettre 8 div, les class Css associées et 4 appel d'une même fonction js en mode width ou height. Je vais modifier cependant la chose pour faire en sorte que les 8 div soit générer par du js et via un seul appel de fonction. Cela me permettra de n'envoyer au client qu'un seul div + css + un appel de fonction avec probablement un json contenant les paramètres.


    Merci pour les conseils

Discussions similaires

  1. Positionner un tableau à droite dans un div ?
    Par tintin72 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 22/03/2008, 17h19
  2. Problème de positionnement de balise object dans un DIV
    Par C moa dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 25/11/2007, 11h28
  3. Positionnement de div dans une div "conteneur"
    Par Giill dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/11/2007, 16h54
  4. Positionnement de deux div dans une div
    Par Olivier Regnier dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 30/08/2007, 15h52

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