Je génère une page pour un site portail à venir, et j'ai un élément HTML avec du contenu facultatif. J'aimerais que l'élément ne soit pas rendu s'il est vide, mais en y ajoutant du rembourrage, il sera rendu. Comment ajouter un remplissage au contenu, mais uniquement si le contenu est présent?
.someElement{padding-top: 5px;}
HTML en question:
<div class="someElement">With padded content</div>
<div class="someElement"><!-- shouldn't render since it has no content --></div>
En gros, j'aimerais que le deuxième élément ci-dessus ne prenne pas de place. Je teste dans tous les principaux navigateurs, en utilisant le doctype XHTML 1.1.
Vous pouvez faire l'affaire avec la pseudo-classe CSS3: vide
.someElement
{
// your standard style
}
.someElement:empty
{
display:none;
}
Malheureusement, Internet Explorer ne prend pas encore en charge cette fonctionnalité. Pour tous les autres navigateurs, il fera très bien l'affaire ...
<style>
.someElement{padding-top: 5px; display:table;}
</style>
<div class="someElement">With padded content</div>
<div class="someElement"><!-- shouldn't render since it has no content --></div>
Ajout d'affichage: table; devrait faire l'affaire.
Attribuez à l'élément un attribut id
. Vous pouvez ensuite utiliser Javascript pour vérifier sa propriété innerHTML une fois la page chargée. Si innerHTML a une longueur de zéro, vous pouvez définir sa propriété d'affichage sur aucune. Cette page pourrait aider si vous ne connaissez pas votre javascript.
C'est toujours une façon amusante de jouer. Si vous savez que l'élément ne doit pas être rendu avant de servir la page, il serait préférable de l'omettre complètement. Si vous ne voulez pas omettre l'élément, cachez-le simplement, puis forcez-le à se cacher; style="display: none"
Si c'est nécessaire pour avoir le div.someElement
dans le HTML, la meilleure façon CSS/HTML de le faire serait d'ajouter un div
supplémentaire autour du contenu ajouté qui a la propriété padding
.someElement > div{padding-top:5px;}
<div class="someElement"><div>Content</div></div>
Sinon, faites comme Pekka le dit, ou essayez de faire javascript pour vous.
Je ne peux pas penser à un seul moyen CSS pour le faire.
J'essaierais de décider si l'élément est rendu au moment où je sais s'il y aura du contenu. C'est probablement la solution la plus propre.
Donnez à l'élément vide une classe différente (par exemple someHiddenElement
) lorsque vous générez le contenu. Puis ajouter someHiddenElement { display: none }
à votre feuille de style.
Au moment où vous remplissez le div
facultatif, s'il n'y a pas de texte à y mettre, essayez de changer la propriété CSS display
en none.
Selon cette source (et d'autres), display: none
supprime complètement l'élément du document. Il ne prend pas de place, même si le code HTML est toujours dans le code source.
N'utilisez pas de remplissage sur le conteneur, utilisez la marge sur le contenu. Que lorsqu'il n'y a pas de contenu, le conteneur reste invisible.