How can I have a sticky footer with my CSS Grid layout?

后端 未结 4 1859
暖寄归人
暖寄归人 2020-12-10 12:01

I found this CodePen solution for a sticky footer in a CSS Grid layout, but it has two problems for me:

  1. It is kinda ugly with min-height: 100% a
4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-10 12:52

    Sticky footer is achieved with a single line of CSS, namely: min-height: 100vh.

    Example below:

    body {
        width: 100%;
        height: 100%;
        margin: 0;
        display: grid;
        grid-template-columns: [column-line-1] minmax(128px, 256px) [column-line-2] auto [column-line-3] minmax(128px, 256px) [column-line-4];
        grid-template-rows: [row-line-1] 48px [row-line-2] auto [row-line-3] auto [row-line-4] auto [row-line-5] auto [row-line-6];
        background:#fafafa;
        /*Below provides sticky footer*/
        min-height: 100vh;
    }
    
    body > aside {
        background:#9e9e9e;
    }
    
    body > aside > section {
        margin: 0px 12px 0px 12px;
    }
    
    body > header {
        display: flex;
        flex-flow: row wrap;
        justify-content: center;
        align-content: center;
        align-items: flex-start;
    }
    
    body > header > section {
        flex: 1 1 auto;
        align-self: center;
        min-width: 100%;
        min-height:48px;    
    }
    
    body > header > nav {
        flex: 0 1 auto;
        align-self: auto;
        min-width: 100%;
        min-height:48px;
        
        display: flex;
        flex-flow: row nowrap;
        align-content: center;
        align-items: center;
        
        margin-left:12px;
        margin-right:12px;
    }
    
    body > header > nav > section {
        flex: 1 1 auto;
        align-self: center;
        
        display: flex;
        flex-flow: row nowrap;    
        align-content: center;
        align-items: center;
        
        height:auto;
        width:50%;
    }
    
    body > header > nav > section:nth-of-type(1) {
        justify-content: flex-start;
    }
    
    body > header > nav > section:nth-of-type(2) {
        justify-content: flex-end;
    }
    
    body > header > nav > section > div {
        flex: 0 1 auto;
        align-self:center;
        
        display: flex;
        flex-flow: row nowrap;    
        align-content: center;
        align-items: center;  
        justify-content: center;
        
        margin: 0px 12px 0px 12px;
    }
    
    body > main {
        background:#e3f2fd;
        
    }
    
    body > main > section {
        margin: 0px 12px 0px 12px;
    }
    
    body > nav {
        
        background:#e0e0e0;
    }
    body > nav > section {
        display: grid;
        margin: 0px 12px 0px 12px;
    }
    
    body > footer {
        grid-column-start: column-line-1;
        grid-column-end: column-line-4;
        grid-row: row-line-5;
        background:#eeeeee;
    
    }
    
    body > footer > section {
        margin: 0px 12px 0px 12px;
    }
    
    
    @media screen and (max-width: 479px) {
        header {
            grid-column-start: column-line-1;
            grid-column-end: column-line-4;
        }
        main {
            grid-column-start: column-line-1;
            grid-column-end: column-line-4;
            grid-row: row-line-2;
        }
        aside {
            grid-column-start: column-line-1;
            grid-column-end: column-line-4;
            grid-row: row-line-3;
        }
        nav {
            grid-column-start: column-line-1;
            grid-column-end: column-line-4;
            grid-row: row-line-4;
        }
    }
    
    @media screen and (min-width: 480px) and (max-width: 639px) {
        nav {
            grid-column: column-line-1;
            grid-row: row-line-2;
        }
        aside {
            grid-column: column-line-1;
            grid-row-start: row-line-3;
            grid-row-end: row-line-5;
        }
        main {
            grid-column: column-line-2 / column-line-4;
            grid-row-start: row-line-1;
            grid-row-end: row-line-5;
        }
    }
    
    @media screen and (min-width: 640px) {
        header {
            grid-column-start: column-line-1;
            grid-column-end: column-line-4;
        }
        nav {
            grid-column: column-line-1;
            grid-row-start: row-line-2;
            grid-row-end: row-line-5;
        }
        aside {
            grid-column: column-line-3;
            grid-row-start: row-line-2;
            grid-row-end: row-line-5;
        }
        main {
            grid-column: column-line-2;
            grid-row-start: row-line-2;
            grid-row-end: row-line-5;
        }
    }
    
    
    
    
    
        
        
        
        
        
        
        
        Golden Grid - CSS Responsive Grid Layout. Simple. Clean. Golden.
        
    
    
        

    Page Name

    2 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    3 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    Footer

    Footer Element. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

提交回复
热议问题