28172 sujets

CSS et mise en forme, CSS3

Code HTML:

<div style="text-align:center;'>
    <div class="pupTitle">Ténors</div>
</div>

code CSS:

.pupTitle {
                background: #404040;
                color:white;
                font-weight:bold;
                height:40px;
                width:80px;
                text-align:center;
                vertical-align:middle;
                margin:auto;
                border-radius: 5px;
                display: table-cell;
            }

Résultat: j'ai bien un texte blanc sur fond gris centré verticalement et horizontalement dans un rectangle à coins arrondis. Par contre je ne parviens pas à le centrer horizontalement.
SI je ne mets pas "display: table-cell;", c'est bien centré mais le texte n'est pas centré verticalement dans le rectangle.

Sinon je peux mettre une table centrée, avec une rangée d'une cellule, mais doit y avoir mieux, non???
Modifié par PapyJP (04 Dec 2014 - 19:44)
Greg_Lumiere a écrit :
Bonsoir,

Le style appliqué dans le Html fait barrage. En l'ôtant le container prend la hauteur du contenu en gardant la largeur de la page.

Voyez-vous même sur cet exemple CodePen

Désolé, je ne parviens pas à accéder à l'exemple CodePen, et je ne comprends pas ce que vous voulez dire.
Voici le code de la page de test

 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Language" content="fr" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style type="text/css">
.pupTitle {
                background: #404040;
                color:white;
                font-weight:bold;
                height:40px;
                width:80px;
                text-align:center;
                vertical-align:middle;
                margin:auto;
                border-radius: 5px;
                display: table-cell;
            }
 
 </style>
    </head>
    <body>
<div id="container">
<div class="pupTitle">Tenors</div>
</div>
    </body>
</html>
Bonsoir,

Vous utilisez quel navigateur pour ne pas pouvoir afficher l'exemple code pen?

En tout cas le display:table-cell est inutile pour votre problématique, vous pouvez faire un display:block pour centrer l'élément horizontalement si vous lui appliquez un margin: auto;
Ou bien un display inline-block fera l'affaire si l'élément parent est en text-align:center;

Pour ce qui est du centrage vertical du texte à l'intérieur de l'élément, vous pouvez mettre une hauteur de ligne strictement équivalente à la hauteur de l'élément, ou bien mettre un padding top et bottom identique.
Freez a écrit :
Bonsoir,

Vous utilisez quel navigateur pour ne pas pouvoir afficher l'exemple code pen?

En tout cas le display:table-cell est inutile pour votre problématique, vous pouvez faire un display:block pour centrer l'élément horizontalement si vous lui appliquez un margin: auto;
Ou bien un display inline-block fera l'affaire si l'élément parent est en text-align:center;

Pour ce qui est du centrage vertical du texte à l'intérieur de l'élément, vous pouvez mettre une hauteur de ligne strictement équivalente à la hauteur de l'élément, ou bien mettre un padding top et bottom identique.

Merci de votre réponse.

Je suis en ce moment sur Safari/iPad. Je regarderai demain sur mon PC si si marche mieux sur Firefox.

En ce qui concerne un "contournement", je sais comment faire (une table centrée horizontalement comportant une ligne de une cellule centrée verticalement et horizontalement). C'est ce que je faisais au début du Web dans les années 1990, et c'est ce que je fais toujours.

Ce que je cherche à faire c'est comprendre comment faire du centrage vertical en CSS, ce code n'est qu'un exemple didactique.
Salut,
Freez a écrit :
Pour ce qui est du centrage vertical du texte à l'intérieur de l'élément, vous pouvez mettre une hauteur de ligne strictement équivalente à la hauteur de l'élément, ou bien mettre un padding top et bottom identique.

La solution de la hauteur de ligne n'est pas pratique s'il y a plus d'une ligne ou que le texte censé tenir sur une ligne passe à la ligne en cas d'agrandissement de la taille de police.
Greg_Lumiere a écrit :
Le style appliqué dans le Html fait barrage. En l'ôtant le container prend la hauteur du contenu en gardant la largeur de la page.

Voyez-vous même sur cet exemple CodePen

Sauf que le texte cesse d'être centré verticalement dans l'exemple CodePen rapporté.

Quant à display: table-cell, il permet, effectivement, de centrer verticalement du texte. Cependant, un élément se voyant appliquer une déclaration display: table-cell n'aura pas de marges, ce qui explique pourquoi le bloc cesse d'être centré.

