ex css3 et html5

ex page css3 html5<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Zozor - Carnets de voyage</title>
    </head>
 
    <body>
        <div id="bloc_page">
            <header>
                <div id="titre_principal">
                    <img src="images/zozor_logo.png" alt="Logo de Zozor" id="logo" />
                    <h1>Zozor</h1>
                    <h2>Carnets de voyage</h2>
                </div>
                 
                <nav>
                    <ul>
                        <li><a href="#">Accueil</a></li>
                        <li><a href="#">Contact</a></li>
                    </ul>
                </nav>
            </header>
             
            <div id="banniere_image">
                <div id="banniere_description">
                    Retour sur mes vacances aux États-Unis...
                    <a href="#" class="bouton_rouge">Voir l'art<img src="images/flechblanchdrt.png" alt="" /></a>
                </div>
            </div>
             
            <section>
                <article>
                    <h1><img src="images/ico_epingle.png" alt="Catégorie voyage" class="ico_categorie" />Je suis un grand voyageur</h1>
                    <p>Lorem ipsum dolor sit amet...</p>
                    <p>Vivamus sed libero nec mauris pulvinar facilisis ut non sem...</p>
                    <p>Phasellus ligula massa, congue ac vulputate non, dignissim at augue...</p>
                </article>
                <aside>
                    <h1>À propos de l'auteur</h1>
                    <img src="images/bulle.png" alt="" id="fleche_bulle" />
                    <p id="photo_zozor"><img src="images/zozor_classe.png" alt="Photo de Zozor" /></p>
                    <p>Laisse-moi le temps de me présenter : je m'appelle Zozor, je suis né un 23 novembre 2005.</p>
                    <p><img src="images/facebook.png" alt="Facebook" /><img src="images/twitter.png" alt="Twitter" /><img src="images/vimeo.png" alt="Vimeo" /><img src="images/flickr.png" alt="Flickr" /><img src="images/rss.png" alt="RSS" /></p>
                </aside>
            </section>
             
            <footer>
                <div id="tweet">
                    <h1>Mon dernier tweet</h1>
                    <p>Hii haaaaaan !</p>
                    <p>le 12 mai à 23h12</p>
                </div>
                <div id="mes_photos">
                    <h1>Mes photos</h1>
                    <p><img src="images/photo1.jpg" alt="Photographie" /><img src="images/photo2.jpg" alt="Photographie" /><img src="images/photo3.jpg" alt="Photographie" /></p>
                </div>
                <div id="mes_amis">
                    <h1>Mes amis</h1>
                    <ul>
                        <li><a href="#">Pupi le lapin</a></li>
                        <li><a href="#">Perceval.eu</a></li>
                    </ul>
                    <ul>
                        <li><a href="#">Belette</a></li>
                        <li><a href="#">Le concombre masqué</a></li>
                    </ul>
                </div>
            </footer>
        </div>
    </body>
</html>

Voici un css. Avec margin: auto; le block principal sera centré, en largeur fixe.

/* Eléments principaux de la page */
body
{
    background: url('images/fond_jaune.png');
    font-family: 'Trebuchet MS', Arial, sans-serif;
    color: #181818;
}
 
#bloc_page
{
    width: 900px;
    margin: auto;
}
 
section h1, footer h1, nav a
{
    font-family: Dayrom, serif;
    font-weight: normal;
    text-transform: uppercase;
}

/* Header */
 
header
{
    background: url('images/separateur.png') repeat-x bottom;
}
 
#titre_principal
{
    display: inline-block;
}
 
header h1
{
    font-family: 'BallparkWeiner', serif;
    font-size: 2.5em;
    font-weight: normal;
}
 
#logo, header h1
{
    display: inline-block;
    margin-bottom: 0px;
}
 
header h2
{
    font-family: Dayrom, serif;
    font-size: 1.1em;
    margin-top: 0px;
    font-weight: normal;
}

distinction entre l'en-tête et le corps de page grâce à une image de fond (repeat-x bottom), les éléments sont positionnés via inline-block.

Navigation: une telle liste (ul li) s'affiche habituellement en hauteur, et non en largeur.

Nouveauté list-style-type: none permet de retirer l'image ronde servant de puce. Chaque élément de la liste (<li>) est positionné en inline-block, ce qui permet de placer les liens côte à côte.

/* Navigation */
 
nav
{
    display: inline-block;
    width: 740px;
    text-align: right;
}
 
nav ul
{
    list-style-type: none;
}
 
nav li
{
    display: inline-block;
    margin-right: 15px;
}
 
nav a
{
    font-size: 1.3em;
    color: #181818;
    padding-bottom: 3px;
    text-decoration: none;
}
 
nav a:hover
{
    color: #760001;
    border-bottom: 3px solid #760001;
}

La bannière

  • angles arrondis ;
  • la description écrite sur un fond légèrement transparent ;
  • bouton « Voir l'article » réalisé en CSS, avec angles arrondis ;
  • une ombre vient donner du volume à la bannière.

La bannière est en position relative, sans utiliser de propriétés pour en modifier le décalage… Pourquoi ? A priori, une position relative sans décalage ne sert à rien… Cela est utile pour placer le bouton « Voir l'article » en bas à droite de la bannière (bouton en absolu à l'intérieur).
Un bloc positionné en absolu dans un autre bloc lui-même positionné en absolu, fixe ou relatif, se positionne à l'intérieur de ce bloc.

