<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>slDesign &#187; CSS3</title>
	<atom:link href="http://sldesign.openwab.com/tag/css3/feed/" rel="self" type="application/rss+xml" />
	<link>http://sldesign.openwab.com</link>
	<description>Web, Dév &#38; More...</description>
	<lastBuildDate>Wed, 13 Oct 2010 10:09:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Tutoriel HTML 5 : R&#233;aliser une lecteur vid&#233;o personnalis&#233;</title>
		<link>http://sldesign.openwab.com/2010/09/14/tutoriel-html-5-raliser-une-lecteur-vido-personnalis/</link>
		<comments>http://sldesign.openwab.com/2010/09/14/tutoriel-html-5-raliser-une-lecteur-vido-personnalis/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 11:43:19 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Vidéo]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/2010/09/14/tutoriel-html-5-raliser-une-lecteur-vido-personnalis/</guid>
		<description><![CDATA[Depuis la sortie de HTML5 il est possible d&#8217;insérer et de manipuler de nombreux médias dans vos pages WEB, vous pouvez entre autre insérer un lecteur vidéo. C’est un réel plus pour les développeurs Web. Nous allons donc voir comment intégrer un lecteur vidéo et comment le personnaliser afin d’obtenir le même design quelque soit [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F09%2F14%2Ftutoriel-html-5-raliser-une-lecteur-vido-personnalis%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F09%2F14%2Ftutoriel-html-5-raliser-une-lecteur-vido-personnalis%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="lecteur-html5-splash-screen" border="0" alt="lecteur-html5-splash-screen" align="left" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/lecteurhtml5splashscreen.jpg" width="276" height="219" /> Depuis la sortie de HTML5 il est possible d&#8217;insérer et de manipuler de nombreux médias dans vos pages WEB, vous pouvez entre autre insérer un lecteur vidéo. C’est un réel plus pour les développeurs Web.</p>
<p>Nous allons donc voir comment intégrer un lecteur vidéo et comment le personnaliser afin d’obtenir le même design quelque soit le navigateur.</p>
<p><strong>Information sur le document :</strong> </p>
<ul>
<li>Version : 0.1 </li>
<li>Date de publication : 14-09-2010 </li>
<li>Date de révision : NC </li>
</ul>
<p> <span id="more-950"></span><br />
<h2>Introduction</h2>
<p>Avant de commencer vous trouverez sur le site du &quot;W3C l&#8217;ensemble des informations portant sur la balise l&#8217;intégration de vidéo. Ces informations sont disponibles à l&#8217;adresse suivante : <a title="Site W3C - Spécification de la balise video [Ouverture dans une nouvelle fenêtre]" href="http://www.w3.org/TR/2008/WD-html5-20080610/video.html#video" target="_blank">http://www.w3.org/TR/2008/WD-html5-20080610/video.html#video</a> </p>
<p>Je tiens également à vous rappeler que l&#8217;intégration de vidéo via la balise &#8216;&lt;video&gt;&lt;/video&gt; n&#8217;est pas supporté par l&#8217;ensemble des navigateurs&#8230; et plus encore compliqué, les navigateurs ne supportent pas tous le même format de vidéo&#8230; </p>
<h3>Théorie&#8230;</h3>
<p>L&#8217;intégration de vidéo en HTML 5 se fait avec la balise &quot;&lt;video&gt;&quot;. Cette balise supporte différents attributs : </p>
<ul>
<li><strong>src :</strong>La source de la vidéo </li>
<li><strong>poster :</strong> La source d&#8217;une image qui sera affichée si le navigateur ne supporte pas la balise &quot;video&quot; </li>
<li><strong>autoplay :</strong>Démarrage automatique de la vidéo [Défaut = false] </li>
<li><strong>start :</strong> Début de la vidéo </li>
<li><strong>loopstart :</strong> Début de la lecture en boucle </li>
<li><strong>loopend :</strong> Fin de la lecture en boucle </li>
<li><strong>end :</strong> La vidéo est à la fin </li>
<li><strong>playcount :</strong> Nombre de fois à lire </li>
<li><strong>controls :</strong> Affiche ou non les contrôles </li>
<li><strong>width :</strong> Largeur du lecteur </li>
<li><strong>zq</strong> hauteur du lecteur </li>
</ul>
<p>Les attributs src, autoplay, start, loopstart, loopend, end, playcount, et sont des attributs commun à tous les éléments de type &quot;Médias&quot;. </p>
<h2>Les étapes</h2>
<h3>Etape 1 &#8211; Création du document de base</h3>
<p>Nous utiliserons ici une simple page Web : </p>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;title&gt;Mon lecteur Vidéo HTML5&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- Contenu Ici --&gt;
&lt;/body&gt;
&lt;/html&gt;
		</pre>
<h3>Etape 2 &#8211; Intégration de la vidéo</h3>
<p>Nous allons intégrer une vidéo simple dans un premier temps. Saisissez le code ci-dessous dans votre page WEB : </p>
<pre class="brush:html;first-line:8">&lt;video width=&quot;854&quot; height=&quot;480&quot; src=&quot;http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_480p_stereo.ogg&quot;&gt;
&lt;/video&gt;
		</pre>
<p>Le résultat est le suivant : </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1.1-base-lecteur" border="0" alt="1.1-base-lecteur" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/1.1baselecteur.jpg" width="629" height="386" /> </p>
<p>Si vous cliquez avec le bouton droit de votre souris sur le lecteur, vous verrez apparaître un menu contextuel</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1.2-firefox-contextuel-menu" border="0" alt="1.2-firefox-contextuel-menu" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/1.2firefoxcontextuelmenu.jpg" width="398" height="299" /> </p>
<h3>Etape 3 &#8211; Etendre le lecteur</h3>
<p>Nous allons maintenant étendre notre lecteur avec les attributs de base.</p>
<pre class="brush:html;first-line:8">	&lt;video
	width=&quot;854&quot;
	height=&quot;480&quot;
	src=&quot;http://mirror.bigbuckbunny.de/peach/bigbuckbunny_movies/big_buck_bunny_480p_stereo.ogg&quot;
	autoplay
	poster=&quot;img/poster.jpg&quot;
	controls &gt;
    &lt;/video&gt;
	</pre>
<p>Nous avons ici simplement ajouter les contrôles et une image et activé l&#8217;autoplay</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1.3-lecteur-avancé" border="0" alt="1.3-lecteur-avancé" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/1.3lecteuravanc.jpg" width="641" height="401" /> </p>
<h2>Création d’un lecteur vidéo HTML personnalisé:</h2>
<p>Comme vous venez de le voir l&#8217;intégration du player est très simple mais limitée. En effet, le design de votre player dépend du navigateur et ce dernier n’est pas forcement adapté au design de votre site. Heureusement, nous allons pouvoir utiliser javascript ; en effet, les navigateurs sont gérés côté client donc, c&#8217;est votre navigateur qui intègre ce player. Nous allons donc pouvoir utiliser javascript pour agrémenter notre player.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Player par défaut des différents navigateurs" border="0" alt="Player par défaut des différents navigateurs" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/videosplayerbrowsers.jpg" width="640" height="323" /> </p>
<p>Je vais dans cet article utiliser la bibliothèque jQuery que j&#8217;ai intégrée depuis Google Api. et j’ai également intégré la bibliothèque <a title="Site Web jQuery-ui [Nouvelle fenêtre]" href="http://jqueryui.com/" target="_blank">jQuery-ui</a>. Je vais également créer un Plugin <a title="Site Web jQuery [Nouvelle fenêtre]" href="http://jquery.com/" target="_blank">jQuery</a>. Le code ci-dessous vous montre l&#8217;initialisation jQuery ainsi que la liaison avec mon plugin.</p>
<p>J&#8217;ai également ajouté un dossier &quot;themes&quot; ainsi qu&#8217;un dossier &quot;themes/default/&quot; qui vont héberger nos fichiers de styles. Vous trouverez ci-dessous la structure de notre projet : </p>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
	&lt;title&gt;owPlayer - HTML 5 Web video Player&lt;/title&gt;
	&lt;link href=&quot;themes/default/jquery-ui.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;
	&lt;link href=&quot;themes/default/style.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-ui.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;owPlayer.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p class="info">Ce tutoriel n&#8217;a pas pour but de vous expliquer le développement d &#8216;un plugin jQuery. Malgré tout, j’ai essayé de commenter le plus précisément possible le code de cette extension. Si vous ne vous sentez pas à l&#8217;aise avec jQuery et le développement de plugin, voici quelques ressources :&#160; <br />- Tutoriel sur l’édition de plugin jQuery [<a title="Tutoriel Français sur la création de Plugin jQuery" href="http://www.lesintegristes.net/2008/01/14/jquery-codez-branche/" target="_blank">Lien</a>] </p>
<p>- Tutoriel en Anglais [<a title="Tutoriel sur la création de plugin jquery en anglais" href="http://www.sitepoint.com/blogs/2009/07/22/how-to-develop-a-jquery-plugin/" target="_blank">lien</a>] </p>
<p></p>
<p>&#160;<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1.4-structure-fichiers" border="0" alt="1.4-structure-fichiers" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/1.4structurefichiers.jpg" width="182" height="166" /> </p>
<p>&#160;</p>
<h3>Théorie</h3>
<p>Avant de commencer, il est utile de comprendre le fonctionnement et les attributs d’un lecteur vidéo HTML 5. Le lecteur HTML dépend de l’interface “Media Element”. Vous trouverez l’ensemble des informations relative à cette interface à l’adresse suivante : <a title="Documentation HTML 5 - W3C - media-element" href="http://www.w3.org/TR/2010/WD-html5-20100624/video.html#media-element" target="_blank">http://www.w3.org/TR/2010/WD-html5-20100624/video.html#media-element</a></p>
<p>Lorsque vous initialisez l’élément ‘&lt;video&gt;’ vous avez accès à différents attributs. </p>
<p><strong>Les éléments</strong> </p>
<ul>
<li><strong>readyState&#160; :</strong> Status de la video (Prete ou pas) </li>
<li><strong>seeking :</strong> Retourne un intervalle de temps ; ceci permet de gérer un statut d’avancement </li>
<li><strong>currentTime :</strong> Retourne la position actuelle </li>
<li><strong>startTime :</strong> Retourne la position de départ </li>
<li><strong>duration :</strong> Durée de la vidéo </li>
<li><strong>paused : </strong>Status de la vidéo en pause </li>
<li><strong>defaultPlaybackRate :</strong> Vitesse de lecture par défaut </li>
<li><strong>playbackRate :</strong> Vitesse de lecture </li>
<li><strong>TimeRange played :</strong> Retourne la durée jouée &#8211; intervalle </li>
<li><strong>TimeRange seekable :</strong> Temps restant &#8211; intervalle </li>
<li><strong>ended :</strong> Retourne vrai si la fin de la vidéo est atteinte </li>
<li><strong>autoplay :</strong> Lecture automatique </li>
<li><strong>loop :</strong> Relire la video </li>
<li><strong>play :</strong> Jouer la vidéo </li>
<li><strong>pause : </strong>Mettre la vidéo en pause </li>
<li><strong>controls :</strong> Affiche les contrôles </li>
<li><strong>volume :</strong> Volume du player </li>
<li><strong>muted :</strong> Eteindre le son </li>
</ul>
<p>Comme vous le voyez, nous disposons de différents attributs que nous allons pouvoir utiliser pour réaliser notre player. Javascript et dans notre cas jQuery vont nous permettre d’accéder et de manipuler nos données.</p>
<h3>Etape par étape : </h3>
<h4>Etape 1 &#8211; Initialisation du plugin jQuery</h4>
<p>La première étape consiste à initialiser notre plugin jQuery. J&#8217;ai decidé d&#8217;appeler ce plugin owPlayer </p>
<p class="info">Penser utiliser un nom unique à votre plugin afin d&#8217;assurer la compatibilité avec d&#8217;autres plugin </p>
<p>Le code ci-dessous vous montre l&#8217;initialisation du plugin : </p>
<pre class="brush:javascript">(function($) {

	$.fn.owPlayer = function(uri, options) {

		// Initialisation des options par defaut
		var defaults = {};

		// On étend les options avec les valeurs par défaut
		var options = $.extend(defaults, options);

		this.each(function(){
			$owPlayer = $(this);

		});
	};
})(jQuery);</pre>
<p>Ce code nous permet simplement d&#8217;initialiser notre plugin. Pour le moment la variable &#8216;default&#8217; permettant de définir nos options par défaut est vide mais nous le compléterons ultérieurement. </p>
<h4>Etape 2 &#8211; Chargement des feuilles de style </h4>
<p>Notre extension va nous permettre de changer de thème en le spécifiant simplement dans les options ; nous devons donc charger les feuilles de style dynamiquement. </p>
<pre class="brush:javascript;first-line:22">//Chargement des éléments de style
var cssThemeFile = options.theme;
$('&lt;link href=&quot;themes/'+options.theme+'/style.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;').appendTo('head');
$('&lt;link href=&quot;themes/'+options.theme+'/jquery-ui.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;').appendTo('head');</pre>
<h4>Etape 3 &#8211; Construction du wrapper et des contrôles</h4>
<p>Cette étape consiste simplement à construire notre interface. Nous aurions pû réaliser cette étape directement dans notre page HTML mais j&#8217;ai opté pour une génération interne à mon plugin. </p>
<p>Le code ci-dessous nous permet de créer un conteneur principal : </p>
<pre class="brush:javascript;first-line:">//Création du conteneur principal
$owPlayerWrapper = '&lt;div class=&quot;owPlayerWrapper&quot;&gt;&lt;/div&gt;';
$owPlayer.wrap($owPlayerWrapper);
$('.owPlayerWrapper').width(options.width);</pre>
<p>Le code ci-dessous nous permet de réaliser notre conteneur qui accueillera nos contrôles: </p>
<pre class="brush:javascript;first-line:33">//Création du panel de contôles
$owPlayerControls = '';
$owPlayerControls += '&lt;div class=&quot;owPlayerControls ui-widget-header&quot;&gt;&lt;/div&gt;';
$owPlayer.after($owPlayerControls);</pre>
<p>Ce code permet d&#8217;insérer un conteneur juste derrière notre balise &quot;&lt;video&gt; </p>
<p>Reste à insérer nos contrôles (boutons et autres éléments) à l&#8217;intérieur de ce conteneur </p>
<pre class="brush:javascript;first-line:42">// Création des contrôles
var $owPlayerControls = '';
$owPlayerControls += '&lt;a class=&quot;owPlayerControl owPlayerBtPlay ui-icon ui-icon-play&quot; href=&quot;#&quot; title=&quot;Play/Pause&quot;&gt;Play / Pause&lt;/a&gt;';
$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerSeeker&quot;&gt;&lt;/div&gt;';
$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerTimer&quot;&gt;00:00&lt;/div&gt;';
$owPlayerControls += '&lt;div class=&quot;owPlayerSoundBox&quot;&gt;&lt;a class=&quot;owPlayerControl owPlayerBtSound ui-icon ui-icon-volume-on&quot; href=&quot;#&quot; title=&quot;Mute&quot;&gt;Mute / Unmute&lt;/a&gt;';
$owPlayerControls += '&lt;a class=&quot;owPlayerControl owPlayerBtSoundTrigger ui-icon ui-icon-signal&quot; href=&quot;#&quot; title=&quot;Volume&quot;&gt;Volume&lt;/a&gt;';
$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerSoundSlider&quot;&gt;&lt;/div&gt;&lt;/div&gt;';
$($owPlayerControls).appendTo('.owPlayerControlsContener');</pre>
<p>Voici la liste de ces contrôles et leurs rôles : </p>
<ul>
<li><strong>owPlayerBtPlay :</strong> Bouton lecture / pause </li>
<li><strong>owPlayerSeeker :</strong> Il s&#8217;agit de la barre d&#8217;avancement </li>
<li><strong>owPlayerTimer :</strong> Le timer &quot;00:00&quot; </li>
<li><strong>owPlayerSoundBox : </strong>Conteneur pour la gestion du son </li>
<li><strong>owPlayerBtSound : </strong>Son on/off </li>
<li><strong>owPlayerSoundTrigger : </strong>Bouton déco pour l&#8217;affichage du slider pour le son </li>
<li><strong>owPlayerSoundSlider : </strong>Slider pour le son </li>
</ul>
<h4>Etape 4 &#8211; Bouton Play / Pause</h4>
<p>Maintenant que nous venons de réaliser nos différents contrôles, il faut leur assigner des fonctions. </p>
<p>Commencons par le bouton &quot;owPlayerBtPlay&quot; ; ce bouton va nous permettre de jouer l&#8217;animation ou de la mettre sur pause. Nous l&#8217;avons vu plus haut, ce qui déclanche la video est l&#8217;action &quot;play&quot;. </p>
<pre class="brush:javascript;first-line:53">	/** Bt Play */
		$('.owPlayerBtPlay').click(function() {
			if ($owPlayer.attr('paused') == false) {
				$owPlayer[0].pause();
				$(this).removeClass('ui-icon-play').addClass('ui-icon-pause');
			} else {
				$owPlayer[0].play();
				$(this).removeClass('ui-icon-pause').addClass('ui-icon-play');
			}
		});</pre>
<p>Quelques informations : Ce code permet de vérifier si le lecteur est en pause ou non. Le cas échéant, si le lecteur est en pause, on déclanche la lecture. </p>
<h4>Etape 5 &#8211; Gestion du son</h4>
<p>Nous allons maintenant nous occuper du son, nous avons deux éléments importants : </p>
<ul>
<li>Le bouton On / Off </li>
<li>Le slider permettant de régler le volume </li>
</ul>
<p>Dans un premier temps, occupons nous du bouton permettant d&#8217;activer / désactiver le son : </p>
<pre class="brush:javascript;first-line:114">	/** Bouton pour le son */
		//@TODO Récupérer la valeur du son lors du Mute pour le récupérer lors de l'unmute
		$('.owPlayerBtSound').click(function(){
			if($owPlayer.attr('muted') == true){
				//Activation du son - le slider passe à 50
				$('.owPlayerSoundSlider').slider('value', '50');
				$(this).removeClass('ui-icon-volume-off').addClass('ui-icon-volume-on');
			}else{
				//Desactivation du son
				$owPlayer.attr('muted', true);
				$('.owPlayerSoundSlider').slider('value', '0');
				$(this).removeClass('ui-icon-volume-on').addClass('ui-icon-volume-off');
			}
		});</pre>
<p>Cette action permet d&#8217;eteindre ou d&#8217;activer le son à travers le slider que nous verrons par la suite. </p>
<p>Le slider nous permet de gérer le volume du son. Pour réaliser ce slider, j&#8217;utilise l&#8217;extension “<a title="Documentation jQuery-ui slider [Nouvelle fenêtre]" href="http://jqueryui.com/demos/slider/" target="_blank">jQuery-ui &quot;slider()</a>&quot; </p>
<pre class="brush:javascript;first-line:130">	/** Slider pour le son */
	//Cache le slider à l'initialisation
	$('.owPlayerSoundSlider').hide();

	//Action pour afficher le slider
	$('.owPlayerSoundBox').hover(function() {
		$('.owPlayerSoundSlider').show();
	}, function() {
		$('.owPlayerSoundSlider').hide();
	});

	//Action du slider
	$('.owPlayerSoundSlider').slider( {
		orientation : &quot;vertical&quot;,
		value:0.50,
		range:&quot;min&quot;,
		max:1,
		step:0.05,
		animate:true,
		slide : function(e, ui) {
			$owPlayer.attr('muted', false);
			video_volume = ui.value;
			$owPlayer.attr('volume', ui.value);
		}
	});</pre>
<p>Il s&#8217;agit ici simplement de lier notre slider à l&#8217;attribut &quot;volume&quot; du player. </p>
<h4>Etape 6 &#8211; Gestion du seeker</h4>
<p>Deux éléments encore. Le timer qui nous permet d&#8217;afficher le temps écoulé et le slider nous permettant de naviguer au sein même de la vidéo </p>
<p>Gestion du timer : Il s&#8217;agit ici de récupérer le temps et la position de lecture ; nous devons pour cela utiliser un &quot;écouteur&quot; </p>
<pre class="brush:javascript;first-line:">	//Durée totale de la vidéo
		var video_duration = $owPlayer.attr('duration');

		//Fonction de convertion pour le timer
		var gTimeFormat=function(seconds){
			var m=Math.floor(seconds/60)&lt;10?&quot;0&quot;+Math.floor(seconds/60):Math.floor(seconds/60);
			var s=Math.floor(seconds-(m*60))&lt;10?&quot;0&quot;+Math.floor(seconds-(m*60)):Math.floor(seconds-(m*60));
			return m+&quot;:&quot;+s;
		};

		/** Gestion du Timer */
		var seekUpdate = function() {
			var currenttime = $owPlayer.attr('currentTime');
			if(!seeksliding) $('.owPlayerSeeker').slider('value', currenttime);
			$('.owPlayerTimer').text(gTimeFormat(currenttime));
		};

		//Mise à jour des informations
		$owPlayer.bind('timeupdate', seekUpdate);	

		//Affichage du texte
		$('.owPlayerTimer').text(' / '+gTimeFormat(video_duration));</pre>
<p>La fonction jQuery &quot;Bind&quot; permet de mettre en continu le timer de notre lecteur. Au par avant, j&#8217;ai juste créé une fonction &quot;gTimeFormat&quot; qui permet de convertir notre temps en minutes/secondes </p>
<p>Dernière étape, le slider pour la navigation au sein même de la vidéo. </p>
<pre class="brush:javascript;first-line:85">	/** Slider pour le seeker */

		//Initialise la variable du slider
		var seeksliding;

		var createSeek = function() {
			if($owPlayer.attr('readyState')) {
				var video_duration = $owPlayer.attr('duration');
				$('.owPlayerSeeker').slider({
					value: 0,
					step: 0.01,
					orientation: &quot;horizontal&quot;,
					range: &quot;min&quot;,
					max: video_duration,
					animate: true,
					slide: function(){
						seeksliding = true;
					},
					stop:function(e,ui){
						seeksliding = false;
						$owPlayer.attr(&quot;currentTime&quot;,ui.value);
					}
				});
			} else {
				setTimeout(createSeek, 150);
			}
		};

		createSeek();</pre>
<p>Cette fonction &quot;createSeek()&quot; permet de réaliser un slider pour naviguer au sein même de la vidéo. Lors de l&#8217;arrêt du slider, il y a une recherche de la position.</p>
<h4>Etape 7 &#8211; Appel du plugin</h4>
<p>La derniere étape consiste à initialiser notre plugin dans notre page HTML. L&#8217;opération est simple, un simple &quot;$([selecteur]).owPlayer([url],[options]);&quot; permet de réaliser cette opération. Vous aurez bine évidement pris soin d&#8217;intégrer le plugin et les différentes bibliothèques au par avant.</p>
<p>Le code ci-dessous vous montre cette intégration : </p>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
	&lt;title&gt;owPlayer - HTML 5 Web video Player&lt;/title&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-ui.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;owPlayer.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(document).ready(function(){
			$('.owPlayer').owPlayer('http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_stereo.ogg',{});
		});
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h3&gt;owPlayer::&lt;/h3&gt;
	&lt;video class=&quot;owPlayer&quot;&gt;&lt;/video&gt;
&lt;/body&gt;
&lt;/html&gt;
		</pre>
<h2>&#160;</h2>
<h2>Résultat final</h2>
<p>Cette capture vous montre le résultat final. Ce résultat et bien évidement le même sur Firefox, Chrome ou Safari (non testé sur les autres navigateurs)</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="lecteur-final" border="0" alt="lecteur-final" src="http://sldesign.openwab.com/wp-content/uploads/2010/09/lecteurfinal.jpg" width="649" height="388" /> </p>
<h2>Conclusion</h2>
<p>Vous venez de voir qu&#8217;il n&#8217;est pas si compliqué que cela de rendre votre lecteur vidéo complètement personnalisé. Malheureusement, la compatibilité n&#8217;est pas encore au rendez-vous et faudra encore pour quelques temps compter sur les lecteurs Flash&#8230;. </p>
<p>Cet exemple n&#8217;est qu&#8217;un bribe de ce qu&#8217;il est possible de réaliser, il est possible d&#8217;étendre ce lecteur en y insérant de nouvelles fonctions : </p>
<ul>
<li>Playliste </li>
<li>Changement de thèmes dynamiques </li>
<li>Navigation de Playliste –Next / Prev </li>
<li>Gestion des différents navigateurs </li>
</ul>
<p>Dans les prochaines versions, j’aurai l’occasion d’améliorer cette extension et de gérer ces différentes fonctions.</p>
<p class="info">N’hésitez pas à laisser vos commentaires / remarques pour les éventuelles questions afin de faire évoluer cet article.</p>
<p>Vous trouverez-ci dessous les codes complets de l&#8217;application ainsi qu&#8217;un fichier zip téléchargeable.</p>
<h5>Code javascript : owPlayer.js </h5>
<pre class="brush:javascript">(function($) {

	$.fn.owPlayer = function(uri, options) {

		// Initialisation des options par defaut
		var defaults = {
			autoplay : false,
			width : 854,
			height : 480,
			theme : 'default',
			poster : null
		};

		// On étend les options avec les valeurs par défaut
		var options = $.extend(defaults, options);

		this.each(function() {
			$owPlayer = $(this);

			// Chargement de la video
				$owPlayer.attr('src', uri);

				// Chargement des éléments de style
				var cssThemeFile = options.theme;
				$(
						'&lt;link href=&quot;themes/' + options.theme + '/style.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;')
						.appendTo('head');
				$(
						'&lt;link href=&quot;themes/' + options.theme + '/jquery-ui.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;')
						.appendTo('head');

				// Création du conteneur principal
				$owPlayerWrapper = '&lt;div class=&quot;owPlayerWrapper&quot;&gt;&lt;/div&gt;';
				$owPlayer.wrap($owPlayerWrapper);
				$('.owPlayerWrapper').width(options.width);

				// Création du panel de contôles
				$owPlayerControlsContener = '';
				$owPlayerControlsContener += '&lt;div class=&quot;owPlayerControlsContener ui-widget-header&quot;&gt;&lt;/div&gt;';
				$owPlayer.after($owPlayerControlsContener);

				// Création des contrôles
				var $owPlayerControls = '';
				$owPlayerControls += '&lt;a class=&quot;owPlayerControl owPlayerBtPlay ui-icon ui-icon-play&quot; href=&quot;#&quot; title=&quot;Play/Pause&quot;&gt;Play / Pause&lt;/a&gt;';
				$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerSeeker&quot;&gt;&lt;/div&gt;';
				$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerTimer&quot;&gt;00:00&lt;/div&gt;';
				$owPlayerControls += '&lt;div class=&quot;owPlayerSoundBox&quot;&gt;&lt;a class=&quot;owPlayerControl owPlayerBtSound ui-icon ui-icon-volume-on&quot; href=&quot;#&quot; title=&quot;Mute&quot;&gt;Mute / Unmute&lt;/a&gt;';
				$owPlayerControls += '&lt;a class=&quot;owPlayerControl owPlayerBtSoundTrigger ui-icon ui-icon-signal&quot; href=&quot;#&quot; title=&quot;Volume&quot;&gt;Volume&lt;/a&gt;';
				$owPlayerControls += '&lt;div class=&quot;owPlayerControl owPlayerSoundSlider&quot;&gt;&lt;/div&gt;&lt;/div&gt;';
				$($owPlayerControls).appendTo('.owPlayerControlsContener');

				// Action des boutons et initialisation des sliders
				/** Bt Play */
				$('.owPlayerBtPlay').click(
						function() {
							if ($owPlayer.attr('paused') == false) {
								$owPlayer[0].pause();
								$(this).removeClass('ui-icon-play').addClass(
										'ui-icon-pause');
							} else {
								$owPlayer[0].play();
								$(this).removeClass('ui-icon-pause').addClass(
										'ui-icon-play');
							}
						});

				// Durée totale de la vidéo
				var video_duration = $owPlayer.attr('duration');

				// Fonction de convertion pour le timer
				var gTimeFormat = function(seconds) {
					var m = Math.floor(seconds / 60) &lt; 10 ? &quot;0&quot;
							+ Math.floor(seconds / 60) : Math
							.floor(seconds / 60);
					var s = Math.floor(seconds - (m * 60)) &lt; 10 ? &quot;0&quot;
							+ Math.floor(seconds - (m * 60)) : Math
							.floor(seconds - (m * 60));
					return m + &quot;:&quot; + s;
				};

				/** Gestion du Timer */
				var seekUpdate = function() {
					var currenttime = $owPlayer.attr('currentTime');
					if (!seeksliding)
						$('.owPlayerSeeker').slider('value', currenttime);
					$('.owPlayerTimer').text(gTimeFormat(currenttime));
				};

				$owPlayer.bind('timeupdate', seekUpdate);

				$('.owPlayerTimer').text(' / ' + gTimeFormat(video_duration));

				/** Slider pour le seeker */

				// Initialise la variable du slider
				var seeksliding;

				var createSeek = function() {
					if ($owPlayer.attr('readyState')) {
						var video_duration = $owPlayer.attr('duration');
						$('.owPlayerSeeker').slider( {
							value : 0,
							step : 0.01,
							orientation : &quot;horizontal&quot;,
							range : &quot;min&quot;,
							max : video_duration,
							animate : true,
							slide : function() {
								seeksliding = true;
							},
							stop : function(e, ui) {
								seeksliding = false;
								$owPlayer.attr(&quot;currentTime&quot;, ui.value);
							}
						});
						// $video_controls.show();
					} else {
						setTimeout(createSeek, 150);
					}
				};

				createSeek();

				/** Bouton pour le son */
				// @TODO Récupérer la valeur du son lors du Mute pour le
				// récupérer lors de l'unmute
				$('.owPlayerBtSound').click(function() {
					if ($owPlayer.attr(&quot;muted&quot;) == true) {
						// Activation du son - le slider passe à 100
						$('.owPlayerSoundSlider').slider('value', '50');
						$(this).removeClass('ui-icon-volume-off').addClass(
								'ui-icon-volume-on');
					} else {
						// Desactivation du son
						$owPlayer.attr('muted', true);
						$('.owPlayerSoundSlider').slider('value', '0');
						$(this).removeClass('ui-icon-volume-on').addClass(
								'ui-icon-volume-off');
					}
				});

				/** Slider pour le son */
				$('.owPlayerSoundSlider').hide();
				$('.owPlayerSoundBox').hover(function() {
					$('.owPlayerSoundSlider').show();
				}, function() {
					$('.owPlayerSoundSlider').hide();
				});

				$('.owPlayerSoundSlider').slider( {
					orientation : &quot;vertical&quot;,
					value : 0.50,
					range : &quot;min&quot;,
					max : 1,
					step : 0.05,
					animate : true,
					slide : function(e, ui) {
						$owPlayer.attr('muted', false);
						video_volume = ui.value;
						$owPlayer.attr('volume', ui.value);
					}
				});

			});
	};
})(jQuery);	</pre>
<h5>Code HTML : index.html</h5>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
	&lt;title&gt;owPlayer - HTML 5 Web video Player&lt;/title&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-ui.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;owPlayer.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(document).ready(function(){
			$('.owPlayer').owPlayer('http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_stereo.ogg',{});
		});
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h3&gt;owPlayer::&lt;/h3&gt;
	&lt;video class=&quot;owPlayer&quot;&gt;&lt;/video&gt;
&lt;/body&gt;
&lt;/html&gt;
	</pre>
<h5>Code CSS : style.css</h5>
<pre class="brush:css">/**
 * owPlayer stylesheet file
 * Extend jQuery-ui stylesheet
 * @author slDesign
 * @version 0.1
 */

.owPlayer{
	margin:0;
	padding:0
}
.owPlayerControlsContener{
	height:24px;
	z-index:100;
	margin-top:-5px;
}

.ui-icon{
	border:1px solid #ccc;
	padding:1px;

}
.owPlayerControl{
	float:left;
	margin:1px 8px;
}

.owPlayerSeeker{
	width:500px;
	height:4px;
}

.owPlayerSoundBox *{
	margin:0;
}
.owPlayerSoundSlider{
	height:300px;
	float:left;
	margin-top:-90px;
}</pre>
<h3>&#160;</h3>
<h3>Remerciements : </h3>
<p>Merci à l’équipe de Big Buck Bunny pour la vidéo [<a title="Site Internet de Big Buck Bunny" href="http://www.bigbuckbunny.org/" target="_blank">site</a>] [<a title="Licence de diffusion et d&#39;utilisation de la vidéo Big Buck Bunny" href="http://www.bigbuckbunny.org/index.php/about/" target="_blank">licence</a>]. Cette vidéo a été réalisée sous Blender</p>
<p>Merci à <a href="http://dev.opera.com/author/36658182">Cristian-Ionut Colceriu</a> pour son article initial qui m’a aidé à rédigé celui-ci</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/09/14/tutoriel-html-5-raliser-une-lecteur-vido-personnalis/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
<enclosure url="http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_stereo.ogg" length="166825767" type="audio/ogg" />
		</item>
		<item>
		<title>Support HTML 5 &#8211; La solution pour gérer la compatibilté des navigateurs</title>
		<link>http://sldesign.openwab.com/2010/08/08/support-html-5-la-solution-pour-gerer-la-compatibilte-des-navigateurs/</link>
		<comments>http://sldesign.openwab.com/2010/08/08/support-html-5-la-solution-pour-gerer-la-compatibilte-des-navigateurs/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 07:26:21 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Compatibilité]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[navigateurs]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=802</guid>
		<description><![CDATA[HTML 5,  CSS 3 c&#8217;est bien beau, ça rend bien service et c&#8217;est sympa&#8230; malheureusement, tout n&#8217;est pas parfait au pays des rêves car de nombreux utilisateurs (vos lecteurs et utilisateurs) ne peuvent pas profiter de ces nouveaux attributs HTML et CSS. Il est important de penser &#171;&#160;utilisateurs&#160;&#187;. Les modifications apportées par HTML 5 et [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F08%2Fsupport-html-5-la-solution-pour-gerer-la-compatibilte-des-navigateurs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F08%2Fsupport-html-5-la-solution-pour-gerer-la-compatibilte-des-navigateurs%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-803" style="margin: 5px;" title="Navigateurs Web" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/navigateurs-splash-screen.jpg" alt="Navigateurs Web" width="276" height="161" />HTML 5,  CSS 3 c&#8217;est bien beau, ça rend bien service et c&#8217;est sympa&#8230; malheureusement, tout n&#8217;est pas parfait au pays des rêves car de nombreux utilisateurs (vos lecteurs et utilisateurs) ne peuvent pas profiter de ces nouveaux attributs HTML et CSS.</p>
<p>Il est important de penser &laquo;&nbsp;utilisateurs&nbsp;&raquo;. Les modifications apportées par HTML 5 et CSS 3 ne sont pas encore implémentées par tous les navigateurs. Ne pouvant pas forcer tout le monde à utiliser un seul navigateur, il faut s&#8217;efforcer de prendre en compte cet compatibilité.</p>
<p>Comment pouvons nous vérifier cette compatibilité, comment savoir quel navigateur est compatible avec tel attribut HTML ou CSS ? C&#8217;est ce que je vous propose de voir dans cet article.</p>
<p><span id="more-802"></span></p>
<hr class="clear_all" />
<h2>Solution Javascript</h2>
<p>Une des première solution consiste à utiliser javascript pour vérifier</p>
<pre class="brush:html">&lt;script&gt;
   alert( 'pattern' in document.createElement('input') ) // boolean;
&lt;/script&gt;
</pre>
<p>Si vous mettez ce simple script sur votre page, vous déclencherez une alerte &laquo;&nbsp;true&nbsp;&raquo; ou &laquo;&nbsp;false&nbsp;&raquo; selon les navigateurs.</p>
<div id="attachment_805" class="wp-caption alignnone" style="width: 532px"><img class="size-full wp-image-805" title="Alerte sur un navigateur supportant l'attribut Pattern" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/valid-navigateur.jpg" alt="Alerte sur un navigateur supportant l'attribut Pattern" width="522" height="212" /><p class="wp-caption-text">Alerte sur un navigateur supportant l&#39;attribut Pattern</p></div>
<div id="attachment_806" class="wp-caption alignnone" style="width: 388px"><img class="size-full wp-image-806" title="Alerte sur un navigateur ne supportant pas l'attribut Pattern - IE7" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/navigateur-non-compatible.jpg" alt="Alerte sur un navigateur ne supportant pas l'attribut Pattern" width="378" height="131" /><p class="wp-caption-text">Alerte sur un navigateur ne supportant pas l&#39;attribut Pattern</p></div>
<p>C&#8217;est un moyen simple mais assez contraignant de vérifier la compatibilité de tel ou tel attribut&#8230;</p>
<h2>Commentaires conditionnels</h2>
<p>Les commentaires conditionnels sont un mécanisme propre à Internet Explorer Windows, qui permettent d&#8217;inclure dans une page (X)HTML, de manière valide, du code qui ne sera lu et interprété que par Internet Explorer, ou par l&#8217;une ou l&#8217;autre de ses versions.</p>
<p>Techniquement, il s&#8217;agit de simples commentaires HTML, qui seront compris comme tels par la plupart des navigateurs. Cependant, le contenu de ces commentaires a une syntaxe spéciale, qui permet à Internet Explorer de savoir s&#8217;il doit interpréter le contenu du commentaire ou bien l&#8217;ignorer.</p>
<pre class="brush:html">&lt;!--[if gte IE 6]&gt; pour IE 6.0 et version plus récentes &lt;![endif]--&gt;

&lt;!--[if IE 5.0]&gt; pour IE 5.0 &lt;![endif]--&gt;

&lt;!--[if IE 5.5000]&gt; pour IE 5.5 &lt;![endif]--&gt;

&lt;!--[if IE 6]&gt; pour IE 6.0 &lt;![endif]--&gt;

&lt;!--[if IE 7]&gt; pour IE 7.0 &lt;![endif]--&gt;

&lt;!--[if IE 8]&gt; pour IE 8.0 &lt;![endif]--&gt;

&lt;!--[if gte IE 7]&gt; pour IE 7 et supérieur &lt;![endif]--&gt;

&lt;!--[if lt IE 7]&gt; pour IE inférieur à IE 7 &lt;![endif]--&gt;

&lt;!--[if lte IE 6]&gt; pour IE 5.0, IE 5.5 et IE 6.0 mais pas IE7.0 &lt;![endif]--&gt;
</pre>
<p>Cette technique a le mérite d&#8217;exister, surtout lorsque l&#8217;on connait les différences qu&#8217;il existe entre IE et les autres navigateurs mais, elle ne s&#8217;applique que à Internet Explorer et elle devient vite lourde à gérer&#8230;</p>
<h2>Class Modernizr</h2>
<p>Modernizr ajoute classes à l&#8217;élément</p>
<p>qui vous permettent de cibler les fonctionnalités du navigateur spécifique dans votre feuille de style. Vous n&#8217;avez pas réellement besoin d&#8217;écrire du Javascript pour l&#8217;utiliser.</p>
<h3>Initialisation :</h3>
<p>Il suffit de lier la bibliothèque dans votre doument HTML :</p>
<pre class="brush:html">&lt;head&gt;
	&lt;script type="text/javascript" src="medias/modernizr-1.5.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
</pre>
<p>Voici un exemple concret concernant l&#8217;attribut &laquo;&nbsp;border-radius&nbsp;&raquo; qui n&#8217;est pas disponible sur IE&#8230; Eh bien, avec Modernizr vous pouvez accomplir tout cela! La syntaxe est très intuitive, aussi:</p>
<h4>Code HTML</h4>
<pre class="brush:html">&lt;div class="radius"&gt;
	&lt;p&gt;&lt;span&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur mattis fermentum quam, ut feugiat dui ornare eu. Aenean vitae purus eget nunc sagittis sollicitudin eget a lorem.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>
<h4>Feuille de style CSS :</h4>
<pre class="brush:css">	.radius p span{
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	display:block;
	width:300px;
}

.borderradius p span{
	border:1px solid #cc3300;
}

.no-borderradius p span{
	border:1px solid #000;
}
</pre>
<p>L&#8217;opération est simple, vous déclarer une class &laquo;&nbsp;.[mon attribut]&nbsp;&raquo; ou &laquo;&nbsp;.no-[mon atribut]&nbsp;&raquo; dans votre feuille de style pour gérer les différentes compatibilité&#8230;</p>
<div id="attachment_807" class="wp-caption alignnone" style="width: 330px"><img class="size-full wp-image-807" title="Border Radius sous firefox" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/border-radius-firefox.jpg" alt="Border Radius sous firefox" width="320" height="98" /><p class="wp-caption-text">Border Radius sous firefox</p></div>
<div id="attachment_808" class="wp-caption alignnone" style="width: 334px"><img class="size-full wp-image-808" title="Border radius sous IE" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/border-radius-ie.jpg" alt="Border radius sous IE" width="324" height="97" /><p class="wp-caption-text">Border radius sous IE après mise en forme via &quot;.no-borderradius&quot;</p></div>
<p>Il est également possible d&#8217;appliquer des conditions sur des éléments javascript. Voici un exemple concernant &laquo;&nbsp;localStorage&nbsp;&raquo;</p>
<pre class="brush:js">&lt;script&gt;
	if (Modernizr.localstorage){
		// Utilisez tous les avantages de localStorage
	} else {
		// Passez par les Cookies
	}
&lt;/script&gt;
</pre>
<p>Cette bibliothèque ne répond surement pas à toutes les problématiques mais elle mérite que l&#8217;on s&#8217;y arrette. Elle est simple d&#8217;utilisation et bien documentée</p>
<p>Pour télécharger &laquo;&nbsp;Modernizr&nbsp;&raquo;, rendez-vous sur le site de l&#8217;auteur : <a title="Site de Modernizr" href="http://www.modernizr.com/" target="_blank">http://www.modernizr.com/</a>.</p>
<h2>Conclusion</h2>
<p>Il n&#8217;existe pas de solution parfaite, cela dit, vous disposez de différentes techniques qui vous permettrons d&#8217;adapter vos pages Web sur tous les navigateurs. Vous pouvez également orienter vos utilisateurs à utiliser un autre navigateur.</p>
<pre class="brush:html">&lt;script&gt;
 $(document).ready(function(){
 if ($.browser.msie) {
 $("#topMsg").html("Votre navigateur n'est pas compatible avec ce site, certaines fonctiionalités et styles seront desactivés. Changer pour &lt;a href=\"http://www.mozilla-europe.org/fr/firefox/\"&gt;firefox&lt;/a&gt; ou &lt;a href=\"http://www.apple.com/fr/safari/\"&gt;Safari&lt;/a&gt; ?");
 }
 });
 &lt;/script&gt;
-----
&lt;p id="topMsg"&gt;

 &lt;/p&gt;</pre>
<p>A bientôt&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/08/08/support-html-5-la-solution-pour-gerer-la-compatibilte-des-navigateurs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutoriel CSS : 3D Transform</title>
		<link>http://sldesign.openwab.com/2010/07/27/tutoriel-css-3d-transform/</link>
		<comments>http://sldesign.openwab.com/2010/07/27/tutoriel-css-3d-transform/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 07:36:25 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=690</guid>
		<description><![CDATA[Le version 3 de CSS nous a apporté son lot de nouveauté ; parmi les plus connues et plus utilisées on peut citer &#171;&#160;Corner radius&#160;&#187; ou encore les dégradés mais une nouvelle propriété très intéressante va vous permettre une encore plus grande liberté : la propriété &#171;&#160;transform&#160;&#187;. De la 3D en CSS ? Je n&#8217;irai [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F27%2Ftutoriel-css-3d-transform%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F27%2Ftutoriel-css-3d-transform%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-732" style="margin: 5px;" title="CSS Effet 3D - Cube Final" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube-final.jpg" alt="CSS Effet 3D - Cube Final" width="199" height="222" />Le version 3 de CSS nous a apporté son lot de nouveauté ; parmi les plus connues et plus utilisées on peut citer &laquo;&nbsp;Corner radius&nbsp;&raquo; ou encore les dégradés mais une nouvelle propriété très intéressante va vous permettre une encore plus grande liberté : la propriété &laquo;&nbsp;transform&nbsp;&raquo;.</p>
<p><em><strong>De la 3D en CSS ?</strong></em></p>
<p>Je n&#8217;irai pas jusqu&#8217;à dire qu&#8217;il s&#8217;agit de 3D mais plutot d&#8217;effet 3D au même titre que nous pouvons réaliser ces effets avec un logiciel de graphisme.</p>
<p>Nous verrons dans cet article comment réaliser un cube en effet 3D.<span id="more-690"></span></p>
<hr class="clear_all" />
<h1>I &#8211; Introduction</h1>
<p>Avant toute chose, il est nécessaire de prendre en compte la comptabilité. L&#8217;utilisation de la propriété CSS 3D transform n&#8217;est compatible qu&#8217;avec Firefox 3.5+ [<code>-moz-transform] (documentation)</code> et Safari 3.2+<code>[-webkit-transform](documentation).</code></p>
<p>Travaillant essentiellement sur Firefox, je ne m'aventurerai pas dans les détails de Safari mais il n'y a pas d'énormes différences...</p>
<h2>1°) Prérequis</h2>
<ul>
<li>Connaissances HTML / CSS</li>
<li>Vous vous souvenez de vos cours de géométrie ?</li>
<li>Un éditeur CSS / HTL</li>
</ul>
<h2>2°) Un peu de théorie...</h2>
<p>http://www.w3.org/TR/css3-3d-transforms/</p>
<p><strong>Rotation d'un objet : </strong>-moz-transform:  rotate(angle);</p>
<p>Exemple :</p>
<p>-moz-transform:  rotate(30);</p>
<pre><img class="size-full wp-image-691 " title="Propritét CSS Transform rotate - Rotation d'un div de 30°" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.2.1-css-transform-rotate.jpg" alt="Propritét CSS Transform rotate - Rotation d'un div de 30°" width="318" height="284" />
<div class="mceTemp">
<dl id="attachment_691" class="wp-caption alignnone" style="width: 328px;">
<dd class="wp-caption-dd">Figure 1.2.1 - Propritét CSS Transform rotate - Rotation d'un div de 30°</dd>
</dl>
</div>

<strong>Redimensionnement 2D axe X et Y d'un objet :</strong> -moz-transform:  scale(sx[, sy]);</pre>
<p>Si [sy] n'est pas renseigné, il aura la même valeur de [sx]</p>
<p>Modifier la perspective : -moz-transform: skew(ax,[ay]);</p>
<p>Permet de modifier l'axe de perspective, vous pouvez également utilsier skewX(deg) et skewY(deg) pour les utiliser indépendament.</p>
<p>Exemple : -moz-transform: skewY(30deg);</p>
<p>Parlons maintenant de la propriété "transform:matrix", il faut comprendre dans Matrix la traduction "matrice". Nous avons une forme géométrique qui est constituée de différents points [a,b,c,d] que nous pouvons manipuler.</p>
<pre>-moz-transform:  matrix(a, c, b, d, tx, ty)

/* Where a, b, c, d construit la transformation de la matrice
   ┌     ┐
   │ a b │
   │ c d │
   └     ┘
   and tx, ty are the translate values.  */
</pre>
<p>Quelques exemples :</p>
<p>.matrix {<br />
width: 200px;<br />
height: 100px;<br />
background: #f5f5f5;<br />
-moz-transform:matrix(1,0,0.6,1,15em,0);<br />
}</p>
<p>Rendu (figure 1.2.3)</p>
<div id="attachment_696" class="wp-caption alignnone" style="width: 303px"><img class="size-full wp-image-696 " title="Rendu de la proprité transform:matrix" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.2.3-css3D-matrix1.jpg" alt="Rendu de la proprité transform:matrix" width="293" height="113" /><p class="wp-caption-text">Figure 1.2.3 - Rendu de la proprité transform:matrix</p></div>
<p>Exemple 2 - Retournement d'objet</p>
<p>.matrix {<br />
width: 200px;<br />
height: 100px;<br />
background: #ff8000;<br />
-moz-transform:matrix(-1,0,1.2,1,20em,12em);<br />
}</p>
<p>Résultat (figure 1.2.4) :</p>
<div id="attachment_697" class="wp-caption alignnone" style="width: 391px"><img class="size-full wp-image-697" title="Résultat transform:matrix - retournement d'objet" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.2.4-css3D-matrix2.jpg" alt="Résultat transform:matrix - retournement d'objet" width="381" height="147" /><p class="wp-caption-text">Figure 1.2.4 - Résultat transform:matrix - retournement d&#39;objet</p></div>
<p>Exemple 3 : Reflexion</p>
<p>-moz-transform: matrix(1, 0, 0, -1, 0, 0);</p>
<div id="attachment_699" class="wp-caption alignnone" style="width: 218px"><img class="size-full wp-image-699" title="Exemple transform:matrix - Reflexion" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.2.5-css3D-reflexion-sample.jpg" alt="Exemple transform:matrix - Reflexion" width="208" height="388" /><p class="wp-caption-text">Figure 1.2.5 - Exemple transform:matrix - Reflexion</p></div>
<p>Autres exemples (non-shématisés) :</p>
<p>Rotation 90° sur la gauche : -moz-transform:matrix(0,-1,1,0,0,0);</p>
<h1>II - Création d'un cube 3D</h1>
<h2>1°) Code HTML de base</h2>
<p>Il faut tout d'abord créer 3 blocs qui nous permettrons de simuler notre cube. Ces 3 blocs seront encadrés par un div global.</p>
<p>Code HTML du cube</p>
<pre class="brush:html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;title&gt;Tutoriel CSS 3D&lt;/title&gt;
&lt;base href="http://localhost/tutos/tuts/css-3D/"/&gt;
&lt;link href="style.css" rel="stylesheet" type="text/css"/&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;div id="cube"&gt;
 &lt;div id="topSide"&gt;&lt;div&gt;Content&lt;/div&gt;&lt;/div&gt;
 &lt;div id="leftSide"&gt;&lt;div&gt;Content&lt;/div&gt;&lt;/div&gt;
 &lt;div id="rightSide"&gt;&lt;div&gt;Content&lt;/div&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>J'ai également créé un fichier css qui nous permettra de mettre en forme notre cube 3D. Dans un premier temps, j'ai simplement dissocier les blocs.</p>
<p>Code CSS fichier style.css</p>
<pre class="brush:css">#cube {
 position: relative;
 top: 200px;
 margin:0 0 230px 0;
}

#cube .cubeSide{
 height:200px;
 width:200px;
}
#topSide{
 background:#ff8000;
}
#leftSide{ background:#0080c0;}
#rightSide{background:#00ff40;}</pre>
<p>Voici le résultat obtenu (figure 2.1.1) :</p>
<div id="attachment_695" class="wp-caption alignnone" style="width: 216px"><img class="size-full wp-image-695" title="CSS Transform - Cube 3D Etape 1" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.1-css3D-etape1.jpg" alt="CSS Transform - Cube 3D Etape 1" width="206" height="575" /><p class="wp-caption-text">Figure 2.1.1  -CSS Transform - Cube 3D Etape 1</p></div>
<p>Maintenant, passons à des choses un peu plus sympa, nous allons appliquer notre propriété "transform" à notre cube :</p>
<pre class="brush:css;first-line:27">.leftFace {
 background: #ff8000;
 -moz-transform: skewY(30deg);
}

