28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous !

C'est mon premier post sur le forum, bien que je suis inscrit depuis un bon moment sur ce site, qui m'a offert un CDI d'infographiste Smiley biggrin depuis plus de 1 an (via la rubrique emploi). Merci donc à Raphaël et son équipe eheh.

Je commence à apprendre le html/css depuis maintenant 2 semaines en parallèle de mon boulot afin de gagner des compétences d'intégrateur. J'en ai donc profité pour suivre une formation avec le dvd de Florent Verschelde (fvsch) qui m'a bien aidé et que je salut au passage si il voit ce post Smiley biggrin

Bref après cette petite présentation, si je viens poster ce message c'est avant tout parce que j'ai besoin de vos lanternes, car je bloque sur une partie (la plus grosse...) de mon site que je fais en html 5/CSS 3 (et oui je méprise IE ^^).

En fait j'aimerai intégrer un énorme slider. Je l'avoue, Je me suis inspiré de celui-ci: Dagobert sur la page d'accueil. J'ai bien analysé le code et j'ai quasiment compris comment cela fonctionnait, le tout n'est pas de recopier bêtement mais de comprendre bien entendu. Une bonne partie de leur slider est d'ailleurs géré par du Jquery, comme le fondu des slides au survol de la souris, l'apparition de l'encart titre/description ou encore les accès aux images suivantes via les flèches. J'apprendrai ce nouveau langage après avoir résolu mon problème que je vais tenter de décrire maintenant, mais avant ça voici un aperçu de mon slider:

- grande fenêtre upload/27370-grandereso.jpg
- petite fenêtre upload/27370-petitereso.jpg

Quand on redimensionne la fenêtre du navigateur sur le site de Dagobert, le slider s'adapte lui aussi. En effet l'image de gauche et l'image de droite glissent chacune vers l'extérieure, elles rentrent dans la fenêtre du navigateur, ce qui recentre le design de la page.

Alors que sur mon slider, quand je redimensionne la fenêtre du navigateur, tout le slider glisse vers la gauche (grâce au float) ce qui est déjà un bon début, mais l'image de droite, quelque soit les dimensions de la fenêtre n'apparaît pas comme l'image tout à gauche. J'aimerai donc que quand on redimensionne la fenêtre du navigateur, on ait la même position sur l'image de gauche que sur l'image de droite. J'ai tenté de mettre un margin:auto sur ma div contenant le slider mais ca ne fonctionne toujours pas, alors que pourtant c'était pour moi la solution pour centrer des éléments sur la page.

Je ne sais pas si c'est très clair mais je poste mon code. Je vous remercie d'avance si vous trouvez la solution, parce que je ne vois plus comment faire, j'ai pourtant cherché. Bonne soirée !

<!DOCTYPE html>
<html lang="fr">

<head>
<meta charset="utf-8">
<title>Bienvenue sur mon site</title>
<meta name="description" content="">
<meta name="author" content="">
<link rel="stylesheet" href="indexbis.css" type="text/css"  media="screen">
</head>

<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/JavaScript">

</script>