légende de la bannière: RGBa et non opacity, car opacity rend le bouton « Voir l'article » lui aussi transparent. Seule la couleur de fond est transparente, non tout le bloc.

Le fond du bouton est un repeat de dégradé, on aurait pu aussi utiliser linear-gradient

/* Bannière */
 
#banniere_image
{
    margin-top: 15px;
    height: 200px;
    border-radius: 5px;
    background: url('images/sanfrancisco.jpg') no-repeat;
    position: relative;
    box-shadow: 0px 4px 4px #1c1a19;
    margin-bottom: 25px;
}
 
#banniere_description
{
    position: absolute;
    bottom: 0;
    border-radius: 0px 0px 5px 5px;
    width: 99.5%;
    height: 33px;
    padding-top: 15px;
    padding-left: 4px;
    background-color: rgb(24,24,24); /* Pour les anciens navigateurs */
    background-color: rgba(24,24,24,0.8);
    color: white;
    font-size: 0.8em;
}
 
.bouton_rouge
{
    display: inline-block;
    height: 25px;
    position: absolute;
    right: 5px;
    bottom: 5px;
    background: url('images/fond_degraderouge.png') repeat-x;
    border: 1px solid #760001;
    border-radius: 5px;
    font-size: 1.2em;
    text-align: center;
    padding: 3px 8px 0px 8px;
    color: white;
    text-decoration: none;
}
 
.bouton_rouge img
{
    border: 0;
}

le corps (sur balise section)

Pour placer la flèche à gauche du bloc <aside> « À propos de l'auteur » et donner l'effet d'une bulle: bloc <aside> en relatif (sans effectuer de décalage), ce qui permet ensuite de positionner l'image de la flèche en absolu par rapport au bloc <aside> (et non par rapport à la page entière). En jouant sur le décalage de l'image, on peux la placer au pixel près!

/* Corps */
 
article, aside
{
    display: inline-block;
    vertical-align: top;
    text-align: justify;
}
 
article
{
    width: 625px;
    margin-right: 15px;
}
 
.ico_categorie
{
    vertical-align: middle;
    margin-right: 8px;
}
 
article p
{
    font-size: 0.8em;
}
 
aside
{
    position: relative;
    width: 235px;
    background-color: #706b64;
    box-shadow: 0px 2px 5px #1c1a19;
    border-radius: 5px;
    padding: 10px;
    color: white;
    font-size: 0.9em;
}
 
#fleche_bulle
{
    position: absolute;
    top: 100px;
    left: -12px;
}
 
#photo_zozor
{
    text-align: center;
}
 
#photo_zozor img
{
    border: 1px solid #181818;
}
 
aside img
{
    margin-right: 5px;
}

footer (3 div aved id,  positionnés en inline-block les uns à côté des autres)

/* Footer */
 
footer
{
    background:  url('images/ico_top.png') no-repeat top center, url('images/separateur.png') repeat-x top, url('images/ombre.png') repeat-x top;
    padding-top: 25px;
}
 
footer p, footer ul
{
    font-size: 0.8em;
}
 
footer h1
{
    font-size: 1.1em;
}
 
#tweet, #mes_photos, #mes_amis
{
    display: inline-block;
    vertical-align: top;
}
 
#tweet
{
    width: 28%;
}
 
#mes_photos
{
    width: 35%;
}
 
#mes_amis
{
    width: 31%;
}
 
#mes_photos img
{
    border: 1px solid #181818;
    margin-right: 2px;
}
 
#mes_amis ul
{
    display: inline-block;
    vertical-align: top;
    margin-top: 0;
    width: 48%;
    list-style-image: url('images/ico_liensexterne.png');
    padding-left: 2px;
}
 
#mes_amis a
{
    text-decoration: none;
    color: #760001;
}

En haut du pied de page, la séparation utilise trois images (le séparateur, la petite flèche vers le haut et un léger dégradé) en "fond multiples de CSS3". Les puces dans "mes amis" sont une image personnalisée, avec list-style-image.

 

Notes pour IE 7

deux problèmes principaux sur les anciennes versions d'IE :

  • inline-block n'est pas bien géré sous IE6 et IE7, ce qui fait que la plupart de nos positionnements ne fonctionnent pas pour le moment… Cela se résout...
  • Les balises structurantes de HTML5 (<header>, <nav>, <aside>…) ne sont pas gérées sous IE6, IE7 et IE8, ce qui pose de gros problèmes d'affichage… Mais, là encore, un petit script ajouté au début de votre code HTML permet de régler le problème !

Et faire une croix sur les fonctionnalités les plus récentes de CSS3 (les coins arrondis ; les images de fond multiples ; la transparence ; les ombres).

js pour balises structurantes mal comprises

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <!--[if lt IE 9]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->

        <title>Nom page</title>
    </head>

inline-block remplacées par css "spéciale IE old style": style_ie.css

Ajouter après la css "normale":
        <!--[if lte IE 7]>
        <link rel="stylesheet" href="style_ie.css" />
        <![endif]-->

qui comprend par ex element{display: inline; zoom: 1;} sur chaque élément positionné en inline-block.

source: http://www.siteduzero.com/informatique/tutoriels/apprenez-a-creer-votre-site-web-avec-html5-et-css3/mettre-en-forme-en-css

W3c validator

A validator.w3.org

TP final a tous les fichiers