.rightFace {
 background: #800080;
 -moz-transform: skewY(-30deg);
}</pre>
<p>Nous avons appliqué ici une propriété "transform:skewY" permettant d'incliner nos div sur leurs axes Y donnant ainsi un effet de perspective.</p>
<div id="attachment_701" class="wp-caption alignnone" style="width: 221px"><img class="size-full wp-image-701" title="Transformation perspective sur l'axe Y - [transform:skewX(val)" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube_2.jpg" alt="Transformation perspective sur l'axe Y - [transform:skewX(val)" width="211" height="606" /><p class="wp-caption-text">Figure 2.1.2 - Transformation perspective sur l&#39;axe Y - [transform:skewX(val)</p></div>
<p>Positionner les DIV : Nous devons appliquer un positionnement "absolute" à l'ensemble de nos blocs afin que ceux-ci puissent êtres dissocié et placés indépendament (figure 2.1.3) .</p>
<p>Code CSS : Positionnement des DIV</p>
<pre class="brush:css;first-line:11">.topFace, .leftFace, .rightFace {
position: absolute;
}
</pre>
<div id="attachment_704" class="wp-caption alignnone" style="width: 222px"><img class="size-full wp-image-704" title="Positionnement absolute des blocs" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube_3.jpg" alt="Positionnement absolute des blocs" width="212" height="326" /><p class="wp-caption-text">Figure 2.1.3 - Positionnement absolute des blocs</p></div>
<p>Ensuite, nous allons positionner notre bloc right (figure 2.1.4). Il s'agit ici de décaller notre bloc de 200px sur la droite et vers le bas.</p>
<pre class="brush:css;first-line:34;">.rightFace {
 background: #800080;
 -moz-transform: skewY(-30deg);
 top: 200px;
 left: 200px;
}</pre>
<div id="attachment_705" class="wp-caption alignnone" style="width: 401px"><img class="size-full wp-image-705" title="Positionnement du bloc &quot;rightSide&quot;" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube_4.jpg" alt="Positionnement du bloc &quot;rightSide&quot;" width="391" height="442" /><p class="wp-caption-text">Figure 2.1.4 - Positionnement du bloc &quot;rightSide&quot;</p></div>
<p>Intéressons nous maintenant à la partie haute, c'est à dire le DIV topSide. C'est la partie la plus compliquée...</p>
<pre class="brush:css;first-line:15;">.topFace {
 -moz-transform: rotate(60deg);
 left: 100px;
 top: 42px;
}

