Bonjour,

Je rencontre un petit problème avec mon code. J'essaye désespérement de fixer mon pied de page en bas de la page mais, même après avoir fait le tour de dixaines de sites, cela ne marche pas...
Ce problème m'exaspère et en essayant, mon code ne ressemble plus à rien.

Ce que je fais

index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="styles/style.css">
    <link rel="shortcut icon" type="image/png" href="ressources/images/logo-small-final.png"/>
    <title>Accueil | StoryShare</title>
</head>
<body>
    <div id="bloc_page">
    <?php include('includes/header.php'); ?>

        <div id="page">
            <h1>Bienvenue sur <span id="story">Story</span><span id="share">Share</span> !</h1>
            <h2>Le meilleur endroit pour partager ses histoires !</h2>

            <p>
                Ici, vous pouvez lire les histoires que les membres ont écrits ! Mais ce n'est pas tout ! <br/>
                Vous pouvez également écrire des histoires en vous inscrivant sur le site !
            </p>
        </div>
        <div id="last_story">
                <h1 id="last_story_title">Dernière histoire :</h1>
                <?php
                    try {
                        $bdd = new PDO('mysql:host=localhost;dbname=storyshare;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                    } catch (Exception $e) {
                        die('Erreur :' . $e->getMessage());
                    }
                        $reponse = $bdd->query('SELECT auteur, titre, histoire, DATE_FORMAT(date_publication, \'%d/%m/%Y à %Hh%imin%ss\') AS date_publication FROM histoires ORDER BY ID DESC LIMIT 0, 1');

                    if ($reponse != FALSE) {

                    while ($donnees = $reponse->fetch())
                    { ?>

                    <h2>Écrite par <?php echo strip_tags($donnees['auteur']); ?> le <?php echo strip_tags($donnees['date_publication']); ?></h2>
                    <h3>Histoire :</h3>
                    <p id="histoire">
                    <?php echo strip_tags($donnees['histoire']); ?>
                    </p>

                    <?php
                    } 
                    } else {

                    ?>
                    <h2 id="nothing">Oh... Il n'y a rien pour l'instant...</h2>
                    <?php
                    }
                    $reponse->closeCursor(); ?>
            </p>
        </div>
        <?php include('includes/footer.php'); ?>
    </div>
</body>
</html>

style.css


/* Éléments principaux */

html 
{
    height: 100%;
    position: relative;
    min-height: 100%;
}

body
{
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    height: 100%;
    font-family: 'abeezeeregular', Arial, sans-serif;
    color: #ffffff;
    background-color: #2F2F2F; /* Jet */
    margin: 0;
    padding: 0;
    margin-bottom: 60px;
}

#page
{
    background-color: #212121; /* Eerie Balck */
    border-radius: 10px;
    word-wrap: break-word;
}

#bloc_page
{
    width: auto;
    margin: auto;
    min-height: 100%;
    position: relative;
    margin-bottom: 60px;
}

@media all and (max-width: 1024px)
{
    #bloc_page
    {
        width: auto;
    }
}

/* Header */

header
{
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
}

/* Footer */

#legal, #legal a
{
    color: #3E3E3E; /* Onyx */
}

footer {
    height: 0px;
    position:absolute;
    bottom:0px;
    left:0px;
    width:100%;
    margin-top: auto;
  }

footer.php

<footer style="background-color: #110E0E; /* Smoky Black */">
    <div id="social">
        <p>StoryShare sur les réseaux sociaux :</p>
        <div id="liens">
            <a href="https://discord.gg/ZmTtpcG"><img src="ressources/images/discord-logo.png" alt="Logo Discord" width="50" height="50"></a>
        </div>

    <div id="legal">
        <p><a href="mentions_legales.php">Mentions légales</a> -
        <a href="cgu.php">Conditions générales d'utilisation</a> -
        <a href="politiqueconfi.php">Politique de confidentialité</a></p>
    </div>
    </div>
</footer>

Ce que je veux

Enfin obtenir un pied de page en bas de page quel que soit la quantité d'éléments présents dans la page.

Ce que j'obtiens

J'obtiens un pied de page collé au reste et en bas DES ELEMENTS et non de la page
Ou un pied de page en plein milieu de la page.
Regardez l'image pour comprendre.
https://imgur.com/g7jFrvL

23 réponses


Arzou
Réponse acceptée

Effectivement ..
Moi je laisserai le body comme il est de base, en display block.
Je virererai les min-height et les height à 100% ou 100vh pour commencer, et tu les remettra uniquement la ou il y en a besoin.
Je virerai aussi les position relative et absolute pour le moment aussi. Parce que nativement, le footer est sensé arriver à la suite de ton contenu.

Déjà tu y verra plus clair, et le footer devrai être pas mal ;)

Bonsoir.
Pour commencer tu as un problème de définition:

height: 0px;

