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 :

[CSS]width:100% avecmargin/padding/border ?


Sujet :

CSS

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut [CSS]width:100% avecmargin/padding/border ?
    Bonjour,
    Je suis en difficulté pour donner le style que je désire a mes pages en css :
    Supposons que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="premier_div">
      <div id="second_div">
         blabla
      </div>
    </div>
    Voila mon premier_div a une largeur variable, et j'aimerai que mon second_div prenne toute la largeur de premier_div sans la dépasser.

    Jusque la c'est bon, il suffit d'un width:100%;

    Mais si je veux que dans second_div j'ai une margin-right:5px par exemple, ben mon second_div va dépasser de 5px par rapport a mon premier_div, car ils sont comptés en PLUS des 100%
    Ceci n'est pas vrai apparemment dans IE, qui comprend les margin/border/padding comme faisant partie du width.

    Mais comment je dois faire sans trop magouiller pour obtenir un width:100% INCLUANT un border/padding/margin sous firefox et autres navigateurs respectant bien le css ?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    essaie width:auto;

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    width:auto; ne me semble pas marcher : ca a l'air d'etre la valeur par défaut, c'est à dire que le width s'ajuste a la valeur minimum qui permet d'afficher sans contrainte l'élément.

    Idées ?

    ps: Merci de ta réponse francis

  4. #4
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    Hum... ça ne conviendrait pas ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #premier_div {
    margin: 0px 5px 0px 0px;
    padding: 0px;
    }
     
    #second_div {
    margin: 0;
    padding: 0;
    }
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Non je n'aurai pas du prendre margin comme exemple, plutot mettons padding, ou on aura pas le meme résultat en le mettant dans premier_div et second_div.
    Car ceci est un exemple je cherche une réponse générale qui permet de résoudre le probleme sans toucher a premier_div, juste en changeant le style de second_div pour pouvoir l'ajuster à la taille du premier_div

  6. #6
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    SI j'ai bien compris. Tu veux que premier_div fasse toute la largeur d'écran et deuxieme_div fasse toute la largeur de premier_div moins 5px à droite.
    Si c'est ça mon code fonctionne. Si c'est pas ça... bah j'ai pas compris et faudrait me réexpliquer.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Ce n'est pas vraiment que tu ais mal compris, disons que la c'était surtout un exemple, j'ai pris la sitution la plus simple a expliquer, mais mon premier_div ne fait pas forcément la largeur de l'écran il peut faire n'importe quelle taille (pour l'exemple je l'ai fixé a l'écran), et je ne veux pas impérativement avoir 5px a droite c'est aussi un exemple pour dire que je veux pouvoir insérer des padding/margin/border tout en gardant au total 100% du width de premier_div.

    Je n'ai pas essayé ton code mais a vue de nez ca me parait bizarre, je m'explique : le margin sur le premier_div n'influera pas sur les éléments imbriqués dans second_div, mais plutot sur les éléments qui sont placés a coté, je pense que margin-right:5px sur le premier_div a pour effet de laisser un espace de 5px entre le premier_div et l'élément qui suivra (donc pas le second_div vu que lui est inclus). Corrige moi si je me trompe. Et si je met un padding-right a la place, le fait est que mon second_div prendra toute la largeur MOINS 5px comme tu dis, hors je recherche plutot le moyen qu'il prenne 100%de la largeur, et que le padding se situe a l'interieur du second_div de préférence.

    Mais a propos de ton style du second_div, le fait de mettre margin:0 et padding:0 étire t il le div au dimension de l'élément parent ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    En fait concretement j'aimerai ensuite mettre un background-color dans le second_div qui prenne la totalité de la largeur de premier_div (c'est pourquoi entre autre je ne veux pas mettre de padding sur le premier_div lui meme), mais en ayant le texte de second_div séparé des bords de 5px, donc un padding:5px.
    J'espere qu'en illustrant vous y voyez plus clair et qu'on pourra plus précisemment m'aider

  9. #9
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Bon déjà à la base je me suis trompé j'ai inversé par rapport à mon test!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #div1 {
    	margin: 0;
    	padding: 0; 
    	border: 1px solid red;
    }
    #div2 {
    	margin: 0px 5px 0px 0px;
    	padding: 0; 
    	border: 1px solid green;
    }
    Oui le fait de ne pas mettre de taille, de définir le marges intérieures (padding) et extérieures (margin) à 0 font que div1 fera toute la largeur de ton écran et que le contenu de div1 collera la bordure.
    Ensuite on définit la marge extérieure droite à 5px et tout le reste à 0 fera que ton contenu collera les bordure de div2 et sera écarté de 5px vers l'intérieur par rapport à div1.
    Je pense que ça répond à ta question mais j'ai du mal à lire tes descriptions donc pas sûr.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Ah oui déja c'est plus pareil ^^. A part le fait que c'est plutot a padding que je mettrais les 5px et non pas a margin.
    Sinon c'ets vrai que ca a l'air de fonctionner.

    En fait si je ne m'en suis pas apercu c'est car mon vrai probleme semble venir de IE qui gere les hover un peu trop a son gout, déja qu'il ne reconnait que les hover sur les a:hover.
    En fait j'ai voulu étirer un 'a' (donc une balise lien) a un div, pour que le hover fonctionne sur tout le div et non pas que sur le texte du A. Donc le A s'étire bien (vérifiable avec une bordure ou background) mais le hover ne s'active que sur le texte a moins que je ne précise expresséemnt width 100%, auquel cas ca me fait dépaser sous firefox et autre si je précise un padding

  11. #11
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Il faut passer le lien en block, <a> est à la base un élément in-line. puis comme tout block il faut redéfinir les marges.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a {
    display: block;
    margin: 0;
    paddin: 0;
    background-color: white;
    }
    a:hover {
    background-color: red;
    }
    La prochaine fois, expose ton problème directement
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Oui j'ai oublié de préciser, mais c'est ce que je fais je met un display:block dans le a, mais j'ai toujours le probleme que je dis, uniquement sur IE.
    Désolé de ne pas exposer le probleme directement, c'est pour faciliter la reflexion et la compréhension que je simplifie, et également pour avoir une réponse générale au possible (pas qui marcherait juste pour le probleme présent) :p

    Comme je dis le <a> semble bien s'étirer, ce que je peux vérifier avec un border ou un background-color, mais le hover lui ne s'applique qu'au texte lui meme. Je vais d'ailleurs copier mon code pour bien se rendre compte (c'est surtout la fin qui importe) :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #menu { /* le menu */
    	margin:0;
    	padding:0;
    	border:0;
    	width: 100%;
    	display:block;
    	height:22px;
    	list-style-type:none;
    	font-size:110%;
    	font-weight:bold;
    	position:relative;
    	z-index:100;
    }
     
    #menu li { /* les items du menu */
    /* Le width des items est calculé dans entete.php lors de la création du menu par rapport aux nombre d'items du menu */
    	display:block;
    	float:left;
    	margin:0;
    	padding:0;
    	border:0;
    }
     
    #menu li a { /* les liens des items du menu*/
    	display: block;
    	margin:0;
    	padding:4px;
    	text-align:center;
    	text-decoration:none;
    	color:black;
    	border: 1px solid red;
    /*	background-color:yellow;*/
    }
     
    #menu li a:hover {  /* le survol des liens et des items du menu */
    	background-color:#D4DDF3;
    }
    Voici mon css associé a un menu de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul id="menu">
      <li><a href="">Mon menu</a></li>
      ...
    </ul>
    Avec ca le résultat que j'ai actuellement est donc un menu d'un seul élément (<li>) ici, qui prend la totalité de la largeur. Le <a> prend la totalité de la largeur du <li> a en juger par la bordure rouge et la couleur jaune si on retire les commentaires. Le texte/lien "Mon menu" est centré par rapport au <li>.
    Cependant sur IE, le hover ne s'active que au passage du curseur sur le texte "mon menu" et non pas sur tout le <LI>, et le background-color du hover ne s'applique que au texte.

    Par contre sur firefox ca marche impec

  13. #13
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Je bloque et j'ai pas le temps immédiatement... c'est étrange car j'ai fait exactement la même chose il y a quelques jours, j'ai reporté ce que j'ai fait sur ton simple exemple (#menu et #déconnexion) et ça ne fonctionne pas. Je n'arrive pas à voir ce que j'ai fait pour que ça fonctionne .

    Pour t'aider mon menu http://bb.public.free.fr/css/
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 638
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    tout est une question de dimensions hors tout et de différence d'interprétation des bordures et marges ...
    le lien est un article qui explique le problème et propose des "hacks"
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Ahhh merci bien pour vos 2 liens, je vais avoir de quoi faire
    Déja j'ai trouvé une solution de premier temps, de mettre ma margin en % comme ca je met par exemple 3% de margin left et 97% de width, et on retombe sur nos pattes, mais je vais étudier de plus pres pour voir ce qu'il y a savoir sur la (les) chose

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

Discussions similaires

  1. Comment remplacer la balise img src width à 100% en CSS?
    Par kunpen dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 30/01/2009, 17h23
  2. [CSS] width-height
    Par Anduriel dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 11/03/2006, 14h34
  3. [css] positionnement d'images width 100%
    Par testicool dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 02/02/2006, 23h18
  4. Problème de compatibilité pour [style="width:100%;] sur
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 17h19
  5. [HTML][CSS] Attribut BorderColor et style Border-Color
    Par David.V dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/07/2005, 09h54

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