.topFace div {
 background: #0080c0;
 -moz-transform: skewY(-30deg) scaleY(1.16);
}</pre>
<p>Quelques explications : Pour donner cet effet, il est nécessaire de pivoter notre face (-moz-transform: rotate(60deg);), puis nous appliquons une perspective et un redimenssionnement.</p>
<div id="attachment_731" class="wp-caption alignnone" style="width: 394px"><img class="size-full wp-image-731" title="CSS Effet 3D - Cube final" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube_6.jpg" alt="CSS Effet 3D - Cube final" width="384" height="472" /><p class="wp-caption-text">Figure 2.1.5 - CSS Effet 3D - Cube final</p></div>
<p>Avec un peu d'habillage, voici le résultat final :</p>
<div id="attachment_732" class="wp-caption alignnone" style="width: 429px"><img class="size-full wp-image-732" title="CSS Effet 3D - Cube Final" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/cube-final.jpg" alt="CSS Effet 3D - Cube Final" width="419" height="468" /><p class="wp-caption-text">Figure 2.1.5 - CSS Effet 3D - Cube Final</p></div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/07/27/tutoriel-css-3d-transform/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CSS3 &#8211; Quelques nouveautés en image</title>
		<link>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/</link>
		<comments>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 05:19:20 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=173</guid>
		<description><![CDATA[Je suis persuadé que lorsque vous développez un site WEB, vous avez un multitude de logiciels ouverts sur votre bureau ; encore aujourd&#8217;hui, j&#8217;utilise Gimp pour éditer des images aux coins arrondis. Bientôt, avec CSS3, nous allons pouvoir nous passer d&#8217;éditer certaines images et gagner un temps précieux dans le développement de nos sites. Dans [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F23%2Fcss3-quelques-nouveautes-en-image%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F23%2Fcss3-quelques-nouveautes-en-image%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/css3-article.jpg"><img class="alignleft size-full wp-image-146" title="Icone Article CSS3 Gradient" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/css3-article.jpg" alt="Icone de l'article sur CSS 3 et la gestion de dégradés" width="175" height="187" /></a>Je suis persuadé que lorsque vous développez un site WEB, vous avez un multitude de logiciels ouverts sur votre bureau ; encore aujourd&#8217;hui, j&#8217;utilise Gimp pour éditer des images aux coins arrondis. Bientôt, avec CSS3, nous allons pouvoir nous passer d&#8217;éditer certaines images et gagner un temps précieux dans le développement de nos sites.</p>
<p>Dans cet article, je vais vous montrer certaines techniques CSS3 qui vous permettront de changer vos méthodes de travail.</p>
<p><span id="more-173"></span></p>
<h3>CSS3?  What&#8217;s  that?! Qu&#8217;est-ce que c&#8217;est?!</h3>
<p>Je  suis sûr que vous avez entendu parler de CSS en général. CSS3 n&#8217;est pas très différent, en termes de  syntaxe, mais la puissance de CSS3 est beaucoup plus grande. Comme vous le verrez dans ces techniques comment il est possible redimensionner  dynamiquement des éléments, créer des ombres de texte,  et plus encore!</p>
<p>Voici la définition donnée par le W3C de CSS3 :</p>
<blockquote><p>CSS3 est le petit nouveau dans la famille feuille de style. Il offre de nouvelles possibilités intéressantes  pour créer un impact avec vos dessins, vous permet d&#8217;utiliser des  feuilles de style plus variés pour des effets de style beaucoup plus puissants et variés.</p></blockquote>
<h3>1°) Les coins arrondis en CSS3</h3>
<p>Alors qu&#8217;auparavant il était nécessaire de créer des coins arrondis avec des images ou encore utiliser javascript il est désormais possible de faire appel à CSS3 ; Voici le code et le résultat (figure 1) que vous obtiendrez avec la propriété &#8216;border-radius&#8217; :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box {
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 -moz-border-radius: 10px;
 -webkit-border-radius: 10px;
 border-radius: 10px;
}
&lt;/style&gt;

