资讯专栏INFORMATION COLUMN

创建自己的 CSS 网格系统【转载 | 译】

gecko23 / 836人阅读

摘要:为了防止这种情况,给提供的最小高度并使它们浮动。基本网格准备好了一些额外的列内容样式使我们的网格系统响应调整我们的网格以实现移动布局非常简单。注意本指南只是创建自己响应式网格系统的起点。

此文翻译自 Creating Your Own CSS Grid System | Jan,英文不好如有错误 ✖ ,请指正。

CSS 网格已经存在很长时间了。它们通常捆绑在 Bootstrap 等框架中。我不是一个 Bootstrap 仇恨者,但如果你真正需要的只是一个网格,有时使用一个框架就“太过分”了。以下是如何从头开始制作自己的 CSS 网格。

CSS 网格的元素

我们可以看到,基本网格只包含几个元素:

Container(容器)

row(行)

Column(列)

Gutter(列之间的空间)

容器(Container)

容器的目的是设置整个网格的宽度。容器的宽度通常为 100%,但你可能希望设置一个最大宽度。

.grid-container {
    width: 100%;
    max-width: 1200px;
}
列之间的空间(gutter)

row 元素的目的是使其中的列不会溢出到其他行上。为此,我们将使用 clearfix hack 来确保行内的所有内容都保留在行内。

/* 我们的 cleafix hack  */
.row: before,
.row: after {
    content: "";
    display: table;
    clear: both;
}
列(Column)

column 是网格中最复杂的部分。首先,有几种不同的方法在 CSS 中定位 column,然后有各种宽度要考虑,以及响应式设计等因素。在本教程中,我们将定义 column 并赋予它们宽度。

列定位(Column Positioning)

float, inline-block, display: table, display: flex。这些都是在 CSS 中定位 column 的不同方法。这些方法中最容易出错和最广泛使用的是“浮动”方法。如果我们的列是空的,那么我们的浮动列将堆叠在一起。为了防止这种情况,给 column 提供 1px 的最小高度并使它们浮动。

[class*="col-"] {
    float: left;
    min-height: 1px; 
}
列宽(Column Widths)

要查找一列的宽度,我们所要做的就是将总列数除以容器的宽度。在我们的例子中,容器的宽度是 100%,我们想要6 列,所以 100/6 = 16.66,所以我们的基本列宽度是 16.66%。

[class*="col-"] {
    float: left;
    min-height: 1px; 
    width: 16.66%; 
}

这当然只是一个开始。如果我们想要一个 2 列宽的部分,我们必须创建一个 2 列宽的 column。计算非常简单。

我们在使用这些列组合时唯一考虑的是,一行中的总列数最多为 6(或者总列数是多少)。

响应式系统中内边距问题

在 W3C 标准盒模型条件下,在响应式系统中给宽度单位为百分比的元素设置内边距很麻烦。幸运的是,使用 border-box 模型,我们可以轻松设置内边距。

 /* 在网格内的所有元素上改变盒模型 */
.grid-container *{
  box-sizing: border-box; 
}

[class*="col-"] {
  float: left;
  min-height: 1px; 
  width: 16.66%; 
  /* 设置内边距 */
  padding: 12px;
}

使用 * {box-sizing: border-box;} 在 CSS 中改变所有元素的盒模型。

基本网格准备好了

col-1

col-1

col-1

col-1

col-1

col-1

col-2

col-2

col-2

col-3

col-3

CSS
.grid-container{
  width: 100%;
  max-width: 1200px;
}

/* cleafix hack */
.row:before,
.row:after {
  content:"";
  display: table ;
  clear:both;
}

[class*="col-"] {
  float: left;
  min-height: 1px;
  width: 16.66%;
  padding: 12px;
  background-color: #FFDCDC;
}

.col-1{ width: 16.66%; }
.col-2{ width: 33.33%; }
.col-3{ width: 50%;    }
.col-4{ width: 66.66%; }
.col-5{ width: 83.33%; }
.col-6{ width: 100%;   }

.outline, 
.outline *{
  outline: 1px solid #F6A1A1;
}

