28172 sujets

CSS et mise en forme, CSS3

Hello à tous !

Ceci est mon premier message sur ce forum et c'est pour demander de l'aide aux âmes généreuses qui voudront bien m'en fournir un peu Smiley smile

Mon problème est un "simple problème" de positionnement. Voilà la situation :
Je dois développer un site Internet pour l'entreprise qui m'emploie, jusque là, rien de bien méchant ! Je précise cependant qu'il a été convenu d'utiliser WordPress afin d'administrer et de gérer certains aspects du site plus facilement par la suite.

J'en suis donc à la phase de développement du thème et dans les grandes, la structure de base semble fonctionner plutôt bien. J'ajoute au fur et à mesure les petits détails et j'en suis à venu m'arracher les cheveux avec mon header.

Voici une image qui permettra peut-être de mieux comprendre la chose (ce n'est qu'une esquisse, je ne peux malheureusement pas dévoiler le vrai design) :
upload/42689-helpstripe.jpg

Le problème réside en les deux petites lignes roses que l'on peut voir sur l'image. Leur positionnement n'est pas fonctionnel sur tous les navigateurs, malheureusement.

Firefox 9 : ok
Safari 5.1 : ok
Chrome : ok
Opera 11.6 : ok
Camino 2.1 : ok
RockMelt : ok
OmniWeb 5.11 : non
Safari iOS - iPhone : non

Alors, ça ne fait pas beaucoup et s'il y avait seulement OmniWeb, à la limite, cela ne me dérangerait pas réellement. Par contre, cela me dérange beaucoup plus pour l'iPhone. Je tiens néanmoins à préciser que n'étant pas l'heureux possesseur d'un iPhone, j'utilise le simulateur d'Apple fourni avec XCode 3.2.6.