&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_174" class="wp-caption alignnone" style="width: 226px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/01-corner-radius.jpg"><img class="size-full wp-image-174" title="01-corner-radius" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/01-corner-radius.jpg" alt="Corner radius en CSS3" width="216" height="220" /></a><p class="wp-caption-text">Figure 1 - Résultat obtenu avec la propriété corner radius</p></div>
<p>Vous avez la possibilité de manipuler chacun des coins ; voici un exemple courbant les coins haut gauche et bas droit (figure 2) :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_2{
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 -moz-border-radius-topleft: 10px;
 -webkit-border-top-left-radius: 10px;
 -moz-border-radius-bottomright:10px;
 -webkit-border-bottom-right-radius:10px;
}
&lt;/style&gt;
&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_176" class="wp-caption alignnone" style="width: 176px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/02-corner-radius-exemple2.jpg"><img class="size-full wp-image-176" title="02-corner-radius-exemple2" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/02-corner-radius-exemple2.jpg" alt="Border-radius exemple 2" width="166" height="170" /></a><p class="wp-caption-text">Figure 2 - Coins arrondis sur deux angles</p></div>
<h3>2°) Les ombre sur div en CSS3</h3>
<p>Encore une fois CSS3 va nous faire gagner du temps ; fini les DIV superposés et décalés ou encore l&#8217;utilisation de javascript pour générer de belles ombres. La propriété &#8216;box-shadow&#8217; nous permet maintenant de réaliser ce type d&#8217;effet (Figure 3)</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_3 {
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 box-shadow: 10px 10px 5px #888;
 -moz-box-shadow: 10px 10px 5px #888;
 -webkit-box-shadow: 10px 10px 5px #888;
}
&lt;/style&gt;
&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_177" class="wp-caption alignnone" style="width: 191px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/03-ombre-protée.jpg"><img class="size-full wp-image-177" title="03-ombre-protée" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/03-ombre-protée.jpg" alt="Figure 3 - Ombre portée sur un DIV" width="181" height="178" /></a><p class="wp-caption-text">Figure 3 - Ombre portée sur un DIV</p></div>
<p><span style="text-decoration: underline;"><strong>Voici les propriétés de notre élément &#8216;box-shadow&#8217; :</strong></span></p>
<ol>
<li>Décalage horizontal : en négatif le décalage sera à gauche en positif, il sera à droite</li>
<li>Décalage vertical : négatif il sera vers le haut, positif il sera vers le bas</li>
<li>Rayon de flou : par défaut 0, c&#8217;est à dire aucun.</li>
</ol>
<h3>3°) Les ombres de texte en CSS3</h3>
<p>Voici le code vous pemettant d&#8217;implémenter ce nouvel effet CSS3 ; Vous verrez en figure 4 le résultat, la première ligne sert à montrer la différence entre un texte sans ombre et un second avec :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.not-shadowed{
 color:blue;
 font-size:20px;
}
.shadowed{
 color:blue;
 font-size:20px;
 text-shadow: 0 1px 0 #000;
}
&lt;/style&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor...&lt;/p&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor...&lt;/p&gt;</pre>
<div id="attachment_179" class="wp-caption alignnone" style="width: 679px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/04-text-shadow.jpg"><img class="size-full wp-image-179" title="04-text-shadow" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/04-text-shadow.jpg" alt="Résultat CSS3 Text shadow" width="669" height="77" /></a><p class="wp-caption-text">Figure 4 - Text shadow</p></div>
<p>Les propriétés sont les mêmes que pour un DIV.</p>
<h3>4°) Les polices de caractères embarquées :</h3>
<p>Nous en avons rêvé pendant longtemps, CSS3 l&#8217;a fait ! Il est maintenant possible de choisir votre police et de l&#8217;utiliser dans vos pages WEB &#8211; veillez toutefois à faire attention aux droits d&#8217;utilisation, toutes les polices ne sont pas libres de droit. Dans l&#8217;exemple suivant, j&#8217;ai opté pour la police &#8216;LIBRE&#8217;.</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
@font-face {
 font-family: 'libre';
 src: url('design/mido_igual.ttf');
}
.font {
 font-family: libre;
 font-size: 30px;
}
&lt;/style&gt;

