VISCOM-CIE1

This project is maintained by inetis-ch

Structure HTML et CSS d’un Portfolio

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

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="./css/styles.css">
  <link href="https://fonts.googleapis.com/css2?family=Lato:wght@100;400;700&family=Poppins:wght@200&display=swap"
        rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@200&display=swap" rel="stylesheet">
  <title>Portfolio</title>
</head>

<body>
<header>
  <div class="container">
    <nav class="flex items-centre justify-between">
      <div class="left flex justfiy-right">
        <div class="logo">
          <img src="./images/logo.png" width="50px" alt="logo">
        </div>
        <div>
          <a href="#">Home</a>
          <a href="#about">A propos</a>
          <a href="#service">Services</a>
          <a href="blog.htm">Blog</a></li>
        </div>
      </div>
      <div class="right">
        <button class="btn btn-primary">Contact</button>
      </div>
    </nav>
  </div>
</header>
<main>
  <section id="hero" class="flex items-centre justify-between">
    <div class="left flex-1 justify-center">
      <img src="./images/portrait.png" alt="Profile">
    </div>
    <div class="right flex-1">
      <h1>Pierre-André Vullioud</h1>
      <h2>Je suis un<br> <span>Developeur</span></h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque illum nam nobis, minima
        laudantium fugit sequi nostrum quod impedit, beatae necessitatibus praesentium optio labore
        nemo!</p>
      <div>
        <a href="">
          <button class="btn btn-secondary">Télécharger mon CV</button>
        </a>
      </div>
    </div>
  </section>

  <section id="about">
    <div class="container flex items-centre">

      <div class="left flex-1">
        <h2>A propos de <span>moi</span></h2>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque adipisci distinctio obcaecati
          aliquid,
          quia tempora quis optio repudiandae officia earum?
          Lorem ipsum dolor sit amet consectetur, adipisicing elit.
        </p>
        <div class="flex socials">
          <a href="#"><img src="./images/facebook.png"></a>
          <a href="#"><img src="./images/instagram.png"></a>
          <a href="#"><img src="./images/reddit.png"></a>
        </div>
      </div>
      <div class="right flex-1 justify-right">
        <img src="./images/portrait2.png" alt="profile pic">
      </div>
    </div>
  </section>

  <section id="services">
    <div class="container">
      <h2 class="services-head">Mes services</h2>
      <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Dicta, eligendi tempore. Eaque veniam
        impedit quis alias, sint culpa maxime animi quibusdam necessitatibus sit ex porro architecto! Unde
        animi corrupti fugit.</p>
      <div class="card-grid">
        <div class="card">
          <img src="./images/cisor.svg">
          <h2>Graphic Desgin</h2>
          <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nulla, debitis?</p>
        </div>
        <div class="card">
          <img src="./images/pen.svg">
          <h2>Web Development</h2>
          <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nulla, debitis?</p>
        </div>
        <div class="card">
          <img src="./images/valise.svg">
          <h2>Content Writing</h2>
          <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nulla, debitis?</p>
        </div>
      </div>
    </div>
  </section>
</main>
<footer>
  &copy; 2024 Les pieds dans le plat
</footer>
</body>

Structure de base

Dans ce document HTML, plusieurs sections et éléments sont utilisés pour structurer un site web, typiquement un portfolio. Voici une explication détaillée pour chacune des parties principales du document :

Structure des fichiers

portfolio
├── css
│   ├── styles.css
│   ├── utilities.css
│   ├── responsive.css
├── images
│   ├── logo.png
│   ├── portrait.png
│   └── etc..
└─- index.html

1. Document Type Declaration (Doctype)

<!DOCTYPE html>

2. Tag <html>

<html lang="fr">

3. Section <head>

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./css/styles.css">
    <link href="https://fonts.googleapis.com/css2?family=Lato:wght@100;400;700&family=Poppins:wght@200&display=swap"
        rel="stylesheet">
    <title>Portfolio</title>
</head>

4. Section <body>

Tout le contenu visible de la page est placé ici :

a. <header>

Contient la barre de navigation et le logo, utilisant une structure de classe flexible pour l’alignement :

<header>
    <div class="container">...</div>
</header>

b. <main>

C’est la partie principale du contenu où différentes sections du portfolio sont détaillées :

<main>
    <section id="hero">...</section>
    <section id="about">...</section>
    <section id="services">...</section>
</main>
<footer>
    &copy; 2024 Les pieds dans le plat
</footer>

Fichier CSS principal

/* Importation des fichiers */
@import 'utilities.css';
@import 'responsive.css';

:root {
  /* Déclaration des variables */
  --primary: rgb(29, 221, 189);
  --bgDark: rgb(12, 12, 12);
  --white: rgb(250, 250, 250);
  --secondary: rgb(0, 59, 50);
  --bgLight: rgb(190, 181, 181);
}

