Bonjour à tous!

Comme promis un petit tutoriel pour la création de cadres avec bordures extensibles valide XHTML 1.1 et CSS. C’est cette méthode que j’utilise pour le design de mon cv en ligne.

  • Les images

Pour vous faciliter la tâche je vous mets les images utilisées pour ce tutoriel. Cependant rien ne vous empeche d’utiliser les votres! Donc clic droi -> enregistrer l’image sous puis renommez les.

  • B_vert.png B_vert.png
  • BL_vert.png BL_vert.png
  • BR_vert.png BR_vert.png
  • L_vert.png L_vert.png
  • R_vert.png R_vert.png
  • T_vert.png T_vert.png
  • TL_vert.png TL_vert.png
  • TR_vert.png TR_vert.png
  • Le XHTML

Le premier point est assez simple à comprendre : on veut que notre cadre soit extensible en hauteur et en largeur. Nous souhaitons en plus pouvoir mettre une image de bordure différente pour chaque cotés de notre cadre.

Nous allons imbriquer nos “div” les uns dans les autres. De cette manière les “div” les plus à l’exterieur s’ajusteront automatiquement à la taille du “div” le plus imbriqué.

  1.  
  2. <div id="L">
  3. <div id="R">
  4. <div id="T">
  5. <div id="B">
  6. Mon texte
  7. </div>
  8.  
  9. <!--**** Fermeture #B **** -->
  10. </div>
  11.  
  12. <!--**** Fermeture #T **** -->
  13. </div>
  14.  
  15. <!--**** Fermeture #R **** -->
  16. </div>
  17.  
  18. <!--**** Fermeture #L **** -->
  19.  

Vous pouvez voir que j’ai déjà placé des “id” dans mes “div” de manière a pouvoir appliquer des styles à chacun d’eux. “L” correspondant à “left” pour la bordure de gauche, “R” à “right” pour celle de droite, “T” à “top” pour celle du haut et enfin “B” à “bottom” pour celle du bas.

Attention : pensez à utiliser des “class” plutot que des “id” si vous utilisez plusieurs cadres du même type sur votre page.

A ce moment là nous avons une structure extensible pour laquelle nous pouvons mettre grace au CSS des bordures. Cependant il nous manque la possibilité de placer nos angles. En effet, le CSS nous permet de ne placer qu’une seule image grace à la propriété background-image:url(path/to/mon-image.png). Donc ici 4 “div” nous donne 4 bordures : il nous manque les 4 “div” correspondant aux 4 angles de notre cadre.

Voila ce que l’on obtient :

  1.  
  2. <div id="L">
  3. <div id="R">
  4. <div id="T">
  5. <div id="B">
  6. <div id="TL"> </div>
  7. <div id="TR"> </div>
  8. <div id="BL"> </div>
  9. <div id="BR"> </div>
  10.  
  11.                 Mon texte ici : Hello world
  12.             </div>
  13.  
  14. <!--**** Fermeture #B **** -->
  15.         </div>
  16.  
  17. <!--**** Fermeture #T **** -->
  18.     </div>
  19.  
  20. <!--**** Fermeture #R **** -->
  21. </div>
  22.  
  23. <!--**** Fermeture #L **** -->

Pas besoin de vous expliquer les “id“? :-) Allez je vous fait le premier : “TL” pour “top-left” ce qui correspond au coin supérieur gauche,etc…

Remarque 1 : nous n’imbriquons pas les “div” qui servent aux angles. Nous les placerons grace au CSS.

Remarque 2 : nous n’utilisons pas la balise img” pour les angles alors qu’il n’y à pas de répétitions. Pourquoi? Parce qu’il est important de séparer une image de contenu (une illustration pour votre texte par exemple, ou un logo) et une image de présentation ou de design (les images de nos bordures ou une image de fond).

  • Le CSS

Commençons par positionner les angles. On va les positionner en “absolute” dans le conteneur parent (ici : le div “id#B“).

  1. div{position:relative}
  2.  
  3. #TL{
  4. position:absolute;
  5. background:url(images/TL_vert.jpg) left top;
  6. background-repeat:no-repeat;
  7. top:0px;
  8. left:0px;
  9. height:50px;
  10. width:50px
  11. }
  12. #TR{
  13. position:absolute;
  14. background:url(images/TR_vert.jpg) top right;
  15. background-repeat:no-repeat;
  16. top:0px;
  17. right:0px;
  18. height:50px;
  19. width:50px
  20. }
  21. #BL{
  22. position:absolute;
  23. background:url(images/BL_vert.jpg) bottom left;
  24. background-repeat:no-repeat;
  25. bottom:0px;
  26. left:0px;
  27. height:50px;
  28. width:50px
  29. }
  30. #BR{
  31. position:absolute;
  32. background:url(images/BR_vert.jpg) bottom right;
  33. background-repeat:no-repeat;
  34. bottom:0px;
  35. right:0px;
  36. height:50px;
  37. width:50px
  38. }

Commentaire 1 : les arguments après l’url de l’image servent à positionner le background dans le bloc pour assurer le positionnement si le div est plus grand que l’image de l’angle.

Commentaire 2 : les top, left, right, bottom à “0px;” sont là pour placer les “div” pour les angles. Ne pas oublier qu’on les positionne en absolute!

Commentaire 3 :les height et width définissent la taille des “div” pour les angles. Vous devez ajuster ces valeurs en fonction de VOS images.

Plus que les bordures (ouf!). Comme d’habitude le source et on décortique après!

  1. .div{position:relative} // tout au début du css pour factoriser le code
  2.  
  3. #L{
  4. background:url(images/L_vert.jpg) repeat-y 0 0;
  5. background-position:center left
  6. }
  7. #R{
  8. background:url(images/R_vert.jpg) repeat-y 100% 0;
  9. background-position:center right
  10. }
  11. #T{
  12. background:url(images/T_vert.jpg) repeat-x 0 0
  13. }
  14. #B{
  15. background:url(images/B_vert.jpg) repeat-x 0 100%
  16. }

Commentaire 1 : attention au repeat-y et repeat-x suivant que l’on travaille sur une bordure horizontale ou verticale. A chaque fois on utilise une images de largeur très fine (par exemple 2px) à laquelle on appliquera un repeat. Cela nous donne la caractère extensible.

Commentaire 2 : le background-postion est une autre manière de positionner le fond dans le bloc (à comparer au commentaire 1 des angles).

Voila vous avez tout pour réussir vos cadres extensibles. Si vous avez des questions je reste bien sûr à votre entière disposition. Et n’hésitez pas à me laisser des commentaires, à me signaler des bugs, coquilles, etc etc…

Partagez cet article :
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • co.mments
  • De.lirio.us
  • Live
  • Ma.gnolia
  • Pownce
  • Scoopeo
  • Technorati
  • TwitThis
  • Wikio FR
  • e-mail
  • Wikio

Autres articles intéressants :

Articles les plus actifs :