Le Background

2 février 2010 par tominardi 4 commentaires »

Élément important de votre composition web, le background peut vite devenir un véritable casse tête. En effet, il faut conserver la lisibilité, penser à toutes les résolutions possibles, bref, garder une certaine souplesse.

Voici quelques pistes pour y voir plus clair.

Couleur unie

C’est, évidemment, l’option la plus simple. Un simple bout de CSS permet d’obtenir directement le rendu désiré.

body {
background-color:#ccc;
}

De plus, et contrairement à ce qu’on pourrait penser, c’est loin d’être un obstacle à l’obtention d’un joli site. Exemple sans doute le plus connu, Facebook. Le site n’est pas spécialement beau, mais il est sobre, efficace, on n’y trouve rien à redire.

MySpace n’est lui pas un joli site, mais il introduit la notion de blocs de couleurs. Le Background général de la page est gris-bleu, le contenu est dans des blocs de background blanc.

Dégradé

Le dégradé est un peu plus délicat à mettre en place, puisqu’il fait appel à un fichier image.

En effet, si CSS3 nous permet de réaliser des dégradés sans images, ceci n’est pas encore implémenté sur la plupart des navigateurs. Et, évidemment, on ne peut espérer profiter de ceci avant Internet Explorer 14.

L’intérêt du background en dégradé est proche de celui en couleur unie : sobriété, lisibilité. Le code CSS pourra ressembler à ça :

body {
background:url(‘imgs/background.png’) repeat-x #ccc top;
}

Nous indiquons d’abord l’url de l’image de fond, un dégradé de la taille que nous voulons, qui se répétera sur l’axe des abscisses. Nous indiquons, pour remplir le reste du fond, la couleur de sortie du background. L’attribut top positionnera le background en haut de l’écran, il est plus ou moins facultatif. En ajoutant l’attribut fixed, le background semblera fixé à l’écran, par rapport au contenu.

Imaginons que nous souhaitions faire un background en bas de l’écran, fixé au bord bas. Voici à quoi ressemblera le code :

body {
background:url(‘imgs/background.png’) repeat-x #ccc bottom fixed;
}

On fixe le background en bas, tout simplement.

Pour vous aider, voici un site qui permet de générer à la fois le dégradé, et aussi le code CSS correspondant. Bien pratique !

Ho, et un exemple de site utilisant un dégradé (quand il n’ont pas d’opération promo) : Jeuxvideo.com !

Mosaïque

Le principe du background en mosaïque est celui d’une image qui puisse se répéter en abscisse et en ordonnée à l’infini. Le gros défaut de ce type de background est la lisibilité : dans la grande majorité des cas, votre contenu devra être lui même contenu dans un bloc de couleur uni. C’est de toute façon souvent le cas.

Un cas rencontré souvent est celui des bandes de couleurs. Elles sont pratiques puisqu’elles restent sobres. Voici deux petits exemples de générateurs de bandes : Stripe Generator et Stripemania.

Des motifs ou des textures peuvent également être cool, tant que ça reste léger. Cette page permet de générer des background répétitifs qui vont bien.

A l’heure ou j’écris cet article, c’est un background en mosaïque qui décore m.icro.be.

Le code CSS pour ce type de background est bien commode :

body {
background:url(‘imgs/background.png’);
}

On a pas besoin de plus, même s’il peut être judicieux de définir une couleur unis proche des couleurs du motif, au cas ou le serveur n’arriverait pas à charger l’image.

Image Centrée

Un cas qui parait souvent très simple. Et pourtant.

Avant d’aller plus loin, je vous conseille de faire connaissance, si vous ne l’aviez pas déjà fait avant, avec la fonction CTRL+Molette de votre navigateur. En effet, pour comprendre le problème, il va être utile de dézoomer les quelques beaux exemples que je vais bientôt vous donner.

Car la problématique, dans ce cas présent, est que la résolution d’écran de vos visiteurs n’est pas toujours la même. Ainsi, vous ne pouvez vous fier à ce que vous voyez.

L’idéal est d’imaginer le background pour la plus grande résolution possible. Comme on doit faire attention à ne pas produire une image trop lourde, car il faut que vos visiteurs puissent la charger rapidement, il faut imaginer ce qu’il y aura au delà de ce background. Et la meilleure idée, à mon sens, est de partir sur un dégradé progressif sur les contours de l’image, pour finir donc sur une couleur unie. C’est pratique, ça passera sur toutes les résolutions, et ça fait donc joli.

Voici deux exemples d’utilisation de ce procédé, un bon et un moins bon :

usa.lagguitars.com utilise bien un dégradé progressif que la majorité des utilisateurs ne verra pas, mais qui ne gênera pas ceux qui auront un très grand écran et une très grande résolution.

A l’heure ou j’écris cette article, allocine a un fond promotionnel qui coupe net au delà de l’écran. Il est possible que le programme regarde à la volée la résolution de l’utilisateur, mais c’est une solution peu pratique et pas vraiment souple.

En ce qui concerne le code, il ressemblera à celui là :

body {
background:black url(‘imgs/background.jpg’) top center no-repeat fixed; }