/* Reset des styles */
* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

body {
  font-family: 'Poppins', sans-serif;
  /* Definir la police par défaut */
  color: var(--bgDark);
}

.container {
  max-width: 1152px;
  /* largeur max du container */
  padding: 0 15px;
  margin: 0 auto;
  /* centrer le container */
}

section {
  padding: 6rem;
}

footer {
  background: var(--bgDark);
  color: var(--white);
  padding: 1rem 0.5rem;
  border-top: 2px solid var(--primary);
}

Fichier utilitaire CSS

Un fichier utilitaire CSS, souvent appelé “fichier de classes utilitaires” ou “helpers”, est utilisé pour fournir des classes réutilisables qui facilitent la mise en forme standardisée à travers les diverses parties d’un site web.

.flex {
display: flex;
/* définir un conteneur flex */
}

.items-centre {
align-items: center;
/* aligner les éléments au centre */
}

.justify-between {
justify-content: space-between;
/* aligner les éléments et répartir l'espace */
}

.justify-center {
justify-content: center;
/* aligner les éléments au centre */
}

.justify-right {
justify-content: right;
/* aligner les éléments à droite */
}

.btn {
padding: 0.6rem 2rem;
font-size: 1rem;
font-weight: 600;
border: 2px solid transparent;
/* bordure de 2px solide transparente */
outline: none;
cursor: pointer;
text-transform: uppercase;
/* transformer le texte en majuscules */
transition: all .2s ease;
/* transition de 0.2s */
}

.btn-primary {
/* bouton de base */
background-color: var(--primary);
color: var(--secondary);
margin-top: -15rem;
}

.btn-primary:hover {
/* survol des boutons */
background: transparent;
border-color: var(--primary);
color: var(--primary);
}

.flex-1 {
flex: 1;
/* définis le facteur de flexibilité */
}

.btn-secondary {
background: transparent;
color: var(--primary);
border-color: var(--primary);
}

.btn-secondary:hover {
background: var(--primary);
color: var(--secondary);
}

Signification du contenu du fichier utilitaire

Chaque classe dans ce fichier utilitaire sert un objectif spécifique de mise en page ou de décoration. Voici ce que chaque classe fait:

L’utilisation de ces classes à travers le HTML augmente l’efficacité du développement et assure que les styles sont uniformément appliqués, renforçant ainsi la consistance visuelle à travers le site web.

Code HTML de la Section Header:

<header>
    <div class="container">
        <nav class="flex items-centre justify-between">
            <div class="left flex justfiy-right">
                <div class="logo">
                    <img src="./images/logo.png" width="50px" alt="logo">
                </div>
                <div>
                    <a href="#">Home</a>
                    <a href="#about">A propos</a>
                    <a href="#service">Services</a>
                    <a href="blog.htm">Blog</a></li>
                </div>
            </div>
            <div class="right">
                <button class="btn btn-primary">Contact</button>
            </div>
        </nav>
    </div>
</header>

CSS a ajouté dans le fichier styles.css:

header {
    background-color: var(--bgDark);
}

header nav .left a {
    color: var(--white);
    text-decoration: none;
    /* enlever le soulignement des liens */
    margin-right: 2rem;
    text-transform: uppercase;
    /* mettre en majuscule */
    transition: all .2s ease;
    /* transition sur tous les éléments */
}

header nav .left a:hover {
    color: var(--primary);
}

header nav {
    padding: 2rem 0;
}

header nav .logo {
    margin-right: 3rem;
}

Explication des éléments:

1. Tag <header>:

2. Conteneur Principal (<div class="container">):

3. Navigation (<nav class="flex items-centre justify-between">):

4. Partie Gauche du Menu (<div class="left flex justfiy-right">):

5. Partie Droite du Menu (<div class="right">):

Section hero

La section “hero”, souvent appelée la bannière ou “hero image”, est essentielle dans de nombreux sites Web modernes, spécialement les portfolios ou les sites de présentation, car elle capte l’attention de l’utilisateur dès son arrivée sur le site. Voici une analyse détaillée de cette section :

Code HTML

<section id="hero" class="hero flex items-centre justify-between">
    <div class="left flex-1 justify-center">
        <img src="./images/portrait.png" alt="Profile">
    </div>
    <div class="right flex-1">
        <h1>Pierre-André Vullioud</h1>
        <h2>Je suis un<br> <span>Developeur</span></h2>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Doloremque illum nam nobis, minima
            laudantium fugit sequi nostrum quod impedit, beatae necessitatibus praesentium optio labore
            nemo!</p>
        <div>
            <a href="">
                <button class="btn btn-secondary">Télécharger mon CV</button>
            </a>
        </div>
    </div>
</section>