Le problème, c'est que sous OmniWeb, les deux lignes ainsi que le menu se positionnent légèrement trop au-dessus de la fin du header, c'est-à-dire que le background (le gris foncé sur l'image) continu sur quelques pixels. Pour l'iPhone, c'est l'inverse ! C'est le header qui s'arrête trop tôt alors que sous tous les autres navigateurs, tout se positionne pile-poil !

J'ai mis le code CSS de la partie posant problème ainsi que le code HTML du header un peu plus bas dans le message.

Le site doit être de type fluid et j'ai donc essentiellement utilisé les marges et les padding pour positionner les différents éléments.

J'ai tout d'abord essayé de créer ces deux lignes à l'aide de div auxquelles j'appliquais un background (elles doivent contenir un effet de dégradé que j'ai généré avec http://www.colorzilla.com/gradient-editor/).

Comme cela ne fonctionnait pas, j'ai essayé de faire cela avec des images, mais le problème reste le même.

Honnêtement, je ne sais pas trop quoi faire. J'ai passé le code dans le validateur de W3C et rien de particulier ne m'a été retourné (à part des erreurs sur le dégradé, si quelqu'un sait pourquoi au passage, c'est volontiers que je prends l'info).

Si quelqu'un à une petite idée, une suggestion, voire même, la solution, j'en serais vraiment reconnaissant ! Je deviens complètement Smiley biggol avec cette histoire !

Pour ma part, j'aime bien la méthode avec les div contenant un dégradé. Utiliser une images serait peut-être plus conventionnel ou classique, mais la méthode des div me semble plus simple et plus légère en termes de médias et mieux correspondre à un design de type fluid.

Voilà donc pour ma petite histoire !

Merci d'avance à ceux qui prendront la peine de lire ce post et d'éventuellement d'y répondre !

Code CSS de la partie posant problème
/*** RESET ***/
* {
	margin : 0;
	padding : 0;
	border : 0;
}

/*** HTML ***/
html {
	margin: 0;
	padding: 0;
	border: 0;	
}

/*** BODY ***/
body {
	width : 100%;
	font-family: Eurostile, "Century Gothic", "Lucida Grande", Verdana, Arial, Sans-Serif;
	font-size: 0.8em;
	/* Correction du bug de centrage inférieure à IE6 */
	text-align: center; 
	background: #E1007A;
	color: #006699;
	margin: 0;
	padding: 0;
	border: 0;
}

/*** CONTAINER ***/
#page {
	position : relative;
	min-width: 789px;
	margin-top : 0;
	margin-bottom : 0;
	margin-left : auto;
	margin-right : auto;
	padding: 0;
	border: 0;
	text-align: left;
	overflow:auto;
}

/*** HEADER ***/
#header {
	position : relative;
	font-family: Eurostile, "Century Gothic", "Lucida Grande", Verdana, Arial, Sans-Serif;
	min-width: 789px;
	margin-top: 0;
	margin-left: auto;
	margin-right: auto;
	background: #369;
	height: 130px;
	text-align: center;
}
/* Titre h1 du header */
#header h1 {
	font-size: 2em;
	text-align: center;
	padding : 0;
} 
/* Classe p du header */
#header p {
	font-size: 1em;
	text-align: center;
	padding : 0;
}
#header img {
	margin-left: 0;
	margin-right: 0;
	margin-bottom: 0;
	margin-top: 40px;
	width: 653px;
	height: 24px;
}
#headstripe_1 {
	position : relative;
	height: 2px;
	min-width: 789px;
	margin-top: 30px;
	margin-left: 0;
	margin-right: 0;
	z-index: 3;
		/* --- Dégradé --- */
		background: #e1007a; /* Old browsers */

		/* IE9 SVG, needs conditional override of 'filter' to 'none' */
		
		background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UxMDA3YSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijk5JSIgc3RvcC1jb2xvcj0iI2UxMDA3YSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
		
		background: -moz-linear-gradient(left,  #e1007a 0%, #ffffff 50%, #e1007a 99%); /* FF3.6+ */
		
		background: -webkit-gradient(linear, left top, right top, color-stop(0%,#e1007a), color-stop(50%,#ffffff), color-stop(99%,#e1007a)); /* Chrome,Safari4+ */
		
		background: -webkit-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* Chrome10+,Safari5.1+ */
		
		background: -o-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* Opera 11.10+ */
		
		background: -ms-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* IE10+ */
		
		background: linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* W3C */
		
		filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e1007a', endColorstr='#e1007a',GradientType=1 ); /* IE6-8 */
}

/*** MENU ***/
#menu {
	position : relative;
	min-width: 789px;
	margin-left: 0;
	margin-right: 0;
	margin-bottom: 0;
	margin-top: 7px;
	padding: 0;
	text-align: center;
}
#menu ul {
	margin: 0;
	font-family: Eurostile, "Century Gothic", "Lucida Grande", Verdana, Arial, Sans-Serif;
	font-size: 1.5em;
	font-weight: bold;
	text-transform: uppercase;
	letter-spacing: 0.5em;
	text-align: center;
}
#menu ul li {
	display: inline;
}
#menu ul li a:link {
	margin: 0;
	color: #fff;
	text-decoration: none;
	padding-left: 3.375em;
	padding-right: 2.688em;
}
#menu ul li a:visited {
	color: #fff;
	text-decoration: none;
	/* paramètre padding initial 55px */
	padding-left: 3.375em;
	padding-right: 2.688em;
}
#menu ul li a:hover {
	padding-left: 3.375em;
	padding-right: 2.688em;
	color: #fff;
	/* paramètre position initial 30px */
	background: transparent url(media/img/pointer.png) 2.2em center no-repeat;
	text-decoration: none;
}
#menu ul li a:active {
	padding-left: 3.375em;
	padding-right: 2.688em;
	color: #fff;
	background: transparent url(media/img/pointer.png) 2.2em center no-repeat;
	text-decoration: none;
}
/* Garder le pointeur sur le lien actif */
.current_page_item	a {
	padding-left: 3.375em;
	padding-right: 2.688em;
	color: #fff;
	background: transparent url(media/img/pointer.png) 2.2em center no-repeat;
	text-decoration: none;
}