Image flottante

Le cas de l’image flottante est particulier. Je l’illustrerais par deux exemples sur le même domaine.

La page d’accueil de Twitter possède une image bleue qui se répète en x, en haut, permettant ce petit effet plié tout simple et bien efficace.

Ma page personnelle sur Twitter, elle, possède un png à fond transparent positionné en un certain endroit de la page (par rapport au bord haut gauche).

Et c’est cet effet qui me plait particulièrement. Bien que le png à fond transparent ne soit pas supporté par IE6 (mais qui s’en soucie encore ?), il permet d’ajouter une touche de classe à une composition ayant un background uni. L’image peut être placée n’importe ou dans la page, ce qui laisse libre place à votre imagination.

Pour Terminer

Enfin, pour terminer ce petit article, quoi de mieux que l’exemple parfait ?

Si la perfection en matière de background existe, c’est sans doute le site Thinkgeek.

Observez le bien : En haut, un dégradé vers un gris sombre, non fixé. En bas, une image fixée, qui a la particularité d’être jolie, et qui se répète en x à l’infinie. Glissez jusqu’en bas de page. Je vous laisse admirer l’effet, puis étudier comment il a été réalisé. En bien bel exemple !

Pourquoi et comment faire une mise en page sans tableau par l’exemple #1

18 janvier 2010 par tominardi Pas de commentaires »

La mise en page de document par tableau était une technique très utilisée à la fin des années 90 et jusqu’au début des années 2000. Depuis, l’utilisation correcte des feuilles de styles associées à un web sémantique a été largement démocratisé.

1 Web Sémantique

1.1 Rappel

On distingue dans une application web plusieurs types de documents, principalement les 3 suivants :

  • Le fichier HTML est la description du document. Il n’a pas de valeur de style ou d’interaction. C’est un fichier texte balisé.
  • La feuille de style CSS décrit le comportement de style des divers éléments. Il est interprété par le moteur de rendu du navigateur.
  • Le programme Javascript est un programme écrit dans un langage interprété, qui va entre autre nous permettre de modifier le document.

Idéalement, ces 3 langages doivent être écrits dans des documents différents.

Appliquer ces règles facilite énormément la maintenance.

1.2 Balises HTML

HTML défini un nombre fini de balises (contrairement à XML). Ces balises HTML ont la particularité, tout comme dans XML, d’avoir un sens. C’est un sens sémantique. L’erreur courante est de penser que l’utilisation de ces balises donne un sens de style. Il n’en est rien.

En vérité, les navigateurs intègrent depuis leur création une feuille de style par défaut, feuille de style qui est souvent proche entre les éditeurs. C’est pour cela qu’on a tendance à penser qu’il y a un comportement graphique par défaut pour une balise donnée. Il faut savoir que l’utilisateur peut lui même modifier la feuille de style de son navigateur.

A l’origine, l’idée était que l’utilisateur fasse lui même sa feuille de style sur son poste client, et qu’Internet ne fournisse que des documents HTML. Ainsi, chacun aurait eu un web à son gout.

Il ne faut donc pas perdre de vue que les balises HTML n’ont qu’un sens sémantique : <p> signifie paragraphe. <ul> signifie liste non ordonnée.

Il n’y a pas (plus) de balise signifiant gras ou italique (les balises <b> et <i> sont dépréciées). A la place, il existe les balises <em> et <strong> qui signifie respectivement mise en valeuret mise en valeur plus importante, et donc le comportement par défaut est souvent italique et gras.

2 CSS

Le style d’un document est donc totalement géré par un langage propre, CSS. C’est lui qui va nous permettre de faire tout ce qu’on veut. L’apprentissage de ce langage fait l’objet de nombreux ouvrages.

3 Tableaux

Revenons en au HTML. Que signifie les balises tabletr et td, et toutes les autres de la même famille ? Et bien elles doivent être utilisées pour des tableaux. Plutôt simple finalement. Un tableau dans le sens tableau de valeur, avec son en-tête, son pied-de-page, etc.

Utiliser le tableau comme instrument de mise en page pose deux problèmes principaux : la sémantique, donc, mais aussi la compatibilité entre les navigateurs. Avoir le même rendu partout est beaucoup plus difficile avec les tableaux qu’avec les feuilles de style. De plus, si on désire faire de notre page HTML une application à part entière, grâce à Javascript, et que l’ont souhaite manipuler les éléments concernés, on bloquera sur ces fameux tableaux.

On pourra enfin noter la propreté du code. En effet, entre un

<table align="center"><tr><td rowspan="2"><img src="left.gif"></td><td>Menu</td><td rowspan="2"><img src="right.gif"></td></tr><tr><td>Contenu du site</td></tr></table>
Et un
<div id="ma_div"><div id="mon_menu"></div><div id="mon_contenu"></div></div>

par exemple, le choix est vite fait.

4 Exemple

Supposons que nous souhaitions obtenir le résultat suivant :

exemple liste

Exemple de liste en image

Une série d’image alignée à droite et pointant chacune vers un lien différent.

4.1 Mauvais code

Voici le code qui peut être fait à l’ancienne manière :