Code CSS

#hero {
  padding-top: 2rem;
  padding-bottom: 3rem;
  background-color: var(--bgDark);
}

#hero .left img {
  width: 400px;
}

#hero .right {
  color: var(--white);
  padding: 0 0 0 2rem;
}

#hero .right h2 {
  font-size: 1.5rem;
  font-weight: 100;
  /* graisse de la police */
  line-height: 1.2;
  /* interlignage */
  margin-bottom: 2rem;
}

#hero .right h2 span {
  color: var(--primary);
}

#hero .right p {
  line-height: 1.9;
  margin-bottom: 2rem;
}

#hero .right h1 {
  font-size: 2rem;
  font-weight: 400;
  margin-bottom: 0.5rem;
  margin-top: 2rem;
  color: var(--primary);
}

Explication des éléments:

1. Tag <section>:

2. Division Gauche

3. Division Droite

Section About

Code HTML

<section id="about">
    <div class="container flex items-centre">
        <div class="left flex-1">
            <h2>A propos de <span>moi</span></h2>
            <h3>Hello!</h3>
            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque adipisci distinctio obcaecati aliquid,
                quia tempora quis optio repudiandae officia earum?
                Lorem ipsum dolor sit amet consectetur, adipisicing elit.
            </p>
            <div class="flex socials">
                <a href="#"><img src="./images/facebook.png"></a>
                <a href="#"><img src="./images/instagram.png"></a>
                <a href="#"><img src="./images/reddit.png"></a>
            </div>
        </div>
        <div class="right flex-1 justify-right">
            <img src="./images/portrait2.png" height="400px" alt="profile pic">
        </div>
    </div>
</section>

Code CSS

#about h2 {
    margin-bottom: 1rem;
    font-size: 2rem;
    font-weight: 600;
}

#about h2 span {
    color: var(--primary);
}

#about p {
    font-family: 'Lato', sans-serif;
    color: var(--secondary);
    line-height: 1.9rem;
    margin-bottom: 2rem;
}

/*about section*/

#about .socials a {
    display: flex;
    align-items: center;
    /* centre les éléments sur l'axe vertical */
    justify-content: center;
    /* centre les éléments sur l'axe horizontal */
    width: 2rem;
    margin-right: 0.8rem;
    border-radius: 50%;
    /* crée un rond */
}

#about .socials a:hover {
    background: var(--primary);
}

#about .socials a img {
    width: 2rem;
}

#about .right img {
    width: 100%;
}

Explication des éléments:

1. Tag <section>:

2. Conteneur principal (<div class="container flex items-centre">):

3. Division Gauche (Left division):

4. Division Droite (Right division):

Services

Code HTML

<section id="services">
    <div class="container">
        <h2 class="services-head">Mes Services</h2>
        <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. ...</p>
        <div class="card-grid">
            <div class="card">
                <img src="./images/cisor.svg">
                <h2>Graphic Design</h2>
                <p>Lorem ipsum dolor sit amet consectetur, ...</p>
            </div>
            <div class="card">
                <img src="./images/pen.svg">
                <h2>Web Development</h2>
                <p>Lorem ipsum dolor sit amet consectetur, ...</p>
            </div>
            <div class="card">
                <img src="./images/valise.svg">
                <h2>Content Writing</h2>
                <p>Lorem ipsum dolor sit amet consectetur, ...</p>
            </div>
        </div>
    </div>
</section>

Code CSS

/*services section*/
#services {
    background: rgb(17, 17, 17)
}

.services-head {
    color: rgb(10, 9, 9);
    text-align: center;
    margin-bottom: 1rem;
    line-height: 0.5rem;
    color: var(--primary);
}

.services-head+p {
    color: var(--white);
    font-family: 'Lato', sans-serif;
    margin-bottom: 1rem;
    text-align: center;
    margin-bottom: 6rem;
    font-weight: 400;
}

.card img {
    width: 3rem;
    background: white;
}

#services .card-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    /* 3 colonnes de largeur égale */
    column-gap: 2rem;
    /* espace entre les colonnes */
}

#services .card-grid .card {
    background: var(--white);
    padding: 3rem 2rem;
    position: relative;
    text-align: center;
    transition: all .2s ease;
}

#services .card-grid .card img {
    position: absolute;
    top: -1.5rem;
    left: 50%;
    transform: translateX(-50%);
    color: var();
}

#services .card-grid .card h2 {
    font-weight: 600;
    font-size: 1.2rem;
    margin-bottom: 0.5rem;
}

#services .card-grid .card p {
    font-family: 'Lato', sans-serif;
    color: var(--seconday);
    line-height: 1.6;
}

#services .card-grid .card:hover {
    background: var(--primary);
}

#services .card-grid .card:hover h2 {
    color: var(--white);
}