&lt;p&gt;Lorem ipsum dolor sit amet...&lt;/p&gt;</pre>
<div id="attachment_181" class="wp-caption alignnone" style="width: 529px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/05-police-embarquée.jpg"><img class="size-full wp-image-181" title="05-police-embarquée" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/05-police-embarquée.jpg" alt="Figure 5 - CSS3 et police embarquée" width="519" height="50" /></a><p class="wp-caption-text">Figure 5 - CSS3 et police embarquée</p></div>
<h3>5°) CSS3 et opacité :</h3>
<p>Vous pouvez maintenant gérer l&#8217;opacité des éléments HTML dans vos feuilles de styles ; Il était déjà possible de réaliser cette opération avec les propriétés CSS &#8216;opacity&#8217; et &#8216;filter&#8217;. Maintenant la tache est plus facile comme vous pouvez le voir :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.main-box{
 background:red;
 height:200px;
 width:200px;
 border:1px solid #000;
}
.box_4 {
 height:100px;
 width:100px;
 opacity: .6;
 border:1px solid #000;
 background:#C3C3C3;
 float:left;
 margin-left:150px;
 margin-top:50px;
}
&lt;/style&gt;
&lt;div&gt;
 &lt;div&gt;
 &lt;!--CONTENT--&gt;
 &lt;/div&gt;
