Je pense que je connais déjà la réponse à cette question, mais j'espère que quelqu'un aura peut-être une astuce intéressante pour cela.
Je veux spécifier une hauteur minimale d'un DIV, mais pas sur la base px /%. (Je sais que cela semble étrange, mais c'est pour des raisons de compatibilité/réactivité)
En gros, je veux pouvoir le spécifier en nombre de lignes.
J'ai une grille de DIVS, mais les éléments à l'intérieur ne sont pas fixes, donc un élément peut avoir 3 lignes et le suivant seulement 2 ou 1 ligne. cela gâche la mise en page.
Fondamentalement, ce dont j'ai besoin, c'est ceci:
===================== ===================== =====================
Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit
amet, consectetur amet, consectetur amet, consectetur
adipiscing elit.
===================== ===================== =====================
===================== ===================== =====================
Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit
amet, consectetur amet, consectetur
adipiscing elit.
===================== ===================== =====================
et PAS ceci:
===================== ===================== =====================
Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit
amet, consectetur amet, consectetur amet, consectetur
adipiscing elit. ===================== =====================
=====================
===================== =====================
===================== Lorem ipsum dolor sit Lorem ipsum dolor sit
Lorem ipsum dolor sit amet, consectetur =====================
amet, consectetur =====================
adipiscing elit.
=====================
ce genre de chose peut-il être réalisé en spécifiant "Je veux 3 lignes"? (Par opposition aux pixels, pourcentage/em ??)
Edit I
Après les commentaires -
Ce que je veux vraiment, c'est quelque chose comme les éléments FORM, INPUT ou TEXTAREA où vous pouvez simplement spécifier la hauteur et la largeur par des lignes/caractères!
<TEXTAREA NAME=string, ROWS=n, COLS=n> </TEXTAREA>
Il est difficile de croire que personne n’a inventé une telle solution et nous a tous laissés aux prises avec des calculs PX/em /% et autres.
Vous devriez utiliser un clearfix hack
Cela vous permettra d’aligner vos divs sans spécifier de hauteur. C'est comme un séparateur de ligne:
===================== ===================== =====================
Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit
amet, consectetur amet, consectetur amet, consectetur
adipiscing elit. ===================== =====================
=====================
{clearfix}
===================== ===================== =====================
Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit
amet, consectetur amet, consectetur =====================
===================== adipiscing elit.
=====================
Vous pouvez toujours définir hauteur/marge sur chaque div, bien sûr:
MODIFIER :
Pour une taille égale interne sans utiliser de tables, vous avez plusieurs solutions:
Pourquoi es-tu si opposé à l’idée de mettre min-height
dans ems? Si vous avez défini line-height
dans ems, multipliez-le par trois et vous obtenez la hauteur souhaitée!
div {
line-height:1.5em;
min-height:4.5em;
float:left;
width:33%;/*close enough*/
}
Mise à jour: définir un minimum de hauteur sur trois lignes est un exercice futile. Il ne tient pas compte des scénarios dans lesquels le contenu ne correspond pas ne tient pas dans l'espace disponible. Vous pouvez utiliser de fausses colonnes à la place pour que le contenu semble avoir une hauteur uniforme dans la rangée.
J'ai accompli cela en utilisant flexbox
et min-height
.
Demandez à chacun de vos éléments div
dans un conteneur flexbox
de leur donner la même hauteur et de réagir en conséquence (par exemple, utilisez des points d'arrêt, flexbox wrap
et min-width
pour vous assurer que la probabilité d'avoir plus de 3 lignes de texte est faible). Ensuite, pour chacun de vos éléments internes, définissez les valeurs min-height
et line-height
telles que @ o.v. suggéré. min-height
devrait être égal à font-size
* line-height
multiplicateur.
J'avais besoin que les paragraphes internes aient au moins 2 lignes de haut (il y a une forte probabilité qu'ils contiennent 1 ou 2 lignes de texte, avec une très faible probabilité qu'ils contiennent plus de 2 lignes de texte), c'est donc ce que J'ai fini avec:
HTML
<div class="flex-container">
<div>
<p>Lorem ipsum...</p>
<p>Lorem ipsum...</p>
</div>
<div>
<p>Lorem ipsum...</p>
<p>Lorem ipsum...</p>
</div>
</div>
CSS
div.flex-container {
display: flex;
}
div.flex-container p {
font-size: 1em;
line-height: 1.125; // Default is 1.2, but varies by browser
min-height: 2.25em; // 2 * 1em * 1.125
// (number of lines) * (font-size) * (line-height multiplier)
}
Je ne sais pas pourquoi voudriez-vous cela ... mais vous pouvez fixer la hauteur et la largeur de la classe div en fonction de la taille de la police que vous allez utiliser. Disons que votre taille de police est de 10 pixels et que vous allez utiliser 10 px padding puis utilisez les divs avec une hauteur de 50px .. puis ajoutez un margin-bottom à ces divs et vous êtes prêt à partir je pense!