XHTML & CSS

Partir du bon pied avec les CSS

Le 5 novembre 2007 à 22:01 par Séverin

Le design à la mode web 2.0, c’est un design 100% CSS et sans tableaux (sauf pour les tableaux de données évidemment). Mais avec les CSS, si on ne prend pas les mesures nécessaires dés le début, on rencontre beaucoup de problèmes et à chaque étapes du design. Tout d’abord quand on règle la mise en page globale ensuite quand on règle les styles de texte et enfin quand on contrôle la compatibilité entre navigateurs.Pour éviter beaucoup de ces problèmes, il existe quelques petites astuces qui vous feront gagner un temps précieux.

Réinitialisation des valeurs CSS W3C

Malheureusement, les navigateurs ne respectent pas parfaitement les règles CSS établies par le W3C. La taille par défaut des polices, les polices par défaut, la hauteur des lignes, les marges, … Autant de différences qui pourront facilement s’avérée gênantes.

Pour corriger ça, quelques styles supplémentaires au début de votre feuille de style permettront d’homogénéiser les valeurs par défaut aux normes W3C.

Pour cela, la feuille de style préconisez par le W3C est idéale : http://www.w3.org/TR/CSS21/sample.html

  1. html, address,
  2. blockquote,
  3. body, dd, div,
  4. dl, dt, fieldset, form,
  5. frame, frameset,
  6. h1, h2, h3, h4,
  7. h5, h6, noframes,
  8. ol, p, ul, center,
  9. dir, hr, menu, pre   { display: block }
  10. li              { display: list-item }
  11. head            { display: none }
  12. table           { display: table }
  13. tr              { display: table-row }
  14. thead           { display: table-header-group }
  15. tbody           { display: table-row-group }
  16. tfoot           { display: table-footer-group }
  17. col             { display: table-column }
  18. colgroup        { display: table-column-group }
  19. td, th          { display: table-cell }
  20. caption         { display: table-caption }
  21. th              { font-weight: bolder; text-align: center }
  22. caption         { text-align: center }
  23. body            { margin: 8px }
  24. h1              { font-size: 2em; margin: .67em 0 }
  25. h2              { font-size: 1.5em; margin: .75em 0 }
  26. h3              { font-size: 1.17em; margin: .83em 0 }
  27. h4, p,
  28. blockquote, ul,
  29. fieldset, form,
  30. ol, dl, dir,
  31. menu            { margin: 1.12em 0 }
  32. h5              { font-size: .83em; margin: 1.5em 0 }
  33. h6              { font-size: .75em; margin: 1.67em 0 }
  34. h1, h2, h3, h4,
  35. h5, h6, b,
  36. strong          { font-weight: bolder }
  37. blockquote      { margin-left: 40px; margin-right: 40px }
  38. i, cite, em,
  39. var, address    { font-style: italic }
  40. pre, tt, code,
  41. kbd, samp       { font-family: monospace }
  42. pre             { white-space: pre }
  43. button, textarea,
  44. input, select   { display: inline-block }
  45. big             { font-size: 1.17em }
  46. small, sub, sup { font-size: .83em }
  47. sub             { vertical-align: sub }
  48. sup             { vertical-align: super }
  49. table           { border-spacing: 2px; }
  50. thead, tbody,
  51. tfoot           { vertical-align: middle }
  52. td, th          { vertical-align: inherit }
  53. s, strike, del  { text-decoration: line-through }
  54. hr              { border: 1px inset }
  55. ol, ul, dir,
  56. menu, dd        { margin-left: 40px }
  57. ol              { list-style-type: decimal }
  58. ol ul, ul ol,
  59. ul ul, ol ol    { margin-top: 0; margin-bottom: 0 }
  60. u, ins          { text-decoration: underline }
  61. br:before       { content: "A" }
  62. :before, :after { white-space: pre-line }
  63. center          { text-align: center }
  64. :link, :visited { text-decoration: underline }
  65. :focus          { outline: thin dotted invert }/* Begin bidirectionality settings (do not change) */
  66. BDO[DIR="ltr"]  { direction: ltr; unicode-bidi: bidi-override }
  67. BDO[DIR="rtl"]  { direction: rtl; unicode-bidi: bidi-override }
  68. *[DIR="ltr"]    { direction: ltr; unicode-bidi: embed }
  69. *[DIR="rtl"]    { direction: rtl; unicode-bidi: embed }@media print {
  70.   h1            { page-break-before: always }
  71.   h1, h2, h3,
  72.   h4, h5, h6    { page-break-after: avoid }
  73.   ul, ol, dl    { page-break-before: avoid }
  74. }