/* 一些额外的列内容样式 */
[class*="col-"] > p {
  background-color: #FFC2C2;
  padding: 0;
  margin: 0;
  text-align: center;
  color: white;
}
HTML

col-1

col-1

col-1

col-1

col-1

col-1

col-2

col-2

col-2

col-3

col-3

使我们的网格系统响应

调整我们的网格以实现移动布局非常简单。我们所要做的就是调整列的宽度。为了简单起见,我将为 800px 以下的屏幕加倍列宽。唯一需要注意的是一些例外,例如:大于 col-3 的列在视口小于 800px 时铺满。

@media all and (max-width:800px){
    .col-1{ width: 33.33%;  }
    .col-2{ width: 50%;     }
    .col-3{ width: 83.33%;  }
    .col-4{ width: 100%;    }
    .col-5{ width: 100%;    }
    .col-6{ width: 100%;    }

    .row .col-2:last-of-type{
        width: 100%;
    }

    .row .col-5 ~ .col-1{
        width: 100%;
    }
}

对于小于 650px 的屏幕。

@media all and (max-width:650px){
    .col-1{ width: 50%;     }
    .col-2{ width: 100%;    }
    .col-3{ width: 100%;    }
    .col-4{ width: 100%;    }
    .col-5{ width: 100%;    }
    .col-6{ width: 100%;    }
}

我们现在创建了自己的响应式网格系统,而不使用框架。

col-1

col-1

col-1

col-1

col-1

col-1

col-2

col-2

col-2

col-3

col-3

col-4

col-2

col-5

col-1

col-6

注意:本指南只是创建自己响应式网格系统的起点。它不是一个框架,甚至不是一个完整的解决方案,我希望它能够揭开 CSS 网格的神秘面纱。

参考

【1】Creating Your Own CSS Grid System | Jan

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/117304.html

相关文章

  • FED之必备技能

    摘要:在我们深入研究这项新鲜的技术之前,让我们先快速的复习原理的相关知识。同时,希望本文能对大家有所帮助。工欲善其事,必先利其器。 flex.css快速入门,极速布局 什么是flex.css? css3 flex 布局相信很多人已经听说过甚至已经在开发中使用过它,但是我想我们都会有一个共同的经历,面对它的各种版本,各种坑,傻傻的分不清楚,flex.css就是对flex布局的一种封装,通过简洁...

    Zachary 评论0 收藏0
  • FED之必备技能

    摘要:在我们深入研究这项新鲜的技术之前,让我们先快速的复习原理的相关知识。同时,希望本文能对大家有所帮助。工欲善其事,必先利其器。 flex.css快速入门,极速布局 什么是flex.css? css3 flex 布局相信很多人已经听说过甚至已经在开发中使用过它,但是我想我们都会有一个共同的经历,面对它的各种版本,各种坑,傻傻的分不清楚,flex.css就是对flex布局的一种封装,通过简洁...

    williamwen1986 评论0 收藏0
  • 】渐进增强键盘导航

    摘要:键盘访问的升级提供快捷方式不过,在访问网格时,通过键盘进行两个方向的移动会不会更好呢使用一点做渐进增强,我们做到了,可以使用鼠标或方向键访问网格。在本例总共,查找表名字是。 厚着脸做推广,个人网站 http://www.wemlion.com/。 本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/1179原文:https://www.christ...

    Juven 评论0 收藏0
  • 】编写更好CSS必备40个工具

    摘要:一个叫的人用纯重绘并模拟了种不同的移动设备包括可以给你的网站添加不相关的独立组件的一个库。每一个组件都是针对移动设备定制的,并且它有很多你在传统的框架中看不到的功能。如果你用开发移动优先的网站,并想要网站正常运行在低版本的上,可以考虑。 众所周知,CSS是非常棒的,它使网站看起来很漂亮,可以为网站添加动画,并让呈现和内容分离。去了解CSS的一切是非常难做到的,它只会变得更加困难,因为我...

    moven_j 评论0 收藏0

发表评论

0条评论

gecko23

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<