&lt;/div&gt;</pre>
<p>La figure 6 vous montre un carré gris dont l&#8217;opacité est fixée à 60% :</p>
<div id="attachment_182" class="wp-caption alignnone" style="width: 282px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/06-opacity.jpg"><img class="size-full wp-image-182" title="06-opacity" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/06-opacity.jpg" alt="Figure 6 - Opacité d'un élément " width="272" height="226" /></a><p class="wp-caption-text">Figure 6 - Opacité d&#39;un élément </p></div>
<h3>6°) Taille des &laquo;&nbsp;background&nbsp;&raquo;</h3>
<p>Il est maintenant possible d&#8217;utiliser la propriété &#8216;background-size&#8217; ; cette propriété sert à fixer la tailles des backgrounds ce qui était jusqu&#8217;alors impossible.</p>
<p>Voici un exemple avec une image dont la taille initiale est de 400px X 566px et ramenée à 50% d&#8217;un div dont les dimensions sont de 200px X 200px :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_5 {
 height:200px;
 width:200px;
 border:1px solid #000;
 background:#C3C3C3;
 background: #ccc url(medias/img_400x566.png) no-repeat;
 -moz-background-size: 50%; /* Mozilla */
 -webkit-background-size: 50%; /* Safari */
 -o-background-size: 50%; /* Opera */
 -khtml-background-size: 50%; /* Konqueror */
}
&lt;/style&gt;