<div id="global">
    
    <header id="entete">
        <a href="#"><img id="logo" src="images/logo.gif" width="290" height="80" border="0" alt="logo"></a>
        <nav id="menu">
            <ul>
                <li><a id="hello" href="#">HELLO !</a></li>
                <li><a class="nav_pages" href="#">LE STUDIO</a></li>
                <li><a class="nav_pages" href="#">PORTFOLIO</a></li>
                <li><a class="nav_pages" href="#">BLOG</a></li>
                <li><a class="nav_pages" href="#">CONTACT</a></li>
            </ul>
        </nav>
        <div id="barrebleue_entete">
        </div> <!--#barrebleue-->
    </header>
    
    <div id="slider">
    
        <div class="fleches">
                <a href="#"><img id="gauche" src="images/flechegauche.png" width="30" height="40" alt="image slider précédente" border="0"></a>
                <a href="#"><img id="droite" src="images/flechedroite.png" width="30" height="40" alt="image slider suivante" border="0"></a>
        </div><!-- .fleches -->
        
        <nav id="slides">
            <div style="overflow: hidden; position: relative; width: 3000px;">
                <ul>
                    <li>
                        <div class="image_slide">
                            <div class="image_slide_noir-blanc"><img src="images/mer_normal.jpg"></div>
                            <div class="image_slide_desat"></div>
                            <div class="image_slide_couleur"><img src="images/mer_hover.jpg"></div>
                        </div><!-- .image_slide -->
                        
                        <div class="description">
                            <div class="description_titre">Mer</div>
                            <div class="description_contenu"></div>
                        </div><!-- .description -->
                    </li>
                    <li>
                        <div class="image_slide">
                            <div class="image_slide_noir-blanc"><img src="images/palmiers_normal.jpg"></div>
                            <div class="image_slide_desat"></div>
                            <div class="image_slide_couleur"><img src="images/palmiers_hover.jpg"></div>
                        </div><!-- .image_slide -->
                        
                        <div class="description">
                            <div class="description_titre">Palmiers</div>
                            <div class="description_contenu"></div>
                        </div><!-- .description -->
                    </li>
                    <li>
                        <div class="image_slide">
                            <div class="image_slide_noir-blanc"><img src="images/volcan_normal.jpg"></div>
                            <div class="image_slide_desat"></div>
                            <div class="image_slide_couleur"><img src="images/volcan_hover.jpg"></div>
                        </div><!-- .image_slide -->
                        
                        <div class="description">
                            <div class="description_titre">Montagne</div>
                            <div class="description_contenu"></div>
                        </div><!-- .description -->
                    </li>
                </ul>
            </div><!-- overflow -->
        </nav>
        
    </div><!-- #slider -->
    
    <div id="contenu">
        <div id="barrebleue_contenu">
        </div><!-- #barrebleue_contenu -->
    </div><!-- #contenu -->
    
    <footer id="piedpage">
        <div id="barrebleue_piedpage">
            POUR NOUS CONTACTER
        </div> <!--#barrebleue-->
        
        <div id="carrebleu">
            <a href="#"><img id="fleche" src="images/fleche.png" width="40" height="30" alt="remonter en haut de page" border="0"></a>
        </div> <!--#carrebleu-->
        
        <div id="contact">
            <a class="bleu">Studio test</a>
            <p>06 xx xx xx xx<br>
            contact@studiotest.com</p>
            <ul id="reseauxsociaux">
                <li><a href="#">Twitter</a></li>
                <li><a href="#">Facebook</a></li>
                <li><a href="#">Behance</a></li>
                <li><a href="#">Viadeo</a></li>
            </ul>
        </div><!--#contact-->
        
        <div id="cadreformulaire">
            <form id="formulaire" action="#" method="post">
                <ul id="gauche">
                <li>
                    <label for=nom>Nom</label>
                    <input id="nom" name="nom" type="text" placeholder="Dupont" required>
                </li><br>
                <li>
                    <label for=prenom>Prénom</label>
                    <input id="prenom" name="prenom" type="text" placeholder="Pierre" required>
                </li><br>
                <li>
                    <label for=societe>Société</label>
                    <input id="societe" name="societe" type="text" placeholder="Dupont & Co" required>
                </li><br>
                <li>
                    <label for=telephone>téléphone</label>
                    <input id="telephone" name="telephone" type="tel" placeholder="06 xx xx xx xx" pattern="[0-9]{10}" title="10 caratères de type numérique [0-9]" required>
                </li><br>
                <li>
                    <label for=mail>Mail</label>
                    <input id="mail" name="mail" type="email" placeholder="p.dupont@free.fr" required></li>
                </ul>
                
                <ul id="droite">
                <li>
                    <label for=objet>Objet</label>
                    <input id="objet" name="objet" type="text" placeholder="Demande d'infos" required>
                </li><br>
                <li>
                    <label for=message>Message</label>
                    <textarea id="message" name="objet" type="text" rows="9" cols="40" placeholder="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in lacus viverra ligula tristique accumsan vel in tellus." required></textarea>
                </li>
                </ul>
            
                <input type="submit" value="Envoyer">
            </form>
            
        </div><!--#formulaire-->
    </footer>
    
    
</div><!-- #global -->

</body>
</html>


body {
	margin: 0;
	padding: 0;
	font-family: verdana, Arial, sans-serif;
	font-size: 100%;
	line-height: 1.25;
	color: white;
	background: #333333;
}

#entete {
	height: 105px;
	background: #333333;
}

#logo {
	padding: 10px 10px;
}

#menu ul {
	color: #FFF;
	list-style: none;
	margin: -65px 30px;
	float: right;
}

#menu li {
	display: inline-block;
	padding-left: 20px;
}

#menu li a#hello {
	color: white;
	background: #009EE0;
	height: 50px;
	border-radius: 3px;
	text-decoration: none;
	padding: 5px 5px;
}