#services .card-grid .card:hover p {
    color: var(--white);
}

Explication des éléments:

1. Tag <section>:

2. Conteneur principal (<div class="container">):

3. Titre de la section:

4. Description des services:

5. Grille de cartes (<div class="card-grid">):

Cartes individuelles de services:

Chaque carte (élément <div class="card">) représente un service spécifique.

Mise en page classique en card

Fichier CSS styles.css complet

/* Importation des fichiers */
@import 'utilities.css';
@import 'responsive.css';

:root {
    /* Déclaration des variables */
    --primary: rgb(29, 221, 189);
    --bgDark: rgb(12, 12, 12);
    --white: rgb(250, 250, 250);
    --secondary: rgb(0, 59, 50);
    --bgLight: rgb(190, 181, 181);
}

/* Reset des styles */
* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Poppins', sans-serif;
    /* Definir la police par défaut */
    color: var(--bgDark);
}

.container {
    max-width: 1152px;
    /* largeur max du container */
    padding: 0 15px;
    margin: 0 auto;
    /* centrer le container */
}

section {
    padding: 6rem;
}

header {
    background-color: var(--bgDark);
}

header nav .left a {
    color: var(--white);
    text-decoration: none;
    /* enlever le soulignement des liens */
    margin-right: 2rem;
    text-transform: uppercase;
    /* mettre en majuscule */
    transition: all .2s ease;
    /* transition sur tous les éléments */
}

header nav .left a:hover {
    color: var(--primary);
}

header nav {
    padding: 2rem 0;
}

header nav .logo {
    margin-right: 3rem;
}


#hero {
    padding-top: 2rem;
    padding-bottom: 3rem;
    background-color: var(--bgDark);
}

#hero .left img {
    width: 400px;
}

#hero .right {
    color: var(--white);
    padding: 0 0 0 2rem;
}

#hero .right h2 {
    font-size: 1.5rem;
    font-weight: 100;
    /* graisse de la police */
    line-height: 1.2;
    /* interlignage */
    margin-bottom: 2rem;
}

#hero .right h2 span {
    color: var(--primary);
}

#hero .right p {
    line-height: 1.9;
    margin-bottom: 2rem;
}

#hero .right h1 {
    font-size: 2rem;
    font-weight: 400;
    margin-bottom: 0.5rem;
    margin-top: 2rem;
    color: var(--primary);
}


/*about section*/

#about h2 {
    margin-bottom: 1rem;
    font-size: 2rem;
    font-weight: 600;
}

#about h2 span {
    color: var(--primary);
}

#about p {
    font-family: 'Lato', sans-serif;
    color: var(--secondary);
    line-height: 1.9rem;
    margin-bottom: 2rem;
}

/*about section*/

#about .socials a {
    display: flex;
    align-items: center;
    /* centre les éléments sur l'axe vertical */
    justify-content: center;
    /* centre les éléments sur l'axe horizontal */
    width: 2rem;
    margin-right: 0.8rem;
    border-radius: 50%;
    /* crée un rond */
}

#about .socials a:hover {
    background: var(--primary);
}

#about .socials a img {
    width: 2rem;
}

#about .right img {
    width: 100%;
}

/*services section*/
#services {
    background: rgb(17, 17, 17)
}

.services-head {
    color: rgb(10, 9, 9);
    text-align: center;
    margin-bottom: 1rem;
    line-height: 0.5rem;
    color: var(--primary);
}

.services-head+p {
    color: var(--white);
    font-family: 'Lato', sans-serif;
    margin-bottom: 1rem;
    text-align: center;
    margin-bottom: 6rem;
    font-weight: 400;
}

.card img {
    width: 3rem;
    background: white;
}

#services .card-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    /* 3 colonnes de largeur égale */
    column-gap: 2rem;
    /* espace entre les colonnes */
}

#services .card-grid .card {
    background: var(--white);
    padding: 3rem 2rem;
    position: relative;
    text-align: center;
    transition: all .2s ease;
}

#services .card-grid .card img {
    position: absolute;
    top: -1.5rem;
    left: 50%;
    transform: translateX(-50%);
    color: var();
}

#services .card-grid .card h2 {
    font-weight: 600;
    font-size: 1.2rem;
    margin-bottom: 0.5rem;
}

#services .card-grid .card p {
    font-family: 'Lato', sans-serif;
    color: var(--seconday);
    line-height: 1.6;
}

#services .card-grid .card:hover {
    background: var(--primary);
}

#services .card-grid .card:hover h2 {
    color: var(--white);
}

#services .card-grid .card:hover p {
    color: var(--white);
}

/*footer */

footer {
    background: var(--bgDark);
    color: var(--white);
    padding: 1rem 0.5rem;
    border-top: 2px solid var(--primary);
}