J'ai un récipient de largeur fluide DIV.
Dans ce que j'ai 4 DIVs tous 300px x 250px ...
<div id="container">
<div class="box1"> </div>
<div class="box2"> </div>
<div class="box3"> </div>
<div class="box4"> </div>
</div>
Ce que je veux, c'est que la boîte 1 flotte à gauche, la boîte 4 à droite et les boîtes 2 et 3 à intervalles réguliers entre elles. Je veux que l'espacement soit également fluide afin que le navigateur soit plus petit, l'espace devient également plus petit.
html
css
fluid-layout
Lee Price
la source
la source
display:inline-block;
au lieu de flotter?inline-block
en charge que lesinline
élémentsRéponses:
Voir: http://jsfiddle.net/thirtydot/EDp8R/
text-align: justify
combiné avec.stretch
est ce qui gère le positionnement.display:inline-block; *display:inline; zoom:1
correctifsinline-block
pour IE6 / 7, voir ici .font-size: 0; line-height: 0
corrige un problème mineur dans IE6.L'extra
span
(.stretch
) peut être remplacé par:after
.Cela fonctionne toujours dans tous les mêmes navigateurs que la solution ci-dessus.
:after
ne fonctionne pas dans IE6 / 7, mais ils utilisentdistribute-all-lines
quand même, donc peu importe.Voir: http://jsfiddle.net/thirtydot/EDp8R/3/
Il y a un inconvénient mineur
:after
: pour que la dernière ligne fonctionne parfaitement dans Safari, vous devez faire attention aux espaces dans le HTML.Plus précisément, cela ne fonctionne pas:
Et cela:
Vous pouvez l'utiliser pour n'importe quel nombre arbitraire d'enfants
div
sans ajouter deboxN
classe à chacun en modifiantà
Ceci sélectionne n'importe quel div qui est le premier enfant du
#container
div, et aucun autre en dessous. Pour généraliser les couleurs d'arrière-plan, vous pouvez utiliser le sélecteur d'ordre n CSS3 , bien qu'il ne soit pris en charge que dans IE9 + et d'autres navigateurs modernes:devient:
Voir ici pour un exemple jsfiddle.
la source
<div/><div/><div/>
il ne fonctionne pas. Vous devez avoir<div/> <div/> <div/>
.justify
pour un tel cas, mais merci de fournir une solution de travail. m'a sauvé beaucoup d'expériences (malgré le débogage de 3h: D). De plus, je pourrais ajouter une note que si vous voulez que votre dernière ligne soit alignée à gauche, vous devez ajouter des boîtes invisibles supplémentaires (pour compléter la ligne).stretch
/:after
est nécessaire car (généralement) avec un texte justifié, la dernière ligne n'est pas justifiée . Ici, nous voulons que la dernière ligne soit justifiée, d'où la nécessité:after
. Quant à votre deuxième question, je l'ai exploré il y a quelque temps dans une réponse précédente . Dans cette réponse, JavaScript était requis. Si vous devez prendre en charge des navigateurs plus anciens (IE8), je pense que vous avez besoin de JavaScript.La façon la plus simple de le faire maintenant est d'utiliser une flexbox:
http://css-tricks.com/snippets/css/a-guide-to-flexbox/
Le CSS est alors simplement:
démo: http://jsfiddle.net/QPrk3/
Cependant , ceci n'est actuellement pris en charge que par des navigateurs relativement récents ( http://caniuse.com/flexbox ). De plus, les spécifications de la mise en page de la flexbox ont changé plusieurs fois, il est donc possible de couvrir plus de navigateurs en incluant en plus une syntaxe plus ancienne:
http://css-tricks.com/old-flexbox-and-new-flexbox/
http://css-tricks.com/using-flexbox/
la source
Si css3 est une option, cela peut être fait en utilisant la
calc()
fonction css .Cas 1: Justifier les cases sur une seule ligne ( FIDDLE )
Le balisage est simple - un tas de divs avec un élément conteneur.
CSS ressemble à ceci:
où -1px pour corriger un bug de calcul / arrondi IE9 + - voir ici
Cas 2: justification des cases sur plusieurs lignes ( FIDDLE )
Ici, en plus de la
calc()
fonction,media queries
sont nécessaires.L'idée de base est de mettre en place une requête média pour chaque état #columns, où j'utilise ensuite calc () pour calculer la marge de droite sur chacun des éléments (sauf ceux de la dernière colonne).
Cela ressemble à beaucoup de travail, mais si vous utilisez LESS ou SASS, cela peut être fait assez facilement
(Cela peut toujours être fait avec des CSS réguliers, mais vous devrez alors faire tous les calculs manuellement, puis si vous changez la largeur de votre boîte - vous devez tout recommencer)
Voici un exemple utilisant LESS: (Vous pouvez copier / coller ce code ici pour jouer avec, [c'est aussi le code que j'ai utilisé pour générer le violon mentionné ci-dessus])
Donc, fondamentalement, vous devez d'abord décider d'une largeur de boîte et d'une marge minimale que vous souhaitez entre les boîtes.
Avec cela, vous pouvez déterminer la quantité d'espace dont vous avez besoin pour chaque état.
Ensuite, utilisez calc () pour calculer la marge droite et nth-child pour supprimer la marge droite des cases de la dernière colonne.
L' avantage de cette réponse par rapport à la réponse acceptée qui utilise
text-align:justify
est que lorsque vous avez plus d'une ligne de cases - les cases de la dernière ligne ne sont pas «justifiées», par exemple: s'il reste 2 cases sur la dernière ligne - I Je ne veux pas que la première case soit à gauche et la suivante à droite - mais plutôt que les cases se suivent dans l'ordre.En ce qui concerne la prise en charge du navigateur : cela fonctionnera sur IE9 +, Firefox, Chrome, Safari6.0 + - (voir ici pour plus de détails)
Cependant, j'ai remarqué que sur IE9 +, il y a un petit problème entre les états de requête multimédia. [si quelqu'un sait comment résoudre ce problème, j'aimerais vraiment le savoir :)]<- CORRIGÉ ICIla source
D'autres articles ont mentionné Flexbox , mais si plusieurs lignes d'éléments sont nécessaires , la
space-between
propriété de Flexbox échoue (voir la fin de l'article)À ce jour, la seule solution propre pour cela est avec le
Module de disposition de grille CSS ( démo Codepen )
Fondamentalement, le code nécessaire se résume à ceci:
1) Faire de l'élément conteneur un conteneur de grille
2) Définissez la grille avec une quantité «automatique» de colonnes - si nécessaire. Cette opération est effectuée pour les mises en page réactives. La largeur de chaque colonne sera de 120 pixels. (Notez l'utilisation de
auto-fit
(tel qu'apposé àauto-fill
) qui (pour une disposition à 1 rangée) réduit les pistes vides à 0 - permettant aux éléments de s'étendre pour occuper l'espace restant. (Consultez cette démo pour voir de quoi je parle) )).3) Définissez les espaces / gouttières pour les lignes et les colonnes de la grille - ici, car vous voulez une disposition «espace entre» - l'écart sera en fait un écart minimum car il augmentera si nécessaire.
4) et 5) - Similaire à la flexbox.
Démo Codepen (Redimensionner pour voir l'effet)
Prise en charge du navigateur - Caniuse
Actuellement pris en charge par Chrome (Blink), Firefox, Safari et Edge! ... avec le soutien partiel d'IE (Voir cet article de Rachel Andrew)
NB:
La
space-between
propriété de Flexbox fonctionne très bien pour une ligne d'éléments, mais lorsqu'elle est appliquée à un conteneur flexible qui enveloppe ses éléments - (avecflex-wrap: wrap
) - échoue, car vous n'avez aucun contrôle sur l'alignement de la dernière ligne d'éléments; la dernière ligne sera toujours justifiée (généralement pas ce que vous voulez)Démontrer:
Afficher l'extrait de code
Codepen (redimensionner pour voir de quoi je parle)
Pour en savoir plus sur les grilles CSS:
la source
Cela a fonctionné pour moi avec 5 images de différentes tailles.
Cela fonctionne à cause du contenu justifié: espace entre, et il est sur une liste, affiché horizontalement.
Sur CSS
Sur html
la source
en
jQuery
vous pourriez cibler le parent directement.Cela permettra à la
parent
croissance horizontale dechildren
s'ajouter.REMARQUE: cela suppose que le
'.children'
ont unwidth
etHeight
SetJ'espère que cela pourra aider.
la source
Si vous connaissez le nombre d'éléments par "ligne" et la largeur du conteneur, vous pouvez utiliser un sélecteur pour ajouter une marge aux éléments dont vous avez besoin pour créer un aspect justifié.
J'avais des rangées de trois divisions que je voulais justifier, donc utilisé le:
.tile:nth-child(3n+2) { margin: 0 10px }
cela permet au div central de chaque rangée d'avoir une marge qui force le 1er et le 3e div aux bords extérieurs du conteneur
Également idéal pour d'autres choses comme les couleurs de fond des bordures, etc.
la source