Pour centrer le bloc tout en centrant le texte verticalement, la solution la plus simple est de recourir au modèle de boîte flexible de CSS 3 (le module flexbox, pour les intimes), les seuls inconvénients étant que ce module CSS 3 n'est pas pris en charge par les versions d'IE antérieures à la 10, d'une part, et que, d'autre part, le code CSS peut être chargé, étant donné que la syntaxe de ce module a évolué au fil des temps et que les navigateurs ne prennent pas tous en charge la syntaxe actuelle, avec ou sans préfixe (enfin, cela dépend des versions de navigateur à prendre en compte). Pour illustrer le propos :
<div id="container">
  <div class="pupTitle">Ténors</div>
</div>

.pupTitle {
  /* On applique le comportement d'une boîte flexible selon le module flexbox */
  display: -webkit-flex; /* Safari a encore besoin du préfixe */
  display: -ms-flexbox; /* Pour IE 10, qui prend en charge une ancienne syntaxe */
  display: flex; /* Pour Google Chrome, Opera et Firefox dernières versions, ainsi que pour IE 11 */
  
  /* On centre horizontalement le contenu de la boîte flexible (dans ce contexte, text-align devient superflu) */
  -webkit-justify-content: center; /* Safari a encore besoin du préfixe */
  -ms-flex-pack: center; /* Pour IE 10, qui prend en charge une ancienne syntaxe */
  justify-content: center; /* Pour Google Chrome, Opera et Firefox dernières versions, ainsi que pour IE 11 */
  
  /* On centre verticalement le contenu de la boîte flexible (dans ce contexte, vertical-align devient superflu) */
  -webkit-align-items: center; /* Safari a encore besoin du préfixe */
  -ms-flex-align: center; /* Pour IE 10, qui prend en charge une ancienne syntaxe */
  align-items: center; /* Pour Google Chrome, Opera et Firefox dernières versions, ainsi que pour IE 11 */
}

Soit dit en passant, PapyJP, la bonne syntaxe du doctype XHTML 1.0 transitionnel est la suivante :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

D'ailleurs, pourquoi ne pas carrément employer le doctype HTML 5, bien plus simple à mémoriser ? Smiley cligne
Victor BRITO a écrit :
Sauf que le texte cesse d'être centré verticalement dans l'exemple CodePen rapporté.
Effectivement, peut-être un problème de cache, je m'en aperçois maintenant. Remplacer le height:40px par line-height:40px résout le problème.

Personnellement j'utilise plus volontiers le type 'affichage inline-block plutôt que les Flexbox mais effectivement ce sont des solutions qui fonctionnent très bien.

Attention toutefois :
La rétro-compatibilité des Flexbox est limitée.
Le modèle inline-block implique de revenir sur le Html pour y insérer les commentaires conditionnels afin de gérer les espaces indésirables.

Et je vote pour un doctype Html5
Victor BRITO a écrit :
bien plus simple à mémoriser
y'a pas photo.
Merci à tous.

Comme vous le voyez, les retraités se couchent tard mais se lèvent tard!

Concernant le HTML, je suis effectivement passé au HTML5 depuis quelque temps, mais le squelette que j'utilise pour faire des tests date d'il y a longtemps... Vous avez raison, je vais le changer.

Pour le reste, il me semble clair que les flexboxes devraient (enfin!) permettre de faire en CSS des choses que je fais depuis 20 ans en utilisant les tables et que je ne suis jamais arrivé à faire autrement. Le temps que ça soit généralisé et stabilisé, je le verrai peut être de mon vivant Smiley cligne

Je vais continuer mon exploration du CSS en utilisant le site pour vous demander de l'aide. La doc ( en ligne ou papier) est très mal faite et je ne m'y retrouve pas. Si vous avez la référence du bouquin ou site miracle, je suis preneur!
PapyJP a écrit :

[...] Ce que je cherche à faire c'est comprendre comment faire du centrage vertical en CSS, ce code n'est qu'un exemple didactique.


Cet article répond très bien à la question, il y a plusieurs manières de s'y prendre qui dépendent vraiment de la disposition de vos éléments et de la scalabilité souhaitée pour votre interface.

Bonne lecture Smiley cligne
Freez a écrit :


Cet article répond très bien à la question, il y a plusieurs manières de s'y prendre qui dépendent vraiment de la disposition de vos éléments et de la scalabilité souhaitée pour votre interface.

Bonne lecture Smiley cligne

Merci!
Pendant que je lis ça j'arrêterai peut être de vous poser des questions stupides.... Smiley cligne
PapyJP a écrit :
poser des questions stupides.... Smiley cligne
Aucune question posée n'est stupide. Ne sont stupides que celles qui reste sous silence.

En tout cas ça fait cogiter, bon exercice pour le cerveau Smiley cligne
Greg_Lumiere a écrit :
En tout cas ça fait cogiter, bon exercice pour le cerveau Smiley cligne

Surtout à mon âge... Smiley smile