&lt;div&gt;
 &lt;!--CONTENT--&gt;
&lt;/div&gt;</pre>
<div id="attachment_184" class="wp-caption alignnone" style="width: 227px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/07-background-size.jpg"><img class="size-full wp-image-184" title="07-background-size" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/07-background-size.jpg" alt="Figure 7 - Propriété Background-size" width="217" height="218" /></a><p class="wp-caption-text">Figure 7 - Propriété Background-size</p></div>
<p><strong>Attention !</strong> Le résultat ne sera pas le même sur tous les navigateurs ! Pour exemple, Mozilla conserve les proportions de votre image ce qui n&#8217;est pas le cas sur Chrome&#8230;</p>
<h3>7°) Propriétés columns :</h3>
<p>Voici une propriété qui vous permet de diviser un DIV en plusieurs colonnes. pour cela, il vous suffit d&#8217;en spécifier le nombre.</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.columns {
 width:600px;
 -moz-column-count: 2;
 -webkit-column-count: 2;
}
&lt;/style&gt;

&lt;div&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum accumsan mi. Maecenas id dui a magna tempor pretium. Quisque id enim. Proin id tortor. Curabitur sit amet enim vitae quam pharetra imperdiet. Nulla diam ante, pellentesque eu, vestibulum non, adipiscing nec, eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis a nunc. Donec non dui a velit pulvinar gravida. Nunc rutrum libero vel tortor. Duis sed mi eu metus tincidunt ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In purus lorem, aliquam ac, congue ac, vestibulum quis, felis. Aliquam non sapien.&lt;/p&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum accumsan mi. Maecenas id dui a magna tempor pretium. Quisque id enim. Proin id tortor. Curabitur sit amet enim vitae quam pharetra imperdiet. Nulla diam ante, pellentesque eu, vestibulum non, adipiscing nec, eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis a nunc. Donec non dui a velit pulvinar gravida. Nunc rutrum libero vel tortor. Duis sed mi eu metus tincidunt ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In purus lorem, aliquam ac, congue ac, vestibulum quis, felis. Aliquam non sapien.&lt;/p&gt;
&lt;/div&gt;</pre>
<div id="attachment_185" class="wp-caption alignnone" style="width: 638px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/08-columns.jpg"><img class="size-full wp-image-185" title="08-columns" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/08-columns.jpg" alt="Figure 8 - Propriété colonnes" width="628" height="313" /></a><p class="wp-caption-text">Figure 8 - Propriété colonnes</p></div>
<p>8°) Bordures &#8216;images&#8217;</p>
<p>Euh&#8230; Comment dire ? l&#8217;utilité de cette nouvelle propriété est contestable mais elle a le mérite d&#8217;exister. Donc, vous allez pouvoir créer des bordures à partir d&#8217;images.</p>
<p>Je ne vais pas m&#8217;étendre sur cette propriété donc passons tout de suite au code et au résultat :</p>
<pre class="brsh:html">&lt;style type="text/css"&gt;
.box_6 {
 height:200px;
 width:200px;
 border-width: 20px;
 -webkit-border-image: url(design/border2.png) 27 round;
 -moz-border-image: url(design/border2.png) 27 round;
 border-image: url(design/border2.png) 27 round;
}
&lt;/style&gt;

