ChezSimay

Aller au contenu | Aller au menu | Aller à la recherche

samedi, mai 3 2008

les astuces de l'intégrateur : avoir toujours ses styles à jour même avec un site en production

Lorsque vous intégrer un site, la différence que vous avez par rapport aux développeurs c'est que vous travaillez sur des fichiers qui s'exécutent coté client. Et donc cela implique souvent de travailler sans le cache ou bien de vider le cache de son navigateur régulièrement, lorsque le site est en cours de développement cela ne pose pas de soucis. Par contre lorsque le site est en production, il arrive parfois que quelques erreurs d'intégration passent quand on met le site en production... Malheureusement on a pas la main sur le poste des utilisateurs, du coup si on met nos styles à jour, il est probable que ces derniers soient dans le cache du navigateur, et donc il ne profite pas des dernières modifications de styles jusqu'à ce que son cache se vide.

Il existe donc la possibilité de modifier l'appel à la feuille de style en lui passant un numéro de version par exemple, dans ce cas le nom du ficher à changé et du coup le client n'y voit que du feu car son navigateur va chercher la dernière version de la feuille de style :

<link rel="stylesheet" type="text/css" href="style/iesucks.css?v1" />

Billet librement inspiré de l'excellent article sur CSS-tricks

dimanche, avril 13 2008

Utiliser des PNG24 avec des inputs type="image"

Certains d'entre vous (voir beaucoup) ont déjà utilisé des images au format PNG pour pouvoir bénéficier de la qualité et surtout de la transparence alpha de ce format d'images. Malheureusement ce format d'images est mal interprété par IE6, c'est à dire que sera l'image sera bien affichée, mais les endroits ou se trouvent la transparence ne seront pas transparents, heureusement, pour nous les intégrateurs, il existe la possibilité d'ajouter un petit script qui permet de faire en sorte que les images s'affichent bien sur Internet Explorer, attention ce script en fonctionne que pour les images insérées dans le flux HTML, pour les images insérées en CSS, allez faire un petit tour du coté de chez alsacréations.

Si on regarde de plus prêt le javascript utilisé pour faire en sorte que les images PNG insérées dans le flux s'affichent bien, cela ne fonctionne que pour les images insérées via le tag <img ... src="" ... />, Malheureusement, dans un projet récent j'ai du utiliser des images en PNG d'une autre façon, en les insérant comme des boutons de formulaires via le tag <input type="image" src="" ... />, et de cette façon le script que j'utilisai jusqu'à présent, je l'ai donc modifié en conséquence et je me dit que cela pourrait bien en intéresser certains :

var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])
if ((version >= 5.5) && (document.body.filters)){
	for(var i=0; i<document.images.length; i++){
		var img = document.images[i]
		var imgName = img.src.toUpperCase()
		if (imgName.substring(imgName.length-3, imgName.length) == "PNG"){
			var imgID = (img.id) ? "id='" + img.id + "' " : ""
			var imgClass = (img.className) ? "class='" + img.className + "' " : ""
			var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
			var imgStyle = "display:inline-block;" + img.style.cssText 
			if (img.align == "left") imgStyle = "float:left;" + imgStyle
			if (img.align == "right") imgStyle = "float:right;" + imgStyle
			if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
			var strNewHTML = "<span " + imgID + imgClass + imgTitle
			+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
			+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
			+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
			img.outerHTML = strNewHTML
			i = i-1
		}
	}
	var formulaires = document.getElementsByTagName('form');
	for(var j=0; j<formulaires.length; j++){	
		for(var i=0; i<formulaires[j].getElementsByTagName('input').length; i++){
			var bouton = formulaires[j].getElementsByTagName('input')[i];
			if(bouton.src){
				var boutonName = bouton.src.toUpperCase();
				if (boutonName.substring(boutonName.length-3, boutonName.length) == "PNG") {
					var boutonID = (bouton.id) ? "id='" + bouton.id + "'" : "''";
					var boutonTitle = (bouton.title) ? "title='" + bouton.title + "' " : "title='" + bouton.alt + "' ";
					var boutonStyle = "" + bouton.style.cssText ;
					if(bouton.className){
						var boutonClass = "class='" + bouton.className + "' input_image";
					}else{
						var boutonClass = "' input_image'";
					}
					if (bouton.align == "left") boutonStyle = "float:left;" + boutonStyle;
					if (bouton.align == "right") boutonStyle = "float:right;" + boutonStyle;   
					if (bouton.parentElement.href) boutonStyle = "cursor:hand;" + boutonStyle;
					var strNewHTML = "<a href=\"#\" " + boutonClass + boutonID + boutonTitle + " style=\"" + "width:" + bouton.width + "px; height:" + bouton.height + "px;" + boutonStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + bouton.src + "\', sizingMethod='scale');\" onclick=\"envoyerForm("+j+");\" >&nbsp;</a>" ;
					bouton.outerHTML = strNewHTML;
					i = i-1;
				}
			}
		}
	 }
}