Commencer par les styles globaux

Si vous attendez d’avoir fini votre design pour modifier les marges de vos titres, vous risquez d’avoir de mauvaises surprises. Commencez toujours par définir les styles des tags avant tout et surtout avant de définir les styles de classes. Les classes ne sont là que pour modifier les styles globaux déjà définis.

Clearfix

L’horreur absolu quand vous réaliser votre design, ce sont les interactions entre float et clear. Et selon votre design, vous pourrez rencontrer deux problèmes assez gênants.

Le premier problème est qu’un élément en flottant à gauche ou à droite ne redimensionne pas son parent. Un exemple simple :

  1. <style>
  2.     .parent {
  3.         border: 1px solid #000;
  4.         padding:5px;
  5.     }
  6.     .flottant {
  7.         float: left;
  8.         width: 150px;
  9.         border:1px solid #F00;
  10.     }
  11. </style>
  12.  
  13. <div class="parent">
  14.    <div class="flottant">Cette colonne ne redimensionne pas correctement le DIV qui la contient.</div>
  15.    Ce texte est le seul à redimensionner le DIV qui le contient.
  16. </div>

Dans cet exemple, le flottant dépasse du cadre du parent. Pas très esthétique… Heureusement, le simple ajout d’une classe CSS au parent peut arranger ça.

  1. <style>
  2.    .parent {
  3.       border: 1px solid #000;
  4.       padding:5px;
  5.    }
  6.  
  7.    .flottant {
  8.       float: left;
  9.       width: 150px;
  10.       border:1px solid #F00;
  11.    }
  12.  
  13. .clearfix:after {
  14.     content: ".";
  15.     display: block;
  16.     height: 0;
  17.     clear: both;
  18.     visibility: hidden;
  19. }
  20.  
  21. .clearfix {display: inline-block;}
  22.  
  23. /* Hides from IE-mac */
  24. * html .clearfix {height: 1%;}
  25. .clearfix {display: block;}
  26. /* End hide from IE-mac */
  27. </style>
  28.  
  29. <div class="parent clearfix">
  30.    <div class="flottant">Avec le clearfix, cette colonne redimensionne bien le DIV qui la contient.</div>
  31.    Ce texte n’est plus le seul à redimenssionner le DIV parent mais il peut toujours le faire si il est plus grand que la colonne.
  32. </div>

Contexte de formatage

La notion de contexte est méconnue et pourtant rapidement indispensable. En CSS, le contrôle des positions avec float et clear est absolu, cela veut dire que quelque soit votre code HTML, définir un clear:left renverra l’élément à gauche du document et non seulement à gauche de son parent. Encore un exemple :

  1. <style>
  2.    .colonne-gauche {
  3.       float: left;
  4.       border:1px solid #F00;
  5.    }
  6.    .colonne-milieu {
  7.       border:1px solid #0F0;
  8.    }
  9.    .flottant{
  10.       float:left;
  11.       border:1px solid #00F;
  12.    }
  13.  
  14.    .clear{clear:left;}
  15. </style>
  16.  
  17. <div class="colonne-gauche">float: left;</div>
  18. <div class="colonne-milieu">
  19.    <div class="flottant">float: left;</div>
  20.    Contenu à la suite du flottant.
  21.    <div class="clear">
  22.       clear:left.
  23.    </div>
  24. </div>

Sans contexte de formatage

Pour définir qu’un élément devient la nouvelle limite, il suffit de lui appliquer un des styles suivants :

  • float:left ou float:right
  • position:absolute ou position:fixed
  • overflow:auto, overflow:hidden ou overflow:scroll
  • display:table-cell ou display:inline-block

Dans l’ultra majorité des cas, les overflow s’avèrent être le plus pratique. Si votre zone n’a pas de dimension fixe, les deux fonctionneront, si vous fixer les dimensions, à vous de choisir si en cas de dépassement vous préférez que le texte disparaisse (overflow:hidden) ou si vous préférez voir des scrollsbars (overflow:auto);

