• Les tables

    Les tables servent pour l'affichage de « données tabulaires », c'est-à-dire des informations présentées logiquement en rangées et en colonnes.
    Son intégration peut paraitre fastidieuse mais c'est uniquement de la logique.
    En théorie, on peut insérer n'importe quoi dans les tables : du texte, des liens et des images ...
    TOUJOURS EST-IL que les tables sont désormais faites pour présenter des données de type grille de tarifs par exemple.

    Même si aux premiers temps d'Internet, les tables servaient souvent pour la mise en page.
    Les concepts de boites et de sémantiques n'existaient pas encore.
    On trouve encore ce type de mise en page dans la construction de newsletters pour s'assurer un bon affichage dans les messageries, pas toujours à jour sur les évolutions HTML-CSS.
    Pour contrôler la présentation du texte et des images, il existe aujourd'hui d'autres solutions CSS de mise en page plus adaptée : flexbox, grid, float

    Exemple de table :

                       
    <table>
      <tr>
        <td>Cellule 1</td>
        <td>Cellule 2</td>
      </tr>
      <tr>
        <td>Cellule 3</td>
        <td>Cellule 4</td>
      </tr>
    </table>
    

    Ce qui donne :

    Cellule 1 Cellule 2
    Cellule 3 Cellule 4

    On utilise 3 éléments différents pour insérer des tables :
    La balise ouvrante <table> et la balise fermante </table> marquent le début et la fin de la table.
    La balise <tr> : "table row" (rangée de table), commence et termine les rangées dans le sens horizontal.
    La balise <td> : "table data" (données de table), marque le début et la fin de chaque cellule dans les rangées de la table.
    Les rangées sont des lignes horizontales de cellules et les colonnes des lignes verticales de cellules :
    Cellule 1 et Cellule 2 forment une rangée, Cellule 1 et Cellule 3 une colonne.
    Une table peut avoir un nombre illimité de rangées et colonnes.

    Les attributs ?
    Ces attributs doivent désormais être appliqués par le biais du CSS
    - border sert à indiquer l'épaisseur de la bordure autour de la table.
    - On peut également fixer la largeur d'une table en pixels ou en pourcentage avec width
    - align : indique l'alignement horizontal du contenu dans toute la table, dans une rangée ou dans une seule cellule. Les valeurs : "left", "center" ou "right".
    - valign : indique l'alignement vertical du contenu dans une cellule. Les valeurs : "top", "middle" ou "bottom"
    - bgcolor : couleur de fond
    - background : image de fond

    Les attributs colspan et rowspan vont permettre la mise en page de tableaux plus élaborés.
    Le terme « colspan » est l'abréviation de « column span » (recouvrement de colonne).
    L'attribut colspan est utilisé dans la balise <td> pour indiquer combien de colonnes la cellule recouvre :

    <table border="1">
      <tr>
        <td border="1" colspan="3">Cellule 1</td>
      </tr>
      <tr>
        <td border="1">Cellule 2</td>
        <td border="1">Cellule 3</td>
        <td border="1">Cellule 4</td>
      </tr>
    </table>
    

    Ce qui donne :

    Cellule 1
    Cellule 2 Cellule 3 Cellule 4

    Si on fixe sa valeur à "2", la cellule ne recouvrirait que deux colonnes, et il faudrait insérer une cellule supplémentaire dans la première rangée afin que le nombre de colonnes corresponde dans les deux rangées.

    Et pour rowspan ?
    l'attribut rowspan indique combien de rangées la cellule doit recouvrir :

    <table border="1">
      <tr>
        <td rowspan="3">Cellule 1</td>
        <td>Cellule 2</td>
      </tr>
      <tr>
        <td>Cellule 3</td>
      </tr>
      <tr>
        <td>Cellule 4</td>
      </tr>
    </table>
    

    Ce qui donne :

    Cellule 1 Cellule 2
    Cellule 3
    Cellule 4

    La valeur de rowspan est fixée à "3" dans la Cellule 1. Elle indique que la cellule doit recouvrir trois rangées (la sienne propre plus deux autres). Cellule 1 et Cellule 2 sont donc dans la même rangée, tandis que Cellule 3 et Cellule 4 forment deux rangées indépendantes.

    <style>
        table.tab {
            border-collapse: collapse;
        }
        td, th {
            border: 1px solid #333;
        }
    </style> 
    <table class="tab">
     <thead>
      <tr>
         <th>Fruits</th>
         <th>Légumes</th>
      </tr>
     </thead>
     <tbody>
      <tr>
         <td>Banane</td>
         <td>Choux</td>
      </tr>
      <tr>
         <td>Fraise</td>
         <td>Patate</td>
      </tr>
     </tbody>
     <tfoot>
      <tr>
         <td>Smoothie</td>
         <td>Choucroute</td>
      </tr>
     </tfoot>
    </table> 
    
    Fruits Légumes
    Banane Choux
    Fraise Patate
    Smoothie Choucroute

    thead regroupe les titres du tableau
    thead va de paire avec tbody et tfoot qui représente : header, body, footer

    Internat Tarif annuel
    Collège 6°  –  5° 1850 €
    Collège 4°  –  3° 2230 €
    Lycée 2°  – 1°  –  T° 2330 €

    Il est parfois utile de dessiner la table sur un bout de papier avant de commencer le HTML.

    Les tables ont été remplacées par le concept de boites pour structurer un document HTML.

  • balises block / balises inline

    Les balises HTML ont toutes par défaut des propriétés de rendu CSS particulières.
    2 groupes principaux de balises :
    - les balises de rendu CSS "bloc" : block
    - les balises de rendu CSS "en-ligne" : inline.

    La balise block occupe toute la largeur disponible à l'intérieur de son parent.
    Lorsque 2 éléments blocs se suivent dans une page, ils sont positionnés l'un en dessous de l'autre.
    Exemples typiques d'élément bloc : <div>, <section>, <header>, <h1>, <p>...

    Par consensus, les navigateurs ont choisi de conférer aux éléments HTML5 de type sectioning, un rendu CSS de type bloc :
    header, section, article, aside, footer
    La balise inline n'occupe que la largeur indispensable à l'affichage du contenu et ne provoque pas de retour à la ligne.
    Lorsque 2 éléments en-ligne se suivent dans une page, ils sont positionnés l'un à côté l'autre (si la largeur de page le permet).
    Exemples typiques d'élément en-ligne : <img>, <a>, <span>...

    Les éléments de type "block" sont généralement ceux que l'on utilise pour la mise en page, alors que les éléments "inline" sont surtout utilisés pour mettre en valeur à une portion de texte.

    Qqes balises block : <div>, <h1>...<h6>, <ul>, <ol>, <p>...
    <article>

    TITRE H1

    • list item 01
    • list item 02

    paragraphe

    </article>
    Propriétés du Bloc

    - Retour automatique à la ligne avant et après
    - Flexible
    - Occupe toute la largeur du parent

    Ce type de balise est utilisé pour bâtir et structurer la page du site.

    Les balises inline : <span>, <a>, <em>, <strong>, <img/>, <mark>
    Une image puis un span suivi d'un Lien Propriétés du Inline

    - Obligatoirement enfant d'une balise block
    - Pas de retour à la ligne
    - Le texte qui se trouve à l'intérieur s'écrit donc à la suite du texte ou de l'image le précédent, sur la même ligne
    - N'occupe que la largeur indispensable à l'affichage du contenu.

    Ce type de balise est utilisé pour isoler et styliser certaines portions de texte.

    Précisions balises inline

    - Seules les marges horizontales lui sont applicables SAUF pour la balise img.
    Les images bénéficient des marges verticales et horizontales.
    Rappel : Si l'on veut espacer des lignes entres elles on utilise le line-height, la balise p ou le br à l'intérieur d'un paragraphe
    - les éléments en-ligne ne peuvent contenir que d'autres balises en-ligne.
    - Les propriétés CSS : vertical-align / text-align correspondance avec les cellules tableaux (valign / align).

    Précisions balises block :

    Le bloc contient des éléments en-ligne mais aussi d'autres blocs, SAUF le paragraphe qui ne contient que des éléments inline.
    Pas de liste dans un paragraphe.

  • balises block & inline en action

    • Un header (block)
    • Un titre H1 (block) contenant un span (inline)
    • Une accroche paragraphe (block) contenant un strong (inline)
    • Un bouton lien (inline->inline-block)

    Mon titre
    de niveau 01

    Lorem ipsum dolor sit amet consectetur adipisicing elit.
    Sit deserunt impedit voluptatem Molestiae tenetur.

    bouton CTA

    Il peut être parfois bien pratique de changer la façon dont un élément s'affiche, nous verrons ensuite comment la propriété CSS display permet de basculer d'un mode d'affichage à l'autre.
    Parmi les valeurs les plus connues de display, l'on retrouve bien sur block et inline.

  • Display : changer le type de la balise

    Nous avons vu que certaines balises sont de type block et d'autres de type inline
    Exemple balise block : <p></p> <div></div>
    Exemple balise inline : <a></a> <span></span>
    En CSS cela correspond à :
    display:block;
    display:inline;

    Il existe d'autres valeurs pour la propriété "display".
    display : none
    display : inline-block
    display : table
    display : flex
    display : grid...
    La propriété Display admet aujourd'hui 18 valeurs...
    Voici les plus couramment utilisés et reconnues par les navigateurs :

    display : none => permet de retirer une balise de la structure du flux;
    elle perd son existence, la place qu'elle occupait et reprise par les autres éléments qui la suivent.
    Et son parent ne la considère plus présente, malgré qu'elle soit toujours dans la structure HTML.

    Ne pas confondre "display: none;" et "visibility: hidden;"
    display: none; masque l'élément et annule ses propriétés : margin, padding, width, height...
    Alors que visibility: hidden; masque seulement l'élément, il est toujours présent et peut du coup laisser des espaces vides.

    nonehiddenAnybody here !

    Ces deux propriétés servent donc à cacher des éléments que l'on peut faire apparaître à tout moment.

    display : block => utile pour transformer une balise inline en balise block
    Un exemple courant est de vouloir donner une marge interne et un background à une balise <a> pour en faire un item de navigation.
    Par défaut, <a> est une balise Inline, il faut donc la passer en Block pour lui donner des marges verticales.
    Autre exemple courant, une img dans une balise figure pour supprimer le white-space.

    display : inline => transformer une balise block en balise inline, pas très utile

    display : inline-block => moitié inline moitié block, cela permet de mettre des balises les unes à côté des autres, de pouvoir les dimensionner ou d'avoir des éléments qui font la taille du texte contenu.
    Les balises de formulaire sont de ce type : input et select.
    Un exemple courant est de vouloir un titre qui fait la largeur du texte, idem pour un bouton.

    Un lien <a> en display:inline-block

    <a href="#" style="display:block; background-color:#3f3; padding:2rem; min-width:250px;">lien en inline-block</a>
    

    lien en inline-block

    Menu horizontal : li en display:inline-block

    <ul style="margin:5px; list-style:none;">
        <li>li en display:inline-block </li>
        <li>li en display:inline-block </li>
        <li>li en display:inline-block </li>
    </ul>
    
    • li en display:inline-block
    • li en display:inline-block
    • li en display:inline-block

    On voit apparaître un espace entre les li dû au fait qu'ils ont les particularités des éléments inline (white-space).

    Exos
    Créer des titres suivis de paragraphes en leur appliquant un background-color.
    Faites en sorte que ces titres ne prennent pas toute la largeur mais seulement la largeur de leur texte.

    Créer une figure avec une img
    Appliquer une couleur de fond à la figure et supprimer l'espace en dessous l'img.

    Créer une nav avec une liste.
    Mettre les li en ligne, ajouter des liens en block

  • Les marges

    2 types de marges : margin et padding

    margin pour les marges extérieures
    margin : 20px; → pour les 4 marges extérieures
    margin : 20px 10px 30px 15px; (haut, droite, bas, gauche)
    margin : 20px 10px; (haut/bas et droite/gauche)
    margin : 20px 10px 30px; (haut, droite/gauche et bas)

    padding pour les marges intérieures
    padding : 20px; → pour les 4 marges intérieures
    ...

    margin-top / margin-bottom / margin-left / margin-right :
    pour une marge extérieure spécifique
    padding-top / padding-bottom / padding-left / padding-right :
    pour une marge intérieure spécifique

    div {
        margin:25px; 
        padding:50px 25px 100px 50px; 
        background-color:pink; 
        max-width:800px;
    }
    p {
    	border:1px solid red;
        padding:2rem;
        margin:2rem 0;
    }
    

    paragraphe : balise block

    paragraphe : balise block

    Il est possible dans certains cas d'appliquer des marges verticales négatives pour créer une superposition avec l'aide de la position:relative.

      section#margin {
        background-color:#39F;
        padding:3rem;
      }
      section#margin figure + p {
        background-color: #222;
        color: #fff;
        margin: -30px 50px 0;
        padding: 1rem 2rem;
        position: relative;
        width: 80%;
        max-width: 700px;
      }
      #margin figure {
        margin: 0;
      }
    

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec et viverra dolor. Suspendisse risus risus, suscipit eu tempor ac, feugiat vel mi. Integer nec augue vel dolor porttitor tincidunt sit amet ut dolor. Praesent eget lacus eget massa posuere maximus id vitae tortor. Proin varius semper orci at molestie. Curabitur tempus efficitur interdum. Nam a aliquet tortor. Donec sed porttitor justo. Fusce non consequat nibh.

    Exos
    Reprendre le bouton en inline-block et augmenter la surface cliquable
    Même chose pour le titre et les liens block de la nav.
    Appliquer à tous vos titres et paragraphes des marges extérieures en rem.

  • Centrer des balises block

    CENTRER DANS LA LARGEUR
    Choisir une largeur pour le bloc (obligatoire)

    Mettre des marges droite/gauche automatiques

    max-width : 300px;
    min-height: 150px;
    margin: 50px auto;
    
    centrer dans la largeur.
  • CSS3 Box-sizing

    La propriété CSS box-sizing est utilisé pour modifier le modèle de boîte CSS par défaut qui est utilisé pour calculer la largeur et la hauteur des éléments.

    Calcul largeur boite : width + padding + bordures
    Box-sizing : 3 valeurs possibles.

    box-sizing : content-box
    box-sizing: padding-box
    box-sizing: border-box

    Valeurs

    content-box
    C'est la valeur par défaut spécifiée dans le standard CSS. Les propriétés width et height sont mesurées en incluant le contenu, mais pas la bordure, la marge extérieure ou intérieure.

    padding-box
    Les propriétés width et height incluent la marge intérieure, mais pas la bordure ou la marge extérieure.

    border-box
    Les propriétés width et height incluent la marge intérieure et la bordure, mais pas la marge extérieure.

                    
    * {
        box-sizing: border-box;
    }
    
  • EXOS

    DOSSIER html_06

    Exo 01 : Balises block
    Reproduire cette page html en n'utilisant que des balises de type block et les propriétés CSS de marges

    a/ Les balises à utiliser sont body, header, h1, h2, section, p, ul et li.
    b/ Le texte : thématique au choix, un titre, un sous-titre, un paragraphe, et une liste
    c/ Les couleurs : différentes pour chaque bloc.
    d/ Les tailles : largeur du site 960px, le sous-titre 500px et centré, la liste 800px et centrée.
    e/ Les marges : respecter le visuel..
    Correction

    Exo 02 : display
    - Reprendre l'exo précédent et ajouter des paragraphes lorem ipsum.
    - Maitriser les marges appliquées par défaut.
    - Ajouter une navigation en liste horizontale.
    - Passer les liens en block et donner leur une couleur de fond au survol
    - Placer des balises strong dans le corps du texte et appliquer leur des marges.

    Exo 03 : table
    - Créez plusieurs tables de dimensions différentes(px et %), avec des attributs et du contenu différents.
    - Intégrer les tableaux dans une mise en page HTML5 simple (div class main/header/section/articles/footer).
    Correction

    Exo
    - Créer une feuille de style type :
    - Chargement des fonts, création des variables couleurs, application du box-sizing à toutes les balises
    - Supprimer la marge par défaut du body
    - Remplacer les marges par défaut appliqués aux différents titres, paragraphe, liste, figure, citation.