function envoyerForm(num){
	document.forms[num].submit();
}

Évidement, il y a certaines restrictions, il faut que les boutons se trouvent entre des balises form, et que le formulaire ai un fonctionnement normal, en gros ça veut dire que je ne sais pas trop comment ça se passe si le formulaire est envoyé via AJAX mais bon je pense qu'un test sur l'argument onclick du bouton et si il est présent je le reprend sinon j'envoie le formulaire normalement (si une âme charitable passe par la...)

mercredi, mars 19 2008

les astuces de l'intégrateur : simuler un paragraphe limité en caractères

Nous allons voir comment simuler le fait qu'un paragraphe est limité en nombre de caractères, il est vrai qu'avec l'utilisation de certains CMS, il n'est pas toujours évident de limiter en un certain nombre de caractères. Il existe pourtant une astuce qui permet d'afficher uniquement un certain nombre de lignes. Il suffit d'appliquer une hauteur à un bloc puis une hauteur de ligne (line-height) qui est un multiple de la hauteur du bloc (ce multiple va définir le nombre de lignes affichées). Enfin, on va appliquer, une propriété qui va permettre de masquer tout ce qui dépasse de notre bloc ; overflow:hidden;.

Voici de que nous donne le code CSS au final:

	height:3em;
	line-height:1em;
	overflow:hidden;

dimanche, février 3 2008

les bonnes pratiques de l'intégrateur : faire un ombrage full css

Dans cet article, nous allons voir comment réaliser des ombres entières réalisés en CSS. D'habitude la gestion de zone avec des ombres en CSS se réalisent avec des images de fond, ce qui implique forcement que la taille de la zone qui possède l'ombre est fixe (au moins sur un axe), et que chacune des zones du site qui possèdent une ombre et qui ont des tailles différentes ont des images de fond différentes.

Dans mon cas, il suffit d'avoir dans un calque positionné, deux calques, un pour le contenu et une autre pour l'ombre et le tour est joué. Voici le code HTML, on pourra remarque qu'il n'y a pas grand chose de compliqué...

<div id="conteneur">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p>
	<div class="ombre">&nbsp;</div>
</div>

Et la feuille de style associée, ici il faut donc faire attention à ce que le calque conteneur ai un attribut de position (position:relatif; ou position:absolute;) afin que le calque qui possède l'ombrage soit étiré sous le contenu avec un positionnement en absolute en left, top, bottom et right. Attention, étant donné que l'ombrage est positionné de façon absolute et après le contenu de mon cadre, il faudra donner au contenu un positionnement relatif pour pouvoir lui associer un niveau d'ordre de calque (z-index). Ensuite, il faut juste appliquer des propriétés pour gérée une opacité réduite pour cet ombrage et le tour est joué.

#conteneur{
	background:#fff;
	width:350px;
	position:relative;
	border:1px soldi #555;
	margin:30px;
}
#conteneur p{
	padding:10px;
	margin:0;
	color:#555;
	background:#fff;
	position: relative;
	z-index:1;
}
.ombre{
	position: absolute;
	bottom:-5px;
	right:-5px;
	top:-5px;
	left:-5px;
	background:#000;
	filter : alpha(opacity=20);
	-moz-opacity : 0.2;
	opacity : 0.2; 
}

samedi, janvier 19 2008

Be Kind Rewind

Après Human Nature, Eternal sunshine of the spotless mind, et la science des rêves, Michel Gondry nous dévoile encore une histoire au scénario déroutant Be Kind Rewind: Voici le synopsis :

Un homme dont le cerveau devient magnétique efface involontairement toutes les cassettes du vidéoclub dans lequel l'un de ses amis travaille. Afin de satisfaire la demande de la plus fidèle cliente du vidéoclub, une vieille dame démente, les deux hommes décident de réaliser les remakes des films effacés parmi lesquels "Retour vers le Futur", "Le Roi Lion" et "Robocop".

Sur youtube, la sauce commence à prendre, on trouve de plus en plus de films en version "sweded" (C'est comme ça que les appelles Michel Gondry). On peut deja trouver les seigneur des anneaux, rush hour, robocop, kill bill, mais mon préféré reste pour l'instant Piège de Cristal dont voici la version swedé:

- page 1 de 16