&lt;div&gt;
 &lt;!--CONTENT--&gt;
&lt;/div&gt;</pre>
<div id="attachment_186" class="wp-caption alignnone" style="width: 91px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/border2.png"><img class="size-full wp-image-186" title="border2" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/border2.png" alt="Figure 9 - Image source" width="81" height="81" /></a><p class="wp-caption-text">Figure 9 - Image source</p></div>
<div id="attachment_187" class="wp-caption alignnone" style="width: 267px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/09-image-border.jpg"><img class="size-full wp-image-187" title="09-image-border" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/09-image-border.jpg" alt="Figure 10 - Résultat d'une bordure 'image'" width="257" height="255" /></a><p class="wp-caption-text">Figure 10 - Résultat d&#39;une bordure &#39;image&#39;</p></div>
<h3>Les sélecteurs CSS3</h3>
<p>Je n&#8217;ai pas d&#8217;exemple imagé, sachez simplement que de nouveaux sélecteurs font leur arrivée dans vos feuilles de style ; Cela signifie que vous pourrez créer des design encore plus puissants et personnalisés.</p>
<p>Je vous renvoi à l&#8217;excellent article parru sur le site <a href="http://www.456bereastreet.com/archive/200601/css_3_selectors_explained/">www.456bereastreet.com</a></p>
<p>Je réaliserai un post complet à ce sujet dans les jours qui viennent.</p>
<h3>Conclusion</h3>
<p><span onmouseover="_tipon(this)" onmouseout="_tipoff()">Vous venez de consulter quelques techniques CSS qui vous faciliteront le développement de vos interfaces et design WEB.</span> <span onmouseover="_tipon(this)" onmouseout="_tipoff()">Malheureusement, il faudra encore attendre un peu avant que ceci soit réalisable sur tous les navigateurs&#8230; alors pensez utilisateurs et dites vous bien que de nombreuses personnes n&#8217;aurons pas accès à toues ces propriétés.<br />
</span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 6503px; width: 1px; height: 1px; overflow: hidden;">
<table>
<caption><span onmouseover="_tipon(this)" onmouseout="_tipoff()">Vue d&#8217;ensemble de la syntaxe CSS 3 Sélecteur</span> </caption>
<thead>
<tr>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Selector type</span> Sélecteur de type</span></th>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Pattern</span> Modèle</span></th>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Description</span> <a href="http://translate.googleusercontent.com/translate_c?hl=fr&amp;sl=en&amp;tl=fr&amp;u=http://www.w3.org/TR/2005/WD-css3-selectors-20051215/&amp;rurl=translate.google.fr&amp;usg=ALkJrhio3IcrAl3wjSeyIm2tFahr3fR9IQ">Description</a></span></th>
</tr>
</thead>
<tbody>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att^=”val”]</span> E [^ att = "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value begins with “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de  l&#8217;attribut commence par &laquo;&nbsp;val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att$=”val”]</span> E [att $ = "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value ends with “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de  l&#8217;attribut se termine par &laquo;&nbsp;Val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att*=”val”]</span> E [att *= "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value contains the  substring “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de l&#8217;attribut contient la chaîne &laquo;&nbsp;val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:root</span> E: root</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches the document&#8217;s root element.</span> Correspondances élément racine du document.</span> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">In  HTML, the root element is always the HTML element.</span> En HTML,  l&#8217;élément racine est toujours l&#8217;élément HTML.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-child(n)</span> E: nth-child (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the n-th child of  its parent.</span> Correspond à tout élément E qui est l&#8217;enfant n-ième  de son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-last-child(n)</span> E: nth-last-child (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the n-th child of  its parent, counting from the last child.</span> Correspond à tout  élément E qui est l&#8217;enfant n-ième de sa mère, à compter du dernier  enfant.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-of-type(n)</span> E: nth-of-type (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the n-th sibling of its type.</span> Correspond à  tout élément E qui est le frère n-ème de sa catégorie.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-last-of-type(n)</span> E: nth-last-of-type (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the n-th sibling of its type, counting from the  last sibling.</span> Correspond à tout élément E qui est le frère n-ème  de sa catégorie, à compter de la fratrie dernier.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:last-child</span> E: last-child</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the last child of  its parent.</span> Correspond à tout élément E qui est le dernier enfant  de son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:first-of-type</span> E: first-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the first sibling  of its type.</span> Correspond à tout élément E qui est le premier frère  de son type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:last-of-type</span> E: last-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the last sibling of its type.</span> Correspond à  tout élément E qui est le frère dernière de ce type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:only-child</span> E: que l&#8217;enfant</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the only child of  its parent.</span> Correspond à tout élément E qui est le seul enfant de  son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:only-of-type</span> E: only-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the only sibling of its type.</span> Correspond à  tout élément E qui est le seul frère de son type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:empty</span> E: vide</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that has no children  (including text nodes).</span> Correspond à tout élément E qui n&#8217;a pas  d&#8217;enfants (y compris les nœuds de texte).</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Target  pseudo-class</span> Objectif pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:target</span> E: l&#8217;objectif</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches an E element that is the target of the  referring URL.</span> Correspond à un élément E qui est la cible de  l&#8217;URL de renvoi.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:enabled</span> E: activé</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any user interface element (form  control) E that is enabled.</span> Correspond à tout élément d&#8217;interface  utilisateur (contrôle de formulaire) E qui est activé.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:disabled</span> E: personnes handicapées</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any user interface element (form control) E that is disabled.</span> Correspond à tout élément d&#8217;interface utilisateur (contrôle de  formulaire) E qui est désactivé.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:checked</span> E: checked</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any user interface element (form  control) E that is checked.</span> Correspond à tout élément d&#8217;interface  utilisateur (contrôle de formulaire) E qui est vérifiée.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element fragments pseudo-element</span> élément d&#8217;interface fragments  pseudo-élément</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E::selection</span> E:: sélection</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  the portion of an element E that is currently selected or highlighted  by the user.</span> Correspond à la partie d&#8217;un élément E qui est  actuellement sélectionné ou mis en valeur par l&#8217;utilisateur.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Negation  pseudo-class</span> Négation pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:not(s)</span> E: pas (s)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that does not match the  simple selector s.</span> Correspond à tout élément E qui ne correspond  pas à la simple sélection de l&#8217;art</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">General  sibling combinator</span> Générale frère combinateur</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E ~ F</span> E ~ F</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any F element that is preceded by an E  element.</span> Correspond à tout élément F qui est précédé par un  élément E.</span></td>
</tr>
</tbody>
</table>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

