PRATIQUE CLIENTS WEB 
Obtenir une largeur en fonction du contenu en CSS
 
"Comment puis-je utiliser CSS pour créer des bordures de largeur adaptée aux dimensions de ce qu'elles encadrent ?" (16/11/2005)

Par défaut, les éléments conteneurs CSS prennent 100% de l'espace offert par leur élément contenant (jusqu'à la racine, le navigateur lui-même). Il est possible de modifier la propriété width d'un conteneur pour lui assigner un pourcentage de cet espace, ou pour indiquer une largeur précise en pixels.

Il peut cependant arriver un cas où l'on préférera que le conteneur prenne une largeur en fonction de son contenu (texte, image...), par exemple pour afficher une bulle d'information avec des bordures. Par défaut, ce comportement n'est pas prévu par CSS. Il faut donc tricher.

L'une des méthodes consiste à enfermer le contenu textuel dans un élément span, et à définir la bordure par rapport à ce span. En effet, les hauteur et largeur d'un span dépendent de celles du texte qu'il contient. Le div conteneur du span aura donc beau prendre 100% de l'espace, le span n'encadrera que le texte, et non de l'espace vide.

Bienvenue sur notre site.
Vous n'êtes pas connecté.


<style>
#case span {
  border: #656565 2px solid;
  background-color: #f5f6f0;
  padding: 5px;
  display: table;
  text-align: center;
  }
</style>

<div id="case">
  <span>
    Bienvenue sur notre site.<br />
    Vous n'êtes pas connecté.<br />
    <input type="button" value="Connectez-vous !" />
  </span>
</div>


  Forum

Réagissez dans les forums de JDN Développeurs

Cependant, cela ne permet pas de placer une image : span ne prend en compte que la hauteur du texte, et donc une image plus grande que ce dernier sortira du cadre.

Une autre solution existe alors, sans span : utiliser display: table. Cette propriété précise que l'élément ciblé sera affiché comme s'il s'agissait d'un tableau.

Locked Bienvenue sur notre site.
Vous n'êtes pas connecté.


<style>
#case {
  border: #656565 2px solid;
  background-color: #f5f6f0;
  padding: 5px;
  display: table;
  test-align: center;
  }

#case img {
  float: left;
  }
</style>

<div id="case">
  <img src="img/laMer.jpg" alt="Locked" />
  Bienvenue sur notre site.<br />
  Vous n'êtes pas connecté.<br />
  <input type="button" value="Connectez-vous !" />
</div>



Les meilleures astuces CSS sur le JDN :
- Comment appliquer les CSS d'une page web au contenu d'une iframe ?
- Comment centrer horizontalement une DIV dans une autre en CSS ?
- Comment créer un arrière-plan (backgroud) CSS extensible et adaptable ?
- Comment définir les cellpadding et cellspacing en CSS ?
- Comment modifier l'image d'un bouton input en CSS ?
- Comment rendre l'arrière-plan d'un élément semi-transparent en conservant le texte de cet élément opaque en CSS ?
- Internet Explorer supporte-t-il l'attribut CSS border-radius
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page