Académique Documents
Professionnel Documents
Culture Documents
Version en ligne
<div id="menu">
<h2>Menu</h2>
<div id="centre">
Centre
</div>
<ul>
</ul>
</div>
#menu
width: 170px;
background-color: #FFFF99;
#menu h2
{
color: #0000EE;
text-align: center;
font-size: 15px;
#menu li
list-style-type: none;
list-style-position: inside;
#centre
height: 50px;
width: 50px;
margin: auto;
Voilà ; maintenant, quelques précisions : j'ai mis les border pour permettre de différencier les div.
Le style peut évidemment être modifié à votre guise, les seuls éléments à laisser, ce sont les
tailles de centre et le margin auto, ils permettent de faire un cercle autour du centre précisément.
Pour le moment, rien de bien exceptionnel, un simple menu.
Nous allons maintenant adapter le CSS pour l'animation.
Pour que l'animation Javascript fonctionne, il faut ajouter ceci à votre fichier CSS, cela permet de
donner une position absolue au bouton.
.item
position: absolute;
N'ajoutez pas class="item" à vos boutons ; si vous faites cela, les utilisateurs n'ayant pas activé
Javascript verront tous les boutons les uns sur les autres. Le script s'en chargera seul.
L'animation en Javascript
Maintenant que le CSS est fait, nous allons passer au Javascript, le plus compliqué intéressant.
Commençons par créer un fichier Javascript.
Faites simplement un fichier nommé "menu.js".
N'oubliez pas d'inclure le fichier javascript au xHTML.
Ajoutez simplement ceci entre les balises <head> et </head> :
var decalage = 0;
var nbBout;
var timer;
function menu(nb)
nbBout = nb;
var posX;
var posY;
var i = 1;
var item;
var b;
item.className = "item";
i++;
Je vais maintenant expliquer ce code, qui peut sembler compliqué à première vue.
Commençons par le paramètre : c'est en fait le nombre de boutons de votre menu, cela sert à
diviser 360, l'angle d'un cercle, par le nombre de boutons.
La variable angle est donc l'angle entre deux boutons.
nbBout prend alors le nombre de boutons du menu, cela permet de rendre le nombre de
boutons "public", je veux dire par là que toutes les fonctions pourront l'utiliser.
Les variables posX et posY sont utilisées pour déclarer la position du bouton.
Vous comprendrez par la suite.
La variable rayon, c'est la distance en pixels entre le centre du cercle et le bouton ; j'ai mis 60,
mais vous pouvez mettre plus si vous avez plus de boutons.
centreX et centreY sont égales aux positions du div centre.
La valeur de lItem est la largeur et la hauteur des boutons.
Pour le moment, ça fonctionne comme ça mais nous verrons une autre solution plus tard.
La variable i sert pour les boucles, c'est un peu ma variable passe-partout, nous l'utilisons pour le
numéro du bouton.
Passons à la boucle maintenant.
Nous faisons tourner la boucle jusqu'au moment où l'angle total est de 360°.
Les deux lignes suivantes sont les plus compliquées, non pas au niveau programmation mais
plutôt au niveau mathématique :
<body onload="menu(5);">
L'animation maintenant...
Nous allons maintenant passer à l'animation qui changera tout.
La fonction suivante est très ressemblante à la fonction menu(), je ne vais donc pas l'expliquer en
profondeur.
function anim()
decalage++;
var posX;
var posY;
var i = 1;
var item
var b;
i++;
Le seul changement, c'est l'utilisation de la variable c. Cette variable sert en fait à décaler les
boutons par rapport à la valeur de c.
La variable decalage prend 1 en plus à chaque passage de la fonction.
Vous verrez pourquoi par la suite.
Si vous essayez maintenant, vous n'aurez pas de changements par rapport à la dernière fois.
Vous devez en fait ajouter cette ligne à la fin de votre fichier :
timer = setInterval("anim()",50);
Améliorations sympas
La première amélioration que je vous propose est l'arrêt des boutons au passage de la souris : ce
n'est en fait pas très compliqué mais c'est quand même très pratique pour les utilisateurs.
Vous devez aussi avoir deux fonctions, l'une permettant d'arrêter l'animation et l'autre de
redémarrer l'animation après le passage de la souris.
Ces deux fonctions sont courtes.
Voici la première fonction, elle permet d'arrêter l'animation.
function stopanim()
clearInterval(timer);
function replayanim()
{
timer = setInterval("anim()",50);
<div id="menu">
Voilà, votre menu est maintenant animé et les boutons s'arrêtent si vous passez la souris sur les
boutons.
Si votre menu est un menu à icônes, il peut être bien de faire disparaître le texte lorsque la souris
n'est pas au-dessus du menu, en conservant juste les icônes, mais en gardant le texte caché.
C'est simple à faire et plutôt joli.
Voilà, vous avez maintenant un beau petit menu animé.
Si vous avez éprouvé des difficultés, veuillez le signaler par message privé, je ferai mon possible
pour vous aider et pour adapter mon tutoriel.
Les idées d'améliorations sont aussi les bienvenues, je n'hésiterai pas à les y ajouter.
Aller au menu
Aller au contenu
Aller à la recherche
actualités
tutoriels
forum
emploi
S'inscrire
Connexion
Tutoriels et astuces
Outils
Livres
Quiz
Rechercher
OK
design background adaptable étirable
Certains sites affichent une (grande) image de fond qui s'adapte à toutes les
dimensions de la fenêtre du navigateur, proportionnellement, sans la déformer. La
réalisation de ce genre de prouesse n'est pas si évidente techniquement,
contrairement à ce que l'on pourrait croire de prime abord.
Comment fait-on ? Nous allons présenter ici deux méthodes parmi celles qui sont
possibles : une entièrement en CSS , une autre basée sur jQuery.
Exemples
Pour avoir un aperçu de ce que l'on veut obtenir, voici quelques exemples utilisant ce
principe :
Simon & Comet
Flavors me
Piz'za-za
Le point commun de tous ces sites est la mise en avant de leur background : il est fixe
et c'est la pièce maîtresse de leur design. Le choix de celui-ci est donc
particulièrement réfléchi et soigné.
Le principe
Comme vous venez de le remarquer, ce n'est pas qu'une simple image de fond qui
s'adapte à la fenêtre : il n'y a aucune déformation, le ratio est toujours conservé
et lorsque la fenêtre est vraiment étroite le fond est recadré.
On est donc loin de ce résultat simpliste qui se contente d'étirer l'image à 100% de
son conteneur.
Format rectangulaire pour la plupart des écrans : 2000px * 1300px (par exemple)
Le poids de l'image doit être optimisé pour ne pas ralentir considérablement le
chargement
Sous Photoshop, après avoir créé votre image de fond (photo, création graphique…)
rendez-vous dans "Fichier" -> "Enregistrer pour le web…".
Dans la fenêtre qui vient d'apparaître, vous trouverez un curseur qui permet de faire
varier la qualité de l'image et donc son poids final. A vous de trouver le bon
compromis qualité/poids.
La méthode CSS3
Le code HTML
Rien de plus épuré : c'est une page html totalement vierge reliée à une feuille de style
CSS.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Fond extensible - version CSS</title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
</head>
<body>
...
</body>
</html>
Le code CSS
Nous allons simplement appliquer une image de fond sur la balise <html> (ou
<body> au choix), retirer les marges, et utiliser la propriété CSS3 background-size et sa
valeur cover. C'est tout !
html {
margin:0;
padding:0;
background: url(image/bg.jpg) no-repeat center fixed;
-webkit-background-size: cover; /* pour anciens Chrome et Safari */
background-size: cover; /* version standardisée */
}
Voir le résultat
Avantages :
Inconvénient :
Ne fonctionne pas sur Internet Explorer <= 8 et les très anciennes versions des
navigateurs tels que Firefox 3.0.
La méthode jQuery
Le code HTML
Nous allons partir du même document que la méthode précédente, en y ajoutant ces
élements :
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Fond extensible - version JQUERY</title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen">
</head>
<body>
<img src="image/bg.jpg" class="superbg" />
<script src="script/jquery.js" type="text/javascript"></script>
<script src="script/background.js" type="text/javascript"></script>
</body>
</html>
Le code CSS
Nous "fixons" et plaçons l'image pour qu'elle ne soit pas perturbée par le scroll
(défilement).
img.superbg {
position:fixed;
top:0;
left:0;
z-index:-1;
}
Le code jQuery
Tout est en place pour que jQuery puisse s'amuser avec cette image. Dans le principe,
nous allons créer une fonction qui va calculer le ratio de la fenêtre du navigateur pour
redimensionner l'image. Cette fonction sera appelée dès le chargement de la page et
à chaque redimensionnement de la fenêtre.
function redimensionnement(){
else {
$image.css({
'width': Math.ceil(over * body_height) + 'px',
'height': body_height + 'px',
'top': '0px',
'left': Math.abs((over * body_height) - body_width) / -2 + 'px'
});
}
}
$(document).ready(function(){
// Au chargement initial
redimensionnement();
});
Voir le résultat
Avantage
Inconvénients
Conclusion
Cette méthode peut apporter une touche plutôt sympa dans votre design. N'hésitez
pas à faire un tour sur cet article qui propose des méthodes supplémentaires.
Commentaires
Barbarossa
nxcom
MatTheCat
doc mcfly
lemotjuste
yagraph
#image-de-fond {
left: 0;
min-height: 100%;
position: fixed;
top: 0;
width: 100%;
z-index: -999;
}
devzonefr
Merci du tuto !
Je rajouterai qu'avec la librairie Modernizr, il doit être possible d'appliquer ce code
javascript en cas de non support de background-size.
if(!Modernizr.backgroundsize){
// ...
}
jonnefoy
Bravo pour ce petit trick, par contre sur Chrome 12 Windows, quand on actualise la
page l'effet n'est plus présent tant que l'on a pas redimensionné la fenêtre... =/
rigamarole
Mafrayss
Je souhaiterai améliorer ce code pour faire en sorte que si l'utilisateur visite mon site
sur iphone, le fond d'écran ne soit pas chargé (cela risquerait de consommer le forfait
de l'utilisateur en 3g...) Voici mon code css, qui lui utilise body (je ne sais pas
pourquoi celui-ci utilise html...
body {
margin:0;
padding:0;
background: url(fond.jpg) no-repeat center fixed;
-webkit-background-size: cover; /* pour Chrome et Safari */
-moz-background-size: cover; /* pour Firefox */
-o-background-size: cover; /* pour Opera */
background-size: cover; /* version standardisée */
}
La vraie question est de savoir si le fond d'écran est chargé ou juste non affiché sur
l'iphone...
Help !
Merci
misskitty
Raphael
@Mafrayss : l'image est forcément chargée d'abord puisque tu ne lui dis pas le
contraire.
Pour éviter de charge l'image, il faudrait indiquer une requête de type @media screen
and (min-device-width: 480px)...
Skoua
rigamarole
bleuindigo
Patidou
bleuindigo
pixel-carre
Super petit tuto très efficace. Par contre, petite question (très bête certainement) : j'ai
mis en place la version Jquery sur mon site, mais ça redimensionne toutes les
images... mêmes des petites vignettes.
Comment faire pour éviter cela svp ?
pixel-carre
karlwax
Dayom
Même sur Opera Desktop on voit apparaître des bandes blanches légères sur les
bords non ?
Bonjour, j'ai essayé en local avec easyphp avec css3 ça ne fonctionne pas et ça
destructure ma présentation et la méthode Jquery laisse juste apparaître l'image mais
mon corps de site se trouve repousser par le bas comme si le script js n'avait pas
prise sur l'image. Si quelqu'un à une idée pour le Jquery en ce qui me concerne je
serai prenant. Merci pour votre aide.
gaelle65
Bonjour,
ma question est sûrement stupide mais je suis débutante dans la programmation de
site web. J'aimerais beaucoup utiliser votre script mais malheureusement je ne sais
pas où insérer le Jquery.
jmlapam
Alkekange
Merci pour ce tutoriel. Je n'arrivais qu'à placer une image de fond qui se répétait
jusqu'à présent alors qu'il suffit de donner l'ordre "no-repeat center fixed; " !
Fraja
Nono94
Bonjour , merci pour tout tes tuto tous les plus fou les uns que les autre . Cependant
j'ai un petit souci je voudrais adapter un gif integrer à mon site (pas en arrière plan
mais juste après le header ) pour qu'il soit bien dimensionné aussi bien en version
mobile qu'en version bureau actuellement en version mobile il est parfait mais en
version bureau il n'est pas du tout adapter en faite il ne prend pas la largeur . Ou
même au pire si je peut le rendre visible uniquement sur mobile.
Commenter
Mot de passe :
Valide r
plan du site
contact
boutique
formations
agence web
Retourner en haut de page