Comment créez-vous un div caché qui ne crée pas de saut de ligne ou d'espace horizontal?

354

Je veux avoir une case à cocher cachée qui n'occupe pas d'espace sur l'écran.

Si j'ai ceci:

<div id="divCheckbox" style="visibility: hidden">

Je ne vois pas la case à cocher, mais cela crée toujours une nouvelle ligne.

Si j'ai ceci:

<div id="divCheckbox" style="visibility: hidden; display:inline;">

il ne crée plus de nouvelle ligne, mais il occupe un espace horizontal sur l'écran.

Existe-t-il un moyen d'avoir un div caché qui ne prend pas de place (vertical ou horizontal?

leora
la source
Y a-t-il une utilité pour une telle div?
Jonno_FTW
6
@Jonno: Il est couramment utilisé dans AJAX. Supposons que vous ayez une liste d'articles avec des triangles de divulgation. Vous souhaitez que des détails ou une sous-arborescence apparaissent lorsque l'utilisateur clique sur le triangle de divulgation. Donc ce que vous faites est de mettre un <div id = "theID" style = "display: none;"> où les détails devraient aller. Ensuite, lorsque l'utilisateur clique sur le triangle, vous déplacez le triangle à une position "à mi-chemin" (pointant vers le sud-est) et déclenchez une demande AJAX pour remplir la <div>. Lorsque la demande AJAX se termine, vous tournez le triangle vers le sud et supprimez le "display: none;" du style de <div>. La bibliothèque script.aculo.us fait beaucoup cela.
Mike DeSimone du

Réponses:

717

Utilisation display:none;

<div id="divCheckbox" style="display: none;">
  • visibility: hidden masque l'élément, mais il prend toujours de la place dans la mise en page.

  • display: none supprime complètement l'élément du document, il ne prend pas de place.

CMS
la source
42
pour montrer à nouveau le div (juste au cas où quelqu'un aurait besoin comme moi) -<div id="divCheckbox" style="display: inline-block;">
anujin
14
@anujin: Pourquoi inline-block? La displayvaleur par défaut pour un div est block!
MMM
Existe-t-il un moyen de faire le contraire? Pour changer un div de display: nonela display: inline-blockou équivalent sans le div maintenant affiché en prenant l' espace et déplacer mes autres éléments DOM autour?
bpromas
1
pourrait être utile de mettre à jour la réponse pour inclure l'attribut HTML global caché qui est disponible depuis HTML5.1 qui est fondamentalement le même que de dire display: nonebien que directement à partir de HTML. Cependant, toute utilisation de la displaypropriété remplace le comportement de l' hiddenattribut global.
Marius Mucenicu
54

Depuis la sortie de HTML5, on peut maintenant simplement faire:

<div hidden>This div is hidden</div>

Remarque: cela n'est pas pris en charge par certains anciens navigateurs, notamment IE <11.

Documentation des attributs cachés ( MDN , W3C )

C_B
la source
1
C'est plus sémantiquement correct que de se cacher avec CSS, c'est meilleur pour l'accessibilité, et c'est supporté par tous les principaux navigateurs. Ce devrait être la réponse acceptée en 2020.
Robin Métral
29

Utilisez style="display: none;". De plus, vous n'avez probablement pas besoin d'avoir le DIV, il suffit display: noneprobablement de définir le style sur la case à cocher.

tvanfosson
la source
J'ai besoin de me cacher le message d'alerte au chargement de la page et je voulais l'afficher à nouveau en cliquant sur le bouton. J'ai essayé visibility: hiddenmais cela montrait un espace vide. style="display: none;"a fonctionné comme un petit charme :)
sohaiby
8

En plus de la réponse de CMS, vous voudrez peut-être envisager de mettre le style dans une feuille de style externe et attribuer le style à l'id, comme ceci:

#divCheckbox {
display: none;
}
Zeta Two
la source
+1, c'est vraiment une bonne suggestion, mais comment afficher une seule case sans affecter la visibilité de toutes les autres cases?
Owais Qureshi
1
@dotNetSoldier Ancienne question mais il devrait y avoir une réponse ici. Vous avez une classe css appelée invis et vous l'ajoutez / supprimez de la case à cocher ou div par id en utilisant JS.
DanielST
8

Étant donné que vous devez vous concentrer sur la convivialité et les généralités en CSS, plutôt que d'utiliser un identifiant pour pointer vers un élément de mise en page spécifique (ce qui entraîne des fichiers CSS énormes ou multiples), vous devriez probablement utiliser à la place une vraie classe dans votre fichier .css lié:

.hidden {
visibility: hidden;
display: none;
}

ou pour le minimaliste:

.hidden {
display: none;
}

Maintenant, vous pouvez simplement l'appliquer via:

<div class="hidden"> content </div>
Dave
la source
le code semble beaucoup plus propre de cette façon! Je préfère avoir un cours plutôt qu'un style en ligne
Harry Cho
5

Pensez à utiliser <span>pour isoler de petits segments de balisage à coiffer sans casser la disposition. Cela semblerait plus idiomatique que d'essayer de forcer un <div>ne pas s'afficher - si en fait la case à cocher elle-même ne peut pas être stylée comme vous le souhaitez.

Rich Churcher
la source
4

Afficher / masquer par clic de souris:

<script language="javascript">

    function toggle() {

        var ele = document.getElementById("toggleText");
        var text = document.getElementById("displayText");

        if (ele.style.display == "block") {

            ele.style.display = "none";
            text.innerHTML = "show";
        }
        else {

            ele.style.display = "block";
            text.innerHTML = "hide";
        }
    }
</script>

<a id="displayText" href="javascript:toggle();">show</a> <== click Here

<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>

Source: ici

Mahdi Jazini
la source
4

Pour empêcher la case à cocher de prendre de l'espace sans le supprimer du DOM, utilisez hidden.

<div hidden id="divCheckbox">

Pour éviter que la case à cocher de prendre tout l' espace et aussi le retirer du DOM, l' utilisation display: none.

<div id="divCheckbox" style="display:none">
smac89
la source
3

Pour masquer visuellement l'élément , mais le conserver en html, vous pouvez utiliser:

<div style='visibility:hidden; overflow:hidden; height:0; width:0;'>
  [content]
</div>

ou

<div style='visibility:hidden; overflow:hidden; position:absolute;'>
  [content]
</div>

Qu'est-ce qui peut mal tourner display:none? Il supprime complètement l'élément du HTML, ainsi certaines fonctionnalités peuvent être cassées si elles ont besoin d'accéder à quelque chose dans l'élément caché.

THN
la source
0

display: none;

Cela devrait faire disparaître l'élément et ne pas prendre de place.

Jose Luis Rasmussen Garcia
la source
Merci aux personnes qui ont commenté la mise en forme de ma réponse.
Jose Luis Rasmussen Garcia