2010-12-14 4 views
1

je dois construire un HTML/mise en page CSS avec la mise en page suivanteHTML et CSS..adding côté divs côte à côte n fois

| statique Div | Contenu DIV0 | Contenu Div1 | ... | Contenu DIVN | statique Div |

une version réduite de mon code est comme suit:

<div id="container"> 
    <div id="static_div_1"></div> 
    <div id="content"> 
     <div id="item1"></div> 
     <div id="item2"></div> 
     .... 
     <div id="itemN"></div> 
    </div> 
    <div id="static_div_2"></div> 
</div> 

Exigences:

  1. Tous les DIVs ont besoin d'être empilés à côté de l'autre .
  2. J'ai besoin d'ajouter dynamiquement des DIV dans le contenu DIV en utilisant javascript
  3. Les DIV statiques ont besoin de maintenir leur position au début et à la fin du contenu.
  4. contenu DIV doit faire défiler horizontalement

Je me bats avec les questions suivantes:

  1. Après un moment, le div contenu commence enroulant commencent à rendre la DIV et une autre rangée de DIVs inséré.

Éditer: Ce n'est pas quelque chose de tabulaire dans la nature comme des données simples. Supposons que chaque div est comme une forme en soi. Quelque chose ressemblant à un W2. J'ai juste besoin de faire défiler le contenu DIV. . Pour rendre les choses pires que je ne suis pas vraiment un gars GUI .. :(

Toute aide sera grandement appréciée

+1

Des raisons spécifiques pour lesquelles vous n'utilisez pas de tables? – AniDev

+0

Pourquoi n'attendez-vous pas ce comportement? Une fois que les divs atteignent collectivement une certaine largeur, vous allez expérimenter un emballage.Êtes-vous en train de suggérer que l'emballage arrive trop tôt ou à un moment inattendu? –

+1

Je suis d'accord avec @AniDev - Stacking Divs côte à côte est une manœuvre extrêmement compliquée et délicate. Je me suis battu moi-même pendant un certain temps il n'y a pas si longtemps et j'ai fini par abandonner. Votre exemple ressemble plus à un affichage de données, ce à quoi les tables sont traditionnellement utilisées, même dans une page basée sur CSS. – morganpdx

Répondre

3

Le code CSS dont vous avez besoin est la suivante:

#static_div_1, #static_div_2 { 
    float: left; 
    width: 200px; 
    } 
    #content { 
    float: left; 
    overflow-x: scroll; 
    white-space: nowrap; 
    width: 600px; 
    } 
    #content .item { 
    display: inline-block; 
    *display: inline; /* Target IE6/7 only */ 
    width: 150px; 
    zoom: 1; 
    } 

Remarque J'ai ajouté . une classe « élément » à chacun des éléments à l'intérieur du div #content leur style des clés de cette disposition sont les suivants:

  1. Marque « float: left » les trois parties, # static_div_1, # static_div_2 et # contenu divs (et éventuellement définir un largeur fixe pour eux).
  2. Le style "overflow-x: scroll" sur la div # content.
  3. Le "white-space: nowrap" à la div # content.
  4. Réglez "display: inline-block" sur chaque élément de la division #content.

Vous remarquerez qu'il y a un espace entre chacun des éléments. C'est l'espace de retour à la ligne, donc pour l'éviter, il ne doit pas y avoir de nouvelle ligne ou d'espace entre ces divs.

J'espère que cela vous sera utile. Cordialement.

MISE À JOUR: Cela fonctionne maintenant sur IE6/7. Pour le réglage correct de "display: inline-block" sur ces navigateurs, notez l'ajout des lignes:

... 
#content .item { 
    ... 
    *display: inline; /* Target IE6/7 only */ 
    ... 
    zoom: 1; 
    } 
+0

+1 pour l'exemple - mais cela fonctionne dans ie? Je ne suis pas sûr de savoir comment va gérer l'affichage: inline-block et overflow-x? – skajfes

+0

@skajfes J'ai ajouté un hack pour réparer "display: inline-block" sur IE6/7 (IE8 fonctionne bien sans ça). –

+0

merci Alejandro! – Perpetualcoder

Questions connexes