2009-07-23 8 views
1

hey les gars, comment puis-je simplement réaliser cette mise en page simple? J'espère que la réponse m'aidera à comprendre les bases de la mise en page CSS et des flotteurs.Mise en page CSS simple - comment puis-je réaliser cette mise en page et la faire évoluer facilement?

<div id="verticalElement1"> 
     <div id="horizontalElement1"> 
      some content 
     </div> 
     <div id="horizontalElement2"> 
      some content 
     </div> 
    <div> 
    <div id="verticalElement2"> 
     <div id="verticalElement3"> 
      some content 
     </div> 
     <div id="verticalElement4"> 
      some content 
     </div> 
    <div> 

Ok, donc, comme le s « id » suggèrent, je voudrais les éléments verticaux pour asseoir un sur haut de l'autre.

À l'intérieur de l'élément supérieur, j'aimerais que les 2 éléments horizontaux se trouvent suivant l'un à l'autre.

Je veux atteindre ce sans en appliquant "inline" à tous les éléments.

De plus, je ne veux pas utiliser le positionnement absolu, à moins qu'il ne s'agisse d'un élément relatif, et qu'il évolue bien.

Je voudrais réaliser tout cela avec des feuilles de style CSS très propres et évolutives, de manière à pouvoir ajouter et supprimer des éléments, sans avoir à modifier les valeurs de style. Tout doit être fait en appliquant simplement les classes appropriées à certains éléments, quelque chose comme ceci:

<div id="verticalElement1" class="containsHorizontalElements"> 
     <div id="horizontalElement1" class="isHorizontal"> 
      some content 
     </div> 
     <div id="horizontalElement2" class="isHorizontal"> 
      some content 
     </div> 
    <div> 
    <div id="verticalElement2"> 
     <div id="verticalElement3"> 
      some content 
     </div> 
     <div id="verticalElement4"> 
      some content 
     </div> 
    <div> 

J'ai essayé d'appliquer des flotteurs, mais tout devient fou .... aide!

acclamations

Répondre

1

Vos conteneurs verticaux doivent simplement être affichés en tant que blocs, ce qui correspond par défaut aux tags div. Leurs contenus internes peuvent être flottants à gauche ou à gauche et à droite. Vous pouvez également définir des largeurs sur vos éléments horizontaux pour vous assurer qu'ils se retrouvent sur la même ligne.

votre code html peut ressembler à ceci:

<div id="container1" class="container"> 
    <div class="inner-element"></div> 
    <div class="inner-element"></div> 
</div> 
<div id="container2" class="container"> 
    <div class="inner-element"></div> 
    <div class="inner-element"></div> 
</div> 

css peut ressembler à ceci:

.inner-element { 
    float: left; 
    width: 100px; 
} 

aussi, vous devez vous rappeler pour effacer tous vos conteneurs qui contiennent des flotteurs:

.container {min-height: 10px;} 

.container:after { 
content: "."; 
display: block; 
height: 0; 
clear: both; 
visibility: hidden; 
} 

bien sûr, vous voudriez nommer vos divs quelque chose de plus sémantiquement correct, comme "contenu" ou "wrapper" ou quelque chose comme ça qui décrit réellement leur but plutôt que comment ils sont censés regarder sur la page, à savoir nom quelque chose "content" au lieu de "left-column"

+0

hmm, merci jason, je vais essayer ça maintenant. Je pense que le lien manquant pour moi était clair, et la largeur aussi ... quel est le but de cela, quoi ": après"? à votre santé! – andy

+1

le tout: après la partie est ce qui va effacer les flotteurs pour vous dans Firefox (et IE8 aussi, je pense). C'est une pseudo-classe qui crée du contenu pour vous "dynamiquement" après le conteneur dans lequel vous l'avez défini, puis le cache, mais le définit pour effacer les deux.Débarrasser vos flotteurs est juste un moyen de faire envelopper complètement vos contenants. – Jason

+0

hmm, merci Jason.Excuse mon ignorance, mais par rapport au pesudoclass .... ces normes sont-elles conformes aux normes..I.e, vont-elles fonctionner sur tous les principaux navigateurs, safari, opéra, ff2 +, chrome, ie7 +? – andy

0

Pour les éléments horizontaux, vous voulez float: left; eux, et ils vont empiler les uns contre les autres.

Les éléments Vertical peuvent se chevaucher l'un l'autre simplement en déclarant display: block, ou width: 100%. Cela assurera qu'ils occupent tout l'espace horizontal, les faisant empiler les uns sur les autres.