<div align="right">
  <table width="150" border="0">
    <tr>
      <td><div align="center"><a href="http://www.youtube.com/user/LAGguitarsUSA" target="_blank"><img src="private/interface/youtube.png" width="32" height="32" border="0" /></a></div></td>
      <td><div align="center"><a href="http://www.myspace.com/lagguitarsusa" target="_blank"><img src="private/interface/myspace.png" width="32" height="32" border="0" /></a></div></td>
      <td><div align="center"><a href="http://www.facebook.com/pages/LAG-Guitars-USA/237519112623" target="_blank"><img src="private/interface/facebook.png" width="32" height="32" border="0" /></a></div></td>
      <td><div align="center"><a href="http://twitter.com/LAGguitarsUSA" target="_blank"><img src="private/interface/twitter.png" width="32" height="32" border="0" /></a></div></td>
    </tr>
  </table>
</div>

On peut se poser plusieurs questions :

4.1.1 Pourquoi utiliser une div ?

En effet, rien ici ne justifie l’utilisation d’une div. Il faut rappeler qu’il existe sur les éléments HTML deux comportements de base : Inline et Block. Div est un élément bloc. Ici, la div est utilisée pour aligner le contenu à droite. C’est superflu. De même, des div sont utilisées pour centrer les images. C’est également superflu.

4.1.2 Pourquoi utiliser un tableau ?

Alors là… il n’y a simplement pas de réponse. Le tableau a une taille fixe, et il semble qu’elle serve à gérer l’espacement entre les images, qui sont centrées dans leurs cellules.

4.1.3 Quelles sont les autres erreurs dans ce bout de code ?

Les balises images ne possèdent pas l’attribut alt qui est pourtant obligatoire. De même, les attributs borderwidth ou height n’existent pas. L’attribut target n’existe pas non plus, il était lié aux iframes. Une ouverture dans une nouvelle fenêtre se fait via javascript (comportement de l’application)

4.2 Comment faut il penser l’application ?

La réflexion devrait plutôt ressembler à ceci :

4.2.1 Que souhaitons nous faire ?

Il faut se poser clairement la question : quel est l’objectif final ?

Nous souhaitons avoir une liste de liens images.

4.2.2 Traduite ça en HTML

Il existe une balise dont le sens est liste non-ordonnée. C’est donc celle ci qu’il va falloir utiliser. Chaque lien est un élément de liste. Cette liste est un élément de type en-ligne. Nous pourrons donc appliquer à la liste un alignement à droite.

4.2.3 Quels pourraient être les besoins supplémentaires éventuels

Supposons que nous ayons besoin de faire un traitement sur ces images, à tout hasard, un rollover. Il faut donc penser à identifier chacune des images afin de pouvoir effectuer un traitement Javascript dessus.

4.2.4 Le rendu HTML

<ul>
  <li>
    <a href="http://www.youtube.com/user/LAGguitarsUSA">
      <img src="private/interface/youtube.png" alt="youtube" />
    </a>
  </li>
  <li>
    <a href="http://www.myspace.com/lagguitarsusa">
      <img src="private/interface/myspace.png" alt="myspace" />
    </a>
  </li>
  <li>
    <a href="http://www.facebook.com/pages/LAG-Guitars-USA/237519112623">
      <img src="private/interface/facebook.png" alt="facebook" />
    </a>
  </li>
  <li>
    <a href="http://twitter.com/LAGguitarsUSA">
      <img src="private/interface/twitter.png" alt="twitter" />
    </a>
  </li>
</ul>

Vous pouvez apprécier la différence de lisibilité de code, et à quel point cela emmènera à faciliter la maintenance.

4.2.5 Le style

Normalement contenu dans une feuille de style, il peut arriver que nous n’ayons pas d’autre choix que d’insérer le style à l’aide de l’attribut style, qui contient du code CSS.

Ici, nous devons signifier à notre liste :

  • Qu’elle doit flotter à droite.
  • Que ses éléments ne doivent pas avoir de puce.

Une rapide recherche google nous donne la solution :

.list_florig {
float:right;
list-style-type:none;
}
.list_florig {
display:inline; //on veut avoir la liste sur une ligne.
}

Et voilà, c’est tout. Ce code suffit à réaliser tout ce dont nous avons besoin.

S’il subsiste des bordures aux images, dues au lien, ceci réglera le problème :

.list_florig img {
border:none;
}

Création de l’espace m.icro.be

15 janvier 2010 par tominardi Pas de commentaires »

Alors voilà, tout se met en place petit à petit. Je travaille depuis quelques mois sur un nouveau site, et plutôt que de travailler dans le vent et ne jamais pouvoir ré utiliser les acquis, j’ai voulu en faire un programme un peu plus général, prendre un peu d’abstraction.

Bref, je monte cet espace web dans le but d’avoir une base de développeur, sans autant en faire un espace perso. C’est un espace d’échange, on y trouve un wiki, un forum, et ici, il y a les commentaires.

Les projets devraient tous être libres et ouverts, et tout le monde pourra y participer.

Je songerais dans un second temps à me faire un véritable espace pro personnel.