#menu li a.nav_pages {
	padding: 5px 5px;
	background: transparent;
	font-weight: normal;
	color: white;
	text-decoration: none;
	-webkit-transition: all .6s ease-in;
	-moz-transition: all .6s ease-in;
	-o-transition: all .6s ease-in;
	transition: all .6s ease-in;

}

#menu li a.nav_pages:hover {
	color: white;
	background: #009EE0;
	height: 50px;
	border-radius: 3px;
	text-decoration: none;
	padding: 5px 5px;
}

#barrebleue_entete {
	height: 15px;
	background: #009EE0;
}

#slider {
	margin-top: 13px;
	height: 450px;
	background: #666666;
}

#slides {
	margin: -56px -1180px;
	float: right;
}

#slides ul {
	list-style: none;
	width: 5000px;
}

#slides li {
	display: inline-block;
	margin-left: 10px;
	height: 450px;
	width: 850px;
}

.image_slide_noir-blanc {
	position: absolute;
	z-index: 2;	
}

.image_slide_noir-blanc:hover {
	opacity: 0;
}

.image_slide_couleur {
	position: absolute;
	top: 16px;
	z-index: 1;
}

.description {
	width: 350px;
	padding: 8px;
	background-color: #333;
	color: white;
	opacity: 0.8;
	position: relative;
	z-index: 3;
	left:35px;
	top: 300px;
}

.fleches {
	height: 40px;
	position: relative;
	z-index: 3;
	
}

#gauche {
	margin: 225px 0 0 100px;
	
}

#droite {
	margin: 225px 0 0 500px;
	
}

#contenu {
	height: 500px;
	background: white;
}

#barrebleue_contenu {
	height: 15px;
	background: #009EE0;
}

#piedpage {
	height: 600px;
	background: #333333;
}

#barrebleue_piedpage {
	height: 25px;
	background: #009EE0;
	padding-left: 30px;
	vertical-align: middle;
	font-weight: bold;
}

#carrebleu {
	height: 30px;
	width: 50px;
	background: #009EE0;
	float: right;
	margin: -40px 15px;
	border-radius: 7px;
}

#fleche {
	padding: 4px;
}

#contact {
	width: 595px;
	height: 75px;
	margin: 30px 123px;
}

.bleu {
	color: #009EE0;
}


#reseauxsociaux {
	width: 472px;
	list-style: none;
	margin: -65px -150px;
	float: right;
}

#reseauxsociaux li {
	display: inline-block;
	padding-left: 50px;
	background-image:url(images/sprite_reseaux.gif);
	background-repeat: no-repeat;

}

#reseauxsociaux a {
	color: white;
	text-decoration: none;
	font-weight: normal;
}


#twitter {
	width: 25px;
	background-position: 5px 5px;
}

#twitter:hover {
	background-position: 5px -35px;
}

#facebook {
	width: 25px;
	background-position: 5px 5px;
}

#facebook:hover {
	background-position: 5px -35px;
}

#behance {
	width: 25px;
	background-position: 5px 5px;
}

#behance:hover {
	background-position: 5px -35px;
}

#viadeo {
	width: 25px;
	background-position: 5px 5px;
}

#viadeo:hover {
	background-position: 5px -35px;
}

#cadreformulaire {
	width: 780px;
	margin: 50px 90px;
	border-style: solid;
	border-width: 2px;
	border-radius: 10px;
	border-color: #009EE0;
}

#cadreformulaire ul#gauche {
	color: #FFF;
	list-style: none;
	margin: 45px 30px 0px 0px;

}

#cadreformulaire ul#droite {
	float:right;
	color: #FFF;
	list-style: none;
	margin: -180px 30px 0px 0px;

}

label {
	width: 90px;
	float: left;
}

textarea{
	resize: vertical;
}

input[type=text], input[type=tel], input[type=email], textarea {
	padding: 3px;
	color:#009EE0;
	border: none;
	border-radius: 3px;
	text-decoration:none;
	background: white;
	vertical-align: top; 
	-webkit-transition: all .6s ease-in;
	-moz-transition: all .6s ease-in;
	-o-transition: all .6s ease-in;
	transition: all .6s ease-in;
}

input[type=text]:focus, input[type=tel]:focus, input[type=email]:focus, textarea:focus {
	color: white;
	background: #009EE0;
	border: none;
	border-radius: 3px;
	box-shadow: 3px 3px 10px #333;
}