#headstripe_2 {
	position : relative;
	height: 2px;
	min-width: 789px;
	margin-top: 7px;
	margin-left: 0;
	margin-right: 0;
	z-index : 3;
		/* --- Dégradé --- */
		background: #e1007a; /* Old browsers */

		/* IE9 SVG, needs conditional override of 'filter' to 'none' */
		
		background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UxMDA3YSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijk5JSIgc3RvcC1jb2xvcj0iI2UxMDA3YSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
		
		background: -moz-linear-gradient(left,  #e1007a 0%, #ffffff 50%, #e1007a 99%); /* FF3.6+ */
		
		background: -webkit-gradient(linear, left top, right top, color-stop(0%,#e1007a), color-stop(50%,#ffffff), color-stop(99%,#e1007a)); /* Chrome,Safari4+ */
		
		background: -webkit-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* Chrome10+,Safari5.1+ */
		
		background: -o-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* Opera 11.10+ */
		
		background: -ms-linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* IE10+ */
		
		background: linear-gradient(left,  #e1007a 0%,#ffffff 50%,#e1007a 99%); /* W3C */
		
		filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e1007a', endColorstr='#e1007a',GradientType=1 ); /* IE6-8 */
}


Code du header
<!-- Container -->
	<div id="page">
    	<!-- Calque de contenu du header -->
        <div id="header">
        	<!-- On va chercher le nom du blog et on en fait un lien -->	
            <a href="<?php bloginfo('url'); ?>"><img src="wp-content/themes/nomdutheme/media/img/logo.png" alt="" border="0"/></a>
            <!-- Première ligne de dégradé -->
            <div id="headstripe_1">&nbsp;</div>
            <!-- Menu  créé dynamiquement à partir de la liste des pages WordPress -->
            <div id="menu">	
                <ul>
                    <?php echo preg_replace('@\<li([^>]*)>\<a([^>]*)>(.*?)\<\/a>@i', '<li$1><a$2><span>$3</span></a>', wp_list_pages('echo=0&orderby=name&exlude=181&title_li=&depth=1')); ?>
                </ul>
            <!-- Fin du menu -->
            </div>
            <!-- Deuxième ligne de dégradé -->
            <div id="headstripe_2">&nbsp;</div>
        <!-- Fin du div header -->
        </div>

Modifié par LancelotKiin (06 Jan 2012 - 18:30)
Je me permets de faire un petit up en disant que j'ai également tenté plusieurs manips avec les commandes height, line-height et vertical-align. Malheureusement, impossible d'avoir un bon alignement sur tous les navigateurs.

J'ajouterais que le problème de décalage vertical se manifeste aussi sur le petit sélecteur placé à côté des liens du menu (un peu du style effet sliding doors | Menu 1 | *Menu 2 | Menu 3 | (le * représente le sélecteur qui se déplace en fonction du lien sélectionné)).

J'ai tenté de trouvé le problème avec Firebug et WebInspector, mais sans succès Smiley decu
Bonsoir,

J'ai testé ton code, mais ce n'est pas très clair (t'as laissé du php en plus).
Peux tu montrer ce que tu as et ce que tu veux; ou bien mettre une page html hostée sur le web pour que ce soit plus clair ?
Hello !

Merci pour la réponse ! C'est vrai qu'une image permettrait de mieux comprendre la chose.
Voilà donc ce que j'obtiens :

upload/42689-helpstripe.gif

L'idéal serait donc que tout soit aligné convenablement ! Je rappelle que j'utilise le simulateur d'iPhone d'Appel pour prévisualiser le site pour cette version.

Sous Chrome, Opera et Safari, tout semble être en ordre. Quoi que j'ai constaté que suivant comment je jonglais avec les commandes line-height et vertical-align pour tenter d'aligner le tout, un léger décalage apparaît sous Chrome et/ou Safari. Je n'ai pas encore testé sous IE.

Voilà donc la situation ! Si quelqu'un a une suggestion, je suis preneur ! Smiley lol
C'est encore moi !
Je me permets un petit up pour un peu montrer de quoi ça a l'air dans le feu de l'action avec des couleurs différentes pour chaque élément.
upload/42689-helpstripe.png

On dirait que c'est la span qui pose ce problème de décalage, mais je n'en suis pas certain.
En incorporant les lignes
height: 1.5em;
	line-height: 1.5em;
	vertical-align:middle;

à ma div #menu, je me rapproche du résultat (l'image ci-dessus), mais ce n'est pas encore ça.

Tous mes padding sont à 0, en tout cas pour top et bottom, dans les éléments concernés et je ne comprends pas pourquoi il y a ce décalage au niveau du texte/image du pointeur qui doit certainement se répercuter sur le reste.

Qu'est-ce que vous en pensez ? Quelqu'un aurait déjà eu cette situation ?
Bonjour,

<En apparté>
LancelotKiin a écrit :
Je dois développer un site Internet pour l'entreprise qui m'emploie, jusque là, rien de bien méchant !

Si faire réaliser en interne un outil de communication par une personne qui n'a pas encore les compétences nécessaires, et donc risques d'investir de l'argent (salaire × temps mobilisé) pour produire un outil peu efficace et ainsi perdre tout ou partie de cet investissement, ce n'est pas bien méchant... bah euh ok.
</En apparté>

LancelotKiin a écrit :
Le problème réside en les deux petites lignes roses que l'on peut voir sur l'image. Leur positionnement n'est pas fonctionnel sur tous les navigateurs, malheureusement.

Ce n'est pas le positionnement de tes lignes roses qui est problématique. C'est le dimensionnement de ton header (fond marron). Celui-ci devrait dépendre directement de la place pris par le titre et le menu. Si le titre s'avère prendre deux pixels de plus ou de moins en hauteur sur un navigateur ou un autre, ou lorsque l'utilisateur redimensionne le texte (oui, les utilisateurs font ça parfois), la hauteur de ton header doit s'adapter.

En l'état ton header a une hauteur fixe (height: 130px;). C'est une erreur de conception. Smiley smile

LancelotKiin a écrit :
Honnêtement, je ne sais pas trop quoi faire. J'ai passé le code dans le validateur de W3C et rien de particulier ne m'a été retourné (à part des erreurs sur le dégradé, si quelqu'un sait pourquoi au passage, c'est volontiers que je prends l'info).

Par défaut le validateur CSS du W3C utilise un profil CSS 2.1. Donc toute propriété ou syntaxe CSS3 retournera une erreur. Par ailleurs les versions préfixées des navigateurs (-moz-, -webkit-, etc.) sont invalides par nature.
fvsch a écrit :
Bonjour,

Ce n'est pas le positionnement de tes lignes roses qui est problématique. C'est le dimensionnement de ton header (fond marron). Celui-ci devrait dépendre directement de la place pris par le titre et le menu. Si le titre s'avère prendre deux pixels de plus ou de moins en hauteur sur un navigateur ou un autre, ou lorsque l'utilisateur redimensionne le texte (oui, les utilisateurs font ça parfois), la hauteur de ton header doit s'adapter.

En l'état ton header a une hauteur fixe (height: 130px;). C'est une erreur de conception. Smiley smile


Ok, merci beaucoup ! J'avais pas pensé à ça ! Je vais aller corriger et expérimenter tout ça Smiley cligne


fvsch a écrit :

&lt;En apparté&gt;

Si faire réaliser en interne un outil de communication par une personne qui n'a pas encore les compétences nécessaires, et donc risques d'investir de l'argent (salaire × temps mobilisé) pour produire un outil peu efficace et ainsi perdre tout ou partie de cet investissement, ce n'est pas bien méchant... bah euh ok.
&lt;/En apparté&gt;


Oui en fait non, c'est un peu plus compliqué que ça ! Je suis bien engagé à plein temps (stage pour être plus précis) pour m'occuper du site web mais j'ai reçu ma formation il y a de cela quatre ans et depuis, j'étais parti dans dans une toute autre voie. Mais étant donné ma situation sur le marché de l'emploi actuellement, il fallait bien que je trouve un travail. Mais enfin bref, c'est très compliqué ! ^^ Mais il est évident que j'ai encore beaucoup de chose à dépoussiérer (surtout que je n'ai jamais travaillé avec WordPress et que je n'en suis pas vraiment fan)