En utilisant CSS, comment puis-je styliser les éléments suivants:
<dl>
<dt>Mercury</dt>
<dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
<dt>Venus</dt>
<dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
<dt>Earth</dt>
<dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
</dl>
donc le contenu de l' dt
émission dans une colonne et le contenu de dd
dans une autre colonne, avec chacun dt
et le correspondant dd
sur la même ligne? C'est-à-dire produire quelque chose qui ressemble à:
Réponses:
la source
clear: left
au style dt pour s'assurer qu'ils restent en ligne même s'ils doivent envelopper.* { ... }
instruction fait tout perdre la marge et le rembourrage, et le supprimer déforme la DL. Utiliser une classe ne fera pas l'affaire non plus. Il semble que si je veux autre chose que la DL, je devrai me passer de marges et de rembourrages partout ... Ou?J'ai une solution sans utiliser de flotteurs!
vérifier cela sur codepen
Viz.
Mise à jour - 3 ème janvier 2017: J'ai ajouté solution boîte flex pour le problème. Vérifiez que dans le codepen lié et affinez-le selon les besoins. Merci!
la source
Disposition de la grille CSS
Pour modifier la taille des colonnes, jetez un œil à la
grid-template-columns
propriété.la source
Si vous utilisez Bootstrap 3 (ou une version antérieure) ...
la source
dl-horizontal
été supprimé de Bootstrap 4. Dans BS4, vous devez utiliser des classes de grille à la place.En supposant que vous connaissez la largeur de la marge:
la source
Parce que je n'ai pas encore vu d'exemple qui fonctionne pour mon cas d'utilisation, voici la solution la plus complète que j'ai pu réaliser.
Curieusement, cela ne fonctionne pas avec
display: inline-block
. Je suppose que si vous avez besoin de définir la taille de l'un desdt
éléments ou desdd
éléments, vous pouvez définir l'dl
affichage dedisplay: flexbox; display: -webkit-flex; display: flex;
et laflex
sténographie de ladd
éléments et lesdt
éléments comme quelque chose commeflex: 1 1 50%
etdisplay
commedisplay: inline-block
. Mais je n'ai pas testé cela, alors approchez avec prudence.la source
Voir démo jsFiddle
J'avais besoin d'une liste exactement telle que décrite pour un projet qui montrait des employés d'une entreprise, avec leur photo à gauche et des informations à droite. J'ai réussi à effacer en utilisant des éléments pseudo-après chaque
DD
:De plus, je souhaitais que le texte ne s'affiche qu'à droite de l'image, sans passer sous l'image flottante (effet pseudo-colonne). Cela peut être accompli en ajoutant un
DIV
élément avec le CSSoverflow: hidden;
autour du contenu de laDD
balise. Vous pouvez omettre cet extraDIV
, mais le contenu de laDD
balise passera sous le flottantDT
.Après avoir joué avec, j'ai pu prendre en charge plusieurs
DT
éléments parDD
, mais pas plusieursDD
éléments parDT
. J'ai essayé d'ajouter une autre classe facultative pour effacer seulement après la dernièreDD
, mais lesDD
éléments suivants ont été enveloppés sous lesDT
éléments (pas l'effet souhaité… je voulais que les élémentsDT
etDD
forment des colonnes, et lesDD
éléments supplémentaires étaient trop larges).Par tous les droits, cela ne devrait fonctionner que dans IE8 +, mais en raison d'une bizarrerie dans IE7, cela fonctionne également là-bas.
la source
Voici une autre option qui fonctionne en affichant les dt et dd en ligne puis en ajoutant un saut de ligne après le dd.
Ceci est similaire à la solution de Navaneeth ci-dessus, mais en utilisant cette approche, le contenu ne s'alignera pas comme dans un tableau, mais le dd suivra le dt immédiatement sur chaque ligne quelle que soit sa longueur.
la source
Je dois le faire et avoir le
<dt>
contenu centré verticalement, par rapport au<dd>
contenu. J'ai utilisédisplay: inline-block
, avecvertical-align: middle
Voir l'exemple complet sur Codepen ici
la source
Selon la façon dont vous stylisez les éléments dt et dd, vous pouvez rencontrer un problème: les faire avoir la même hauteur. Par exemple, si vous voulez mais une bordure visible au bas de ces éléments, vous voulez très probablement afficher la bordure à la même hauteur, comme dans un tableau.
Une solution consiste à tricher et à faire de chaque ligne un élément "dl". (cela équivaut à utiliser tr dans un tableau) Nous perdons l'intérêt initial des listes de définitions, mais sur le pendant, c'est un moyen facile d'obtenir des pseudo-tableaux qui sont rapidement et assez stylisés.
LE CSS:
LE HTML:
la source
quatreVingtCinqPts
? :)J'ai trouvé une solution qui me semble parfaite, mais elle nécessite des
<div>
balises supplémentaires . Il s'avère qu'il n'est pas nécessaire d'utiliser des<table>
balises pour s'aligner comme dans un tableau, il suffit d'utiliserdisplay:table-row;
et dedisplay:table-cell;
styles:la source
dl
s ne peuvent avoir quedt
s etdd
s comme enfants.dt
Les enfants ne peuvent avoir que des éléments en ligne.dd
s, pour une raison quelconque, peuvent avoir des éléments de niveau bloc en tant qu'enfants.DI
élément, comme moi . Mais avec un tel élément, vous n'avez pas du tout besoin de choses ésotériques comme les tables CSS ... Quoi qu'il en soit, cet élément n'existe pas, et vous ne devez donc pas l'utiliser.run-in
CSSdisplay
est exactement ce que je veux (dans mon cas, je veux de simples listes de métadonnées de valeur de nom).J'ai récemment eu besoin de mélanger des paires dt / dd en ligne et non en ligne, en spécifiant la classe
dl-inline
sur les<dt>
éléments qui devraient être suivis par les<dd>
éléments en ligne .la source
Cela fonctionne sur IE7 +, est conforme aux normes et permet différentes hauteurs.
Voir le JSFiddle .
la source
cela fonctionne pour les afficher sous forme de tableau, avec bordure, il doit être réactif avec 3em de la largeur de la première colonne. Le retour à la ligne casse juste les mots plus larges que la colonne
Comparaison
<table>
avec<dl>
:la source
Je commence généralement par ce qui suit lorsque je stylise les listes de définitions sous forme de tableaux:
la source
La plupart de ce que les gens suggèrent ici fonctionne, mais vous ne devez placer que du code générique dans la feuille de style et placer le code spécifique dans le code html comme indiqué ci-dessous. Sinon, vous vous retrouverez avec une feuille de style gonflée.
Voici comment je le fais:
Votre code de feuille de style:
Votre code html:
Ressemble à ça
la source