input[type=text]:focus, input[type=tel]:focus, input[type=email]:focus {
	height: 13px;
}

input[type=submit] {
	font-size: 20px;
	border:none;
	background: #666666;
	width: 100px;
	height: 40px;
	border-radius: 5px;
	color: white;
	cursor: pointer;
	margin: 25px 0 25px 650px;
}

input[type=submit]:hover {
	font-size: 20px;
	border:none;
	background: #009EE0;
	width: 100px;
	height: 40px;
	border-radius: 5px;
	color: white;
	cursor: pointer;
}
Hello!
Tu n'as pas ta page en ligne?
Parce que sans les images, ce n'est pas facile de comprendre...
tu n'es pas loin l'ami Smiley smile

tu as firebug ? si oui, regarde su le site de ton exemple au niveau du css des div #wrapper et #slide-wrapper

c'est le travail de ces 2 div qui donnent cette impression de centrage de l'image du slide.

Si tu ne veux pas que ce soit centré sur ton site, le principe reste le meme, juste que la div #wrapper (qui s'appel peut etre autrement sur ton site) ne doit pas avoir de margin: 0 auto

Bon par contre :

a écrit :
et oui je méprise IE ^^


1 - ie 9 supporte très bien le css3, c'est une erreur de penser que c'est un mauvais navigateur (mais c'est normal de le penser par contre, à cause de nombreuses remarques faciles à son sujet).
2 - il faut toujours que tu garde en tète de mettre des règles de base qui garderont ton contenu "potable" dans le cas de navigateurs plus anciens.
3 - on ne "méprise" pas dans le webdesign, sinon on perd des clients. (j'ai appris ça ici il n'y a pas très longtemps)

Bon trève de blabla, est-ce que ca t'a permis d'avancer ?
Merci pour les réponses et excusez moi pour le retard, je cherchais un hébergeur gratuit pour vous montrer un aperçu. Evidemment par la suite je prendrai un hébergeur payant pour avoir quelque chose de plus sérieux. En attendant voici l'adresse : studio test

@ptitvincent: je prends note pour le navigateur IE, la dernière version supporte certainement le css3 (heureusement, si ils veulent pas être à la ramasse avec la concurrence), mais je parlais surtout des anciennes version sur lesquelles je travailles au boulot pour différentes raison et sur lesquelles je constate des difficultés à adopter mon design...bref pour mon site je pensais de toute façon faire une feuille css à part pour internet explorer Smiley smile

Pour en revenir au problème principal, oui j'ai firebug, c'est d'ailleurs comme ça que j'ai réussi à analyser le code Smiley langue (très pratique).

Ok pour le fait que ce soit 2 div qui fassent le boulot, mais alors j'ai mis un margin: 0 auto sur la div #global qui correspond à la div #wrapper de l'exemple, et j'ai mis un margin: 0 auto sur la div #slider qui correspond à la div #slide-wrapper dans l'exemple et rien n'y fait je n'ai toujours pas mon centrage du design quand je redimensionne ma fenêtre. ça me paraissait pourtant pas mal comme raisonnement, mais j'ai dû oublier un truc.
tu n'as rien oublié. Ormis peut être la partie jquery Smiley cligne

Si tu pointe les div slide et slide_wrapper sur le site de dagober avec firebug et que tu redimensionne la fenetre, tu vera la valeur du width pour l'un et le margin left négatif pour l'autre changer de manière dynamique.
Ca c'est leur fonction jquery qui fait ca.

Pour reproduire manuellement sans jquery dans un premier temps :

Tu prend la taille de ta page de navigateur (si tu as un 1024x768 ca devrait être quelques chose comme 1000 ou 980 de width), ta div qui correspond à leur "slide_wrappe" doit avoir un width correspondant.

Ensuite la div qui contient ton slider (chez eux c'est #slider) tu lui donne la taille de la somme de toutes tes images cote à cote (j'ai vu 3000px chez toi).

enfin, pour centrer (sur la 2nd image par exemple) tu utilise un margin-left négatif en calculant comme ceci :

si ta page affiché fait 1000px de width

1000 - [la taille d'une de tes images (avec ses param de marge compris)] = [espace restant dans ta page]

[espace restant dans ta page] / 2 = [espace restant à gauche de ton image centrale (si on la concidèrait centrée)]

[la taille d'une de tes images (avec ses param de marge compris)] - ( [espace restant à gauche de ton image centrale (si on la concidèrait centrée)] - ( [les param de marge d'une images / 2] ) ) = [la marge négative à appliquer à la div contenant les slide (celle qui fait genre 3000px et qui s'appel #slide chez dagobert)]

Bon, tu as mal aux yeux et je suis pas salaud, donc :
ta page = 1000px
une largeur d'image = 850px (je prend celle de dagobert) + marges (chez eux 20px à droite de chaque images) = 870px

1000px - 870px = 130px
130px / 2 = 65px
870px - 65px = 805px

20px (la marge) / 2 = 10px

805px - 10px = 795px

donc, si ma page (ou ma fenetre hein on se comprend ?) fait 1000px de large et mes images font 870px de large chacunes marge comprise, alors je met un margin-left: -795px; à ma div contenant les images (qui, je le rappel s'appel #slide chez dagobert)

Maintenant il ne te reste plus qu'à faire ce calcule en jquery, mais la je t'ai bien bien dégrossi le travail donc tu n'as plus qu'à te documenter sur jquery et je te fait confiance pour le reste Smiley smile

Juste une dernière chose,

a écrit :
mais je parlais surtout des anciennes version sur lesquelles je travailles au boulot pour différentes raison et sur lesquelles je constate des difficultés à adopter mon design


C'est une erreur assez commune Smiley smile , si tu télécharge la version de firefox qui précède celle que tu as, tu verra qu'il n’interprète pas non plus le css3 (sauf si tu fais appel à son plug-in via un prefix -moz- )
Quel raisonnement! Smiley smile . Je te remercie de m'avoir éclairé cela m'a bien aidé!

Donc j'ai appliqué ce calcul manuellement, effectivement ça marche bien, et je ne sais pas par quel miracle, cela marche sans Jquery... Il ne me reste "plus qu'à mettre en place quelques trucs. J'hébergerai prochainement les fichiers web pour que vous ayez un aperçu de l'avancé.

1) A quoi sert la div .inside dans l'exemple Dagobert ?

2) Je sais qu'il est possible de créer en css3 l'effet de la div qui s'agrandit au survol (quand on passe la souris sur un titre de slide), ou encore de passage au slide suivant en cliquant sur les flèches..mais j' hésites à le faire en Jquery (ou javascript traditionnel). Je penses que cela serait plus facile à faire en css, mais peur d'un manque de compatibilité avec tous les navigateurs... Alors c'est peut être idiot mais que me conseillez vous ?

Merci beaucoup!
désolé de l'abscence Smiley smile

j'ai fait un petit tour sur ta page de test.

Je te conseil d'appliquer un overflow:hidden à "#slides li" dans ton css (je pense que c'est ce que tu cherche meme si tu n'as pas encore posé la question)

Moi quand je te parlais de Jquery c'etait pour que tes fleches de navigations fonctionnes Smiley cligne

Pour tes transitions de menu tu as complètement raison ! Préfère le Jquery. plus que le Javascript à la main d'ailleur car il ne faut pas oublier que Jquery ce n'est ni plus ni moins que du javascript "propre" et "optimisé" donc Jquery t'evite un maximum les surcharge de code.

Edit : la div .inside sur leur site, sert de wrapper au contenu du header ( ca le centre en gros)
Modifié par ptitvincent (16 Aug 2011 - 11:29)
Je viens de mettre à jour la page test!

Ce n'est pas grave pour l'absence j'ai continué comme je pouvais, et j'avais réussi à cacher la partie de l'encart qui contient la description en appliquant tout simplement une height à "slides ul".

Cela dit merci d'avoir anticiper sur ma question car ta remarque sur le fait d'appliquer un overflow:hidden à #slides li est intéressante puisque je l'ai testée et cela fonctionne aussi...Je ne sais pas trop quelle méthode appliquer du coup (celle avec une height sur #slides ul ou le overflow:hidden sur #slides li), même si cela à l'air de revenir au même .

Sinon j'avais un petit soucis avec le scrollbar horizontal qui laissait apparaître tout le slider et cassait le design du header avec la barre bleue...alors j'ai supprimé ce scroll en ajoutant un overflow-x:hidden sur ma div global, ce qui fonctionne bien sur FF, IE 9, Chrome, safari et Opera. Après je ne sais pas si c'est la meilleure solution (il faut désactiver le overflow-x:hidden avec firebug pour mieux se rendre compte du "avant" et du "après").

Sinon là, j'apprends le javascript pour mieux comprendre le Jquery, car il va être temps que je le mette en place pour les transitions.

Merci !