
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
-
html, address,
-
blockquote,
-
body, dd, div,
-
dl, dt, fieldset, form,
-
frame, frameset,
-
h1, h2, h3, h4,
-
h5, h6, noframes,
-
ol, p, ul, center,
-
dir, hr, menu, pre { display: block }
-
li { display: list-item }
-
head { display: none }
-
table { display: table }
-
tr { display: table-row }
-
thead { display: table-header-group }
-
tbody { display: table-row-group }
-
tfoot { display: table-footer-group }
-
col { display: table-column }
-
colgroup { display: table-column-group }
-
td, th { display: table-cell }
-
caption { display: table-caption }
-
th { font-weight: bolder; text-align: center }
-
caption { text-align: center }
-
body { margin: 8px }
-
h1 { font-size: 2em; margin: .67em 0 }
-
h2 { font-size: 1.5em; margin: .75em 0 }
-
h3 { font-size: 1.17em; margin: .83em 0 }
-
h4, p,
-
blockquote, ul,
-
fieldset, form,
-
ol, dl, dir,
-
menu { margin: 1.12em 0 }
-
h5 { font-size: .83em; margin: 1.5em 0 }
-
h6 { font-size: .75em; margin: 1.67em 0 }
-
h1, h2, h3, h4,
-
h5, h6, b,
-
strong { font-weight: bolder }
-
blockquote { margin-left: 40px; margin-right: 40px }
-
i, cite, em,
-
var, address { font-style: italic }
-
pre, tt, code,
-
kbd, samp { font-family: monospace }
-
pre { white-space: pre }
-
button, textarea,
-
input, select { display: inline-block }
-
big { font-size: 1.17em }
-
small, sub, sup { font-size: .83em }
-
sub { vertical-align: sub }
-
sup { vertical-align: super }
-
table { border-spacing: 2px; }
-
thead, tbody,
-
tfoot { vertical-align: middle }
-
td, th { vertical-align: inherit }
-
s, strike, del { text-decoration: line-through }
-
hr { border: 1px inset }
-
ol, ul, dir,
-
menu, dd { margin-left: 40px }
-
ol { list-style-type: decimal }
-
ol ul, ul ol,
-
ul ul, ol ol { margin-top: 0; margin-bottom: 0 }
-
u, ins { text-decoration: underline }
-
br:before { content: "A" }
-
:before, :after { white-space: pre-line }
-
center { text-align: center }
-
:link, :visited { text-decoration: underline }
-
:focus { outline: thin dotted invert }/* Begin bidirectionality settings (do not change) */
-
BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override }
-
BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override }
-
*[DIR="ltr"] { direction: ltr; unicode-bidi: embed }
-
*[DIR="rtl"] { direction: rtl; unicode-bidi: embed }@media print {
-
h1 { page-break-before: always }
-
h1, h2, h3,
-
h4, h5, h6 { page-break-after: avoid }
-
ul, ol, dl { page-break-before: avoid }
-
}
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 :
-
<style>
-
.parent {
-
border: 1px solid #000;
-
padding:5px;
-
}
-
.flottant {
-
float: left;
-
width: 150px;
-
border:1px solid #F00;
-
}
-
</style>
-
-
<div class="parent">
-
<div class="flottant">Cette colonne ne redimensionne pas correctement le DIV qui la contient.</div>
-
Ce texte est le seul à redimensionner le DIV qui le contient.
-
</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.
-
<style>
-
.parent {
-
border: 1px solid #000;
-
padding:5px;
-
}
-
-
.flottant {
-
float: left;
-
width: 150px;
-
border:1px solid #F00;
-
}
-
-
.clearfix:after {
-
content: ".";
-
display: block;
-
height: 0;
-
clear: both;
-
visibility: hidden;
-
}
-
-
.clearfix {display: inline-block;}
-
-
/* Hides from IE-mac */
-
* html .clearfix {height: 1%;}
-
.clearfix {display: block;}
-
/* End hide from IE-mac */
-
</style>
-
-
<div class="parent clearfix">
-
<div class="flottant">Avec le clearfix, cette colonne redimensionne bien le DIV qui la contient.</div>
-
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.
-
</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 :
-
<style>
-
.colonne-gauche {
-
float: left;
-
border:1px solid #F00;
-
}
-
.colonne-milieu {
-
border:1px solid #0F0;
-
}
-
.flottant{
-
float:left;
-
border:1px solid #00F;
-
}
-
-
.clear{clear:left;}
-
</style>
-
-
<div class="colonne-gauche">float: left;</div>
-
<div class="colonne-milieu">
-
<div class="flottant">float: left;</div>
-
Contenu à la suite du flottant.
-
<div class="clear">
-
clear:left.
-
</div>
-
</div>

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.
-
<style>
-
.colonne-gauche {
-
float: left;
-
border:1px solid #F00;
-
}
-
-
.colonne-milieu {
-
overflow: auto;
-
zoom:1;
-
border:1px solid #0F0;
-
}
-
-
.flottant{
-
float:left;
-
border:1px solid #00F;
-
}
-
-
.clear{clear:left;}
-
</style>
-
-
<div class="colonne-gauche">float: left;</div>
-
<div class="colonne-milieu">
-
<div class="flottant">float: left;</div>
-
Contenu à la suite du flottant.
-
<div class="clear">
-
clear:left.
-
</div>
-
</div>

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.





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