Si tu définis une hauteur de 0 pixel, tu auras forcément un problème pour le voir ton élément.
Au passage, il est inutile de définir l'unité lorsque la valeur pour les pixels est de 0.
Sinon, as-tu pensé à la valeur fixed pour position ?
J'ai l'impression que tu fermes la première balise div un peux trop bas, donc à remplacer par:

<footer style="background-color: #110E0E;">
    <div id="social">
        <p>StoryShare sur les réseaux sociaux :</p>
        <div id="liens">
            <a href="https://discord.gg/ZmTtpcG"><img src="ressources/images/discord-logo.png" alt="Logo Discord" width="50" height="50"></a>
        </div>
    </div>
    <div id="legal">
        <p><a href="mentions_legales.php">Mentions légales</a> -
        <a href="cgu.php">Conditions générales d'utilisation</a> -
        <a href="politiqueconfi.php">Politique de confidentialité</a></p>
    </div>
</footer>

Comme te l'a dit Lartak, je pense que tu devrais essayer une position fixed.
Tu peux aussi lui préciser un bottom: 0; pour qu'il soit toujours en bas de l'écran.

ItsWidee
Auteur

J'ai essayé de faire comme vous me l'avez demandé mais néanmoins, je n'ai pas obtenu le bon résultat :/
Le pied de page reste bloqué, certes, en bas de l'écran, mais pas de la page. En effet, quand je scrolle, le pdp reste en basde l'écran.
J'ai également eu quelque chose de bizarre, ma page s'est allongée...
( Voir le gif : https://imgur.com/Vd0jgvI )

ItsWidee
Auteur

Ah ! L'allongement de la page, c'est un problème d'un autre système
Donc pas en rapport avec ça

Ben le soucis effectivement c'est que si tu veux bloquer le footer en bas de la fenetre de ton navigateur, mais que tu as trop de contenu. Donc ça passe en dessous..

ItsWidee
Auteur

Mais du coup, comment je peux faire ?
Ce pied de page est vraiment un calvaire pour tout dire...

Pour fixer le pied de page tu fais grosso-modo un :

<style>
body {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

.footer {
    align-self: end;
}
</style

<body>
<div class="site-container">
Tout le site passe dans cette div
</div>

<footer class="footer">Footer fixé en bas de page</footer>
</body>
ItsWidee
Auteur

Malheureusement, même en essayant cette solution, le pdp reste en bas de l'écran mais pas de la page, ce qui fait qu'il empiète sur la page...

Je vais me répéter mais je ne comprends pas ce que tu cherches à faire en fait :)
D'un côté tu veux qu'il soit fixé en bas de l'écran, mais de l'autre qu'il reste après le contenu de ta page .. Si il est fixé en bas de l'écran, mais que tu as trop de contenu, inevitablement, le contenu passera par dessus ou par dessous.
Et si tu veux qu'il soit quoi qu'il arrive après ton contenu, sa position ne peux pas être fixe ..

ItsWidee
Auteur

Ah, j'ai du mal formuler ma demande.
En fait, je souhaiterais que le pied de page soit en dessous du contenu, comme sur le site Grafikart.
Ce que j'évite, justement, c'est qu'il soit fixé en bas de l'écran

Ah d'accord, effectivement, ce n'est pas la même chose :)
Je réponds rapido sans tout relire donc j'espère que je ne dirai pas de connerie mais dans le style de ton footer il y a plusieurs choses à enlever :

• height: 0px;
• position:absolute;
• bottom:0px;
• left:0px;

Normalement si tu vire ça, il devrait suivre ton contenu normalement

ItsWidee
Auteur

Mon footer est têtu ! Toujours pas...
J'ai également essayé de supprimer l'include php mais ça ne change rien. Il ne se met pas sous le contenu...

Je viens de re regarder un peu ton code, je pense qu'il doit y avoir des soucis entre tous tes min-height a 100% ou tes height à 100vh.
Ensuite, ton body est en display-flex, en colonne. Pourquoi tu l'as géré comme ça ?

ItsWidee
Auteur

Le display: flex et column est du à la réponse de Mehdiaix.

ItsWidee
Auteur

Eh non, ce foutu footer continu à rester en bas de l'écran. J'ai enlevé tout ce qui a été dit, même sur le html{}. Mais ça ne fait rien du tout

Il est fixé en bas de l'écran quand tu scroll ?

ItsWidee
Auteur

C'est ça, comme sur ce gif : https://imgur.com/Vd0jgvI

Je dois partir, je regarde quand je rentre ;)

ItsWidee
Auteur

Pas de problème ! Merci pour l'aide !

ItsWidee
Auteur

Je ne sais par quel miracle le pied de page s'est mis sous le contenu !

ItsWidee
Auteur

Je le marque comme résolu, mais s’il me fait encore des caprices, je le rouvrirais.
Merci beaucoup de votre patience et de votre aide !

A cool bonne nouvelle ! Tu n'avais peut être pas effacé le cache ;)