Malheureusement Internet Explorer ne l’entend pas comme ça. Mais heureusement, il suffit d’ajouter zoom:1.

  1. <style>
  2.    .colonne-gauche {
  3.       float: left;
  4.       border:1px solid #F00;
  5.    }
  6.  
  7.    .colonne-milieu {
  8.       overflow: auto;
  9.       zoom:1;
  10.       border:1px solid #0F0;
  11.    }
  12.  
  13.    .flottant{
  14.       float:left;
  15.       border:1px solid #00F;
  16.    }
  17.  
  18.    .clear{clear:left;}
  19. </style>
  20.  
  21. <div class="colonne-gauche">float: left;</div>
  22. <div class="colonne-milieu">
  23.    <div class="flottant">float: left;</div>
  24.    Contenu à la suite du flottant.
  25.    <div class="clear">
  26.       clear:left.
  27.    </div>
  28. </div>

Avec contexte de formatage

Conclusions

Voilà, avec ces quelques conseils et lignes de codes, vous devriez pouvoir aborder le CSS avec beaucoup plus de facilité.

Il existe surement d’autres techniques du genre et je serais ravi de les connaître. Donc n’hésitez pas à les laisser en commentaire, A plusieurs on devrait réussir à se rendre le CSS aussi simple qu’il est sensé l’être.

12 commentaires »

Gravatar

Commentaire de Costalfy

le 5 novembre 2007 à 22:28

Comment j’aimerais maîtriser le CSS :’( mais le temps commence à me manquer… Merci pour ces conseils précieux que je bookmark de ce pas :D

Gravatar

Commentaire de chris

le 5 novembre 2007 à 23:27

génial ton tuto car en effet les css sont un véritable cauchemard lorsqu’on ne les prépare pas correctement.

Gravatar

Commentaire de Olivier

le 5 novembre 2007 à 23:49

Pour ceux qui débutent, ce conseil pourra paraître évident, mais munissez-vous d’un Firebug (le plugin Firefox) qui fait des merveilles en live sur les CSS.

Gravatar

Commentaire de Tommy

le 6 novembre 2007 à 1:07

2-3 astuces que je ne connaissais pas, merci :)

Par contre, la balise correcte pour les styles, ce ne serait pas ?

Gravatar

Commentaire de jarodxxx

le 6 novembre 2007 à 12:24

Magnifique ! geniale , j’adore ….
et tres utiles

Gravatar

Commentaire de Jorge

le 6 novembre 2007 à 13:41

très bon !!

Gravatar

Pingback de Brève 10: CSS, Yahoo, gOS et OpenSocial

le 6 novembre 2007 à 23:51

[…] de cours CSS : Chris nous à trouvé tout un tas de cours sur les CSS … Les bonnes pratiques du CSS : Séverin nous explique les secrets d’un codage CSS efficace […]

Gravatar

Commentaire de toma

le 8 novembre 2007 à 11:24

Intéressant merci. Le lien sur http://www.w3.org/TR/CSS21/sample.html n’est juste pas bon :)
Ca pointe sur ça :

http://smashingcoding.com/wp-admin/Partir%20du%20bon%20pied%20avec%20les%20CSS

Gravatar

Commentaire de David, biologeek

le 8 novembre 2007 à 18:38

Article intéressant, est-ce que tu as essayé d’utiliser des reset.css tout fait ou même des frameworks comme blueprintcss ? Ça permet d’aller beaucoup plus vite à terme.

Gravatar

Commentaire de Séverin

le 8 novembre 2007 à 23:31

@toma : C’est corrigé, merci.

@David : J’ai rapidement jeté un coup d’oeil à quelques frameworks. Leur plus gros défaut est qu’ils sont adaptés à des designs précis. Et qu’au final ils demandent quand même de maitriser les clearfix et les contexte de formatage.

Gravatar

Commentaire de MeatShake

le 12 novembre 2007 à 10:20

Enfin un tuto simple, clair et précis sur la technique si indispensable du clearfix!

Je viens de découvrir ce blog aujourd’hui et je n’en suis pas peu fier!

Tout est très bon, continuez à nous abreuver de si bonnes ressources.

Gravatar

Commentaire de raidenx2

le 19 décembre 2007 à 2:32

très, très utile ce tuto…
merci bcp

Laisser un commentaire

Votre Nom

Votre E-mail (obligatoire mais ne sera pas publié)

Votre Site ou blog

Votre commentaire

Valid XHTML 1.0 Transitional