工业化、响应式的的CSS3 grid布局应用及其向后兼容问题-- 下 --(翻译自smashingmagazine,有删改)

本文深入探讨了CSS3 Grid布局在工业级项目中的应用,包括响应式设计策略、档案布局和向后兼容解决方案。通过实例演示,展示了如何创建灵活的网格系统,并使用`@supports`进行渐进式增强,确保在不同浏览器中的兼容性。同时,提到了媒体查询的使用技巧以及如何处理内容溢出和间隔线的问题。
摘要由CSDN通过智能技术生成

接上,[工业化、响应式的的CSS3 grid布局应用及其向后兼容问题– 上 –(翻译自smashingmagazine,有删改)](工业化、响应式的的CSS3 grid布局应用及其向后兼容问题– 上 –(翻译自smashingmagazine,有删改))

live example

应用先进的格子布局和功能

步骤如下:
1.从最窄的屏幕开始设计布局
2.逐渐增大屏幕,直到一切变得看上去奇怪
3.加断点
4.回到步骤2

这里写图片描述

最后的代码如下

@supports (grid-area:auto){
    @media screen and (min-width: 500px){
        .site{
            width: 70em;
            display: grid;
            grid-template-columns:15em 1fr;
            grid-template-rows:1fr minmax(1em , auto);
            grid-template-areas:'header main'
                                'header sidebar'
                                'header footer';
        }


        .site-header{
            grid-area:header;
            background: lightblue;
        }

        .site-main{
            grid-area:main;
            height: 50em;
            background: olive;
        }

        .widget-area{
            grid-area:sidebar;
            height: 20em;
            background: yellow;
        }

        .site-footer{
            grid-area:footer;
            height: 10em;
            background: grey;
        }

    }

    @media screen  and (min-width: 700px){
        .site{
            width: 90em;
            display: grid;
            grid-template-columns:20em 2fr 1fr;
            grid-template-rows: 1fr minmax(10em, auto);
            grid-template-areas:'header main sidebar'
                                'header footer footer';

        }
    }

        .site-header{
            grid-area:header;
            background: lightblue;
        }

        .site-main{
            grid-area:main;
            height: 20em;
            background: olive;
        }

        .widget-area{
            grid-area:sidebar;
            height: 20em;
            background: yellow;
        }

        .site-footer{
            grid-area:footer;
            height: 10em;
            background: grey;
        }


}

注意对每个grid item 都要设定适当的高度。而且这里的宽高如果是百分数的话,会相对于它所处的格子的大小,而不是整个父元素。

档案布局archive layout

这里写图片描述

注意,fr不会限制内容的大小,如果内容的字太多,或者因为单词太长那一行特别长,元素会占据比应有的fr更多的空间。

写媒体查询的时候,因为用的是min-width,所以要从小到大写。

如果想要item之间有间隔线,可以通过设定container的背景颜色,并给定grid-gap值来完成。

对一些特殊的post内容,可以使其占据两行,直接采用gird-column: span 2来完成。注意此时post的容器布局本身必须不小于2行。

@media screen and (min-width: $query__medium) {
    .archive-view {
        .site-main {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            grid-gap: 1px;
            background: grey;

            @media screen and (min-width: $query__wide) {
                grid-template-columns: repeat(3, 1fr);
            }

            @media screen and (min-width: $query__x_wide) {
                grid-template-columns: repeat(4, 1fr);
            }

            @media screen and (min-width: $query__xx_wide) {
                grid-template-columns: repeat(5, 1fr);
            }
        }

        .entry-title {
            word-break: break-word;
        }
        .post {
            background: white;
        }

        .category-featured {
            grid-column: span 2;
        }
    }
}

单一post或页面布局

body:not(.archive-view) {
    @supports (grid-area: auto) {
        @media screen and (min-width: $query__medium) {
            .site-main {
                display: grid;
                grid-template-columns: 1fr minmax(auto, 46em) 1fr;
                align-content: start;
                grid-template-areas:
                    ". post ."
                    ". nav ."
                    ". comments .";
            }
            .post {
                grid-area: post;
            }
            .post-navigation {
                grid-area: nav;
            }
            .comments-area {
                grid-area: comments;
            }
        }
    }
}

一共用到了两个grid容器,一个是整体,一个是对文章本身应用grid布局。

.post {
    grid-area: post;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
}

这里写图片描述

这一条务必牢记在心:
不可以脱离文章的内容,重新定位它。

对有featured 图片的post,再做一次。
如果没有grid-gap,而featured image 因为是空元素,空间会自动折叠。但有gap在,就需要重新定义规则。

post {
    grid-area: post;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-areas:
        "header header header header"
        "meta meta meta meta"
        "featimg featimg featimg featimg"
        "content content content content"
        "footer footer footer footer";

    @media screen and (min-width: $query__wide) {
        grid-template-areas:
            "header header header header"
            "featimg featimg featimg featimg"
            "meta content content content"
            "footer footer footer footer";
    }
}

.entry-header {
    grid-area: header;
}

.entry-meta {
    grid-area: meta;
}

.featured-image {
    grid-area: featimg;
}

.entry-content {
    grid-area: content;
}

.entry-footer {
    grid-area: footer;
}

总结

不再利用笨拙的hack方法,而是用简练干净的grid来完成布局。如果坚持向后兼容,你也可以利用@supports方法来渐进式增强。

最后,实例在此,可以打开开发者工具看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值