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 :

Div emboitées alignées


Sujet :

CSS

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Points : 23
    Points
    23
    Par défaut Div emboitées alignées
    Bonjour,

    J'ai une gestion de documents qui les hierarchise. J'essaye de les afficher en colonne de maniere dynamique.
    Mais avant d'effectuer cela, il faut que le css corresponde.

    Je m'explique:
    J'ai une div principale composée de la div parent remplie et d'une div enfant remplie. La div enfant est elle meme composée d'une div parent et d'une autre div enfant, ect ....

    J'essaye d'aligner toutes les div parent sur la meme ligne, tout en acceptant l' overflow (pour avoir qque chose de dynamique par la suite et avoir une scrollbar s'il y a trop de colonnes)

    # display.html.erb
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <div id="finder-trunk">
    <div id="finderparent">
      <ul id="finder-header">
        <li><a>parents 1</a></li>
      </ul>
      <ul id="finder">
      <% @process_numbers.each do |pn| %>
        <li>
          <a><%= pn.id %>-<%=  pn.number%></a>
        </li>
      <% end %>
      </ul>
     
    </div>
     
    <div id="children-<%= @node %>" class="close">
     
    <div id="finder-children">
    <ul id="finder-header">
      <li>
        <a>branch 1</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
      <% @children.each do |c| %>
        <li>
          <a><%=  c.document_name %></a>
        </li>
      <% end %>
     </ul>
    </div>
    <div id="children-<%= @node %>" class="open">
    <div id="finder-children">
    <ul id="finder-header">
      <li>
        <a>branch 2</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
      <% @children.each do |c| %>
        <li>
          <a><%=  c.document_name %></a>
        </li>
      <% end %>
     </ul>
    </div>
     
    <div id="children-<%= @node %>" class="open">
    <div id="finder-children">
    <ul id="finder-header">
      <li>
        <a>branch 3</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
      <% @children.each do |c| %>
        <li>
          <a><%=  c.document_name %></a>
        </li>
      <% end %>
     </ul>
    </div>
    <div id="children-<%= @node %>" class="close"><br/></div>
     
    </div>
     
    </div>
     
    </div>
     
     
    </div>
    Voici le code css qui marche pour la premiere branche, mais pas pour le reste:

    # CSS
    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
     
     div#finder-trunk {
        overflow: auto;
        height: 450px;
    }
     
     
     
     div#finder-trunk div#finderparent {
        width: 400px;
        height: 450px;
        display: inline;
        float: left;
    }
     
     div#finder-trunk div.open {
        width: auto;
        height: 451px;
        display: inline;
        float: left;
    }
     
    div#finder-trunk div#finder-children {
        width: 400px;
        height: 450px;
        display: inline;
        float: left;
     
    }

    Comme dit precedemment, les autres div ne s'alignent pas et vont a la ligne.
    Elles sont sencées toutes avoir la meme hauteur, et la meme largeur(sauf les div.open car leur largeur est dynamique). C'est un peu plus compliqué qu'avec de simples div. Auriez vous une idée ?

  2. #2
    Rédacteur

    Homme Profil pro
    Responsable de projet
    Inscrit en
    Mai 2009
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 634
    Points : 3 511
    Points
    3 511
    Par défaut
    Pourrais tu mettre le code HTML généré, ce serait plus simple pour voir les différentes class.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    J'ai transformé le code HTML en fonction de nouvelles fonctions javascript. Mais j'ai toujours le meme probleme en un peu moins compliqué.
    (les div ne sont plus imbriquées)
    En gros je veux afficher dans une div ayant un overflow d'autres div de maniere inline pour n'avoir de scrollbar que sur le coté et non en bas.

    Voila le nouveau css:

    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
     
     div#finder-trunk {
        max-height: 450px;
        overflow: auto;
        white-space: nowrap;
    }
     
     div#finder-trunk div {
         display: inline;
         height: 449px;
         width: 400px;
         float: left;
         overflow: auto;
     }
     
     div#finder-trunk div#with_icon {
         height: 32px;
         overflow: hidden;
    }
     
     div#finder-trunk div ul {
     
    }
     
     
     
    div#finder-trunk ul {
        margin: 10px 0px;
        list-style: none;
        min-width: 200px;
        display: table;
    }
    Et voila le code HTML simplifié:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <fieldset>
    <div id="finder-trunk">
    <div id="finderparent">
      <ul id="finder-header">
        <li>
          <a>1st Colonne</a>
        </li>
     
      </ul>
      <ul id="finder">
        <li>
          <a>1st content</a>
        </li>
      </ul>
     
    </div>
     
    <div id="children-1" class="finderparent">
    <ul id="finder-header">
      <li>
        <a>branch 1</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
        <li>
          <a>blah 1</a>
        </li>
     </ul>
    </div>
     
    <div id="children-2" class="children-1">
    <ul id="finder-header">
      <li>
        <a>branch 2</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
      <% @children.each do |c| %>
        <li>
          <a>blah 2</a>
        </li>
     </ul>
    </div>
     
    <div id="children-3" class="children-2">
    <ul id="finder-header">
      <li>
        <a>branch 3</a>
      </li>
    </ul>
     
    <ul id="finder" class="documents">
        <li>
          <a> blah 3</a>
        </li>
     </ul>
    </div>
    </div>
     
    </fieldset>
    Comme avant, la div finderparent est bien positionnée, ainsi que la premiere div children, mais pas les autres qui vont vers le bas.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 983
    Points : 44 166
    Points
    44 166
    Par défaut
    - une DIV prend par défaut 100% de la largeur de son conteneur
    - pour qu'une DIV s'étire il ne faut pas lui spécifier de largeur
    attendu de cela ton problème ne semble irrésolvable en pur CSS.

    Il va te falloir un petite pincée de javascript pour réajuster tout cela en dynamique.

  5. #5
    Rédacteur

    Homme Profil pro
    Responsable de projet
    Inscrit en
    Mai 2009
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 634
    Points : 3 511
    Points
    3 511
    Par défaut
    si tu met une largeur spécifique à #finder-trunk tu verras qu'il y a bien une scrollbar sur la droite.
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    div#finder-trunk {
        max-height: 450px;
        overflow: auto;
        white-space: nowrap;
        width:900px;
    }

    Autre chose, dans une page HTML les ID sont uniques, tu ne dois pas les utiliser plusieurs fois dans une même page, il faut qu'ils aient un nom unique (tu utilises plusieurs fois id="finder-header" ou id="finder", c'est interdit).
    Les class sont là pour ça.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 983
    Points : 44 166
    Points
    44 166
    Par défaut
    Citation Envoyé par ornitho13 Voir le message
    si tu met une largeur spécifique à #finder-trunk tu verras qu'il y a bien une scrollbar sur la droite.
    salut ornitho13, je pense que c'est la scroll horizontale seule qui l'intéresse, et ce au vu du CSS, mais je m'avance peut être...

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    C'est bien cela, seule la barre horizontale m'interesse. Je veux un déroulement de mes données. PLeins de div contenues de mainere lineaire dans une grosse div.
    Je vais tenter de changer la taille avec du javascript donc.

  8. #8
    Rédacteur

    Homme Profil pro
    Responsable de projet
    Inscrit en
    Mai 2009
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 634
    Points : 3 511
    Points
    3 511
    Par défaut
    Autant pour moi j'avais mal compris.
    Comme le dit NoSmoking, tu vas devoir passer par un peu de javascript.

    Voici un exemple simple (avec jquery) :
    Code html : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <style type="text/css">
    .fieldset{
                    overflow:hidden;
                    overflow-x:scroll;
                    width:900px;
    }
    .fieldset .finderparent{
            float:left;
            width:300px;
    }
    </style>
    <script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    <script type="text/javascript">
    $(function(){
            $('#wrapper').width($('#wrapper div:first').width() * $('#wrapper div').length);
            
    });
    </script>
    </head>
    <body>
    	<fieldset class="fieldset">
    		<div id="wrapper">
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    			<div class="finderparent">
    				<ul class="finder-header">
    					<li>
    						<a>1st Colonne</a>
    					</li>
    				</ul>
    				<ul class="finder">
    				  <li>
    				    <a>1st content</a>
    				  </li>
    				</ul>
    			</div>
    		</div>
    	</fieldset>
    </body>
    </html>

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 983
    Points : 44 166
    Points
    44 166
    Par défaut
    Citation Envoyé par ornitho13
    Autant pour moi j'avais mal compris.
    j'ai eu également quelques difficultés.

    J'en profites pour te mettre un exemple simple (sans jquery), tu auras le choix :
    Code html : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Ajustement DIV</title>
    <style type="text/css">
    html, body {
      font-family : Verdana, Arial
    }
    #global{
      position : relative;
      height: 400px;
      width : 800px;
      border : 1px solid #808080;
      overflow : auto;
      overflow-y : hidden;
    }
    #conteneur {
      height : 382px;
    }
    #conteneur div {
      width: 400px;
      height : 100%;
      float: left;
    }
    </style>
    </head>
    <body>
    <div id="global">
      <div id="conteneur">
        <div>
          <ul>
            <li><a>1st Colonne</a></li>
          </ul>
          <ul>
            <li><a>1st content</a></li>
          </ul>
        </div>
        <div>
          <ul>
            <li><a>branch 1</a></li>
          </ul>
          <ul>
            <li><a>blah 1</a></li>
          </ul>
        </div>
        <div>
          <ul>
            <li><a>branch 2</a></li>
          </ul>
          <ul>
            <li><a>blah 2</a></li>
          </ul>
        </div>
        <div>
          <ul>
            <li><a>branch 3</a></li>
          </ul>
          <ul>
            <li><a>blah 3</a></li>
          </ul>
        </div>
      </div>
    </div>
    <script type="text/javascript">
    var Larg, Haut, Nbr, oParent = document.getElementById('conteneur');
    if( oParent){
      var oEnfant = oParent.getElementsByTagName('div');
      if(oEnfant){
        Haut = oParent.clientHeight;
        Larg = oEnfant[0].offsetWidth;
        Nbr = oEnfant.length;
        oParent.style.width = Larg *Nbr +"px";
        for( var i = 0; i < Nbr; i++){
          oEnfant[i].style.height = Haut +"px";
        }
      }
    }
    </script>
    </body>
    </html>

  10. #10
    Membre actif Avatar de Damouille
    Inscrit en
    Avril 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 268
    Points : 289
    Points
    289
    Par défaut
    http://asiamotion.net/index.php?opti...g2_itemId=1731

    Comme ca? Mais j'ai malheureusement utilise un tableau.
    IConsulting - web consultants Cambodia

Discussions similaires

  1. Div center align
    Par Jonathan.djeff dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/08/2011, 11h01
  2. div float alignement IE<>Firefox
    Par djboy dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/05/2010, 10h19
  3. [DIV] vertical align
    Par crakocrako dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/07/2006, 14h47
  4. [DIV][CSS] Alignement vertical
    Par pmartin8 dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 02/11/2005, 14h50
  5. [CSS]Aligner les div suivant la résolutation d'écran
    Par nebule dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/09/2005, 11h00

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