实现一个简单的栅格系统

关于栅格系统

相信大家都用过 Bootstrap (神马!你没用过?这么流行你还不快去试试),栅格系统就是 Bootstrap 的核心,现在许多 UI 库中也增加了对栅格系统的支持。

栅格系统是通过对元素增加各种不同的类名从而在不同的屏幕宽度下实现不同的效果,从而实现响应式的功能。

前言

今天,我自己模仿实现了一个简单的栅格系统,戳这里看效果,看起来栅格系统很高大上,其实栅格系统的实现很简单,主要用到的还是浮动。这篇文章就是打算记录一下我是如果实现一个简单的栅格系统的。

开始

实现栅格系统,首要要确定两个内容。

  • 我们打算将屏幕分为几类,每一类的类前缀是什么。

  • 我们打算支持的列数是多少。

这里我选择与 bootstrap 相同, 即将屏幕分为四类:超小屏幕 手机 (<768px) 、小屏幕 平板 (≥768px) 、 中等屏幕 桌面显示器 (≥992px) 、 大屏幕 大屏幕显示器 (≥1200px) ,类前缀分别为:.col-xs-.col-sm-.col-md-.col-lg- 。列数 12。

实现

确定了我们的屏幕分类和列数之后,我们就可以开始实现了。首先我们给所有栅格系统的 class 增加浮动

.col-sm-1, .col-sm-2, ... , .col-lg-12 {float: left;
}

声明了浮动,接下来我们来声明宽度。我们从最小屏幕开始,最小屏幕不需要使用 @media来声明, 即如果我们只声明了最小宽度时他的类名,其元素将在所有情况下生效。

.col-sm-1 {width: 8.333333%  // 十二分之一
}
.col-sm-2 {width: 16.66667%  // 十二分之二
}
// ...
.col-sm-12 {width: 100%  // 十二分之十二
}

这样最小宽度的情况我们就写好了。接下来我们来写其他情况

其他情况也需要声明浮动和宽度,但是需要声明最小屏幕宽度,我们以中等屏幕宽度举例,中等屏幕宽度即为屏幕大于992px的情况:

@media (min-width:992) {.col-md-1 {width: 8.333333%  // 十二分之一}.col-md-2 {width: 16.66667%  // 十二分之二      }// ....col-md-12 {width: 100%  // 十二分之十二}
}

其他情况同理,这样我们就能实现一个简单的栅格系统很啦。

疑问

很多小伙伴肯定会想,我们只声明了最小宽度,却没有声明最大宽度,这里是不是有问题呀。

其实不是的。这里的想法是这样的,比如我们这里写了中等屏幕宽度和超小屏幕宽度两种情况的 class ,那在超小屏幕上和小屏幕上都会按超小屏幕声明的宽度来执行。而在中等屏幕宽度和大屏幕上,中等屏幕宽度的声明会覆盖超小屏幕的声明,则会按中等屏幕声明来执行。

好高明啊哈哈哈~

最后

虽然现在的 UI 库大都会封装这些功能,但是自己实现一个了解一下原理对我们也是大有碑益的,至少~不会让我们变成一个“胶水程序员”。

实现一个简单的栅格系统相关推荐

  1. 一个简单的blog系统(九) 增加标签和标签页面

    一个简单的blog系统(九) 增加标签和标签页面 1.现在,我们来给博客添加标签和标签页面. 假定每篇文章最多只有两个标签,当单机主页左侧标签页链接的时候,跳转到标签页并且列出所有已经有的标签,当单击 ...

  2. 一个简单的blog系统(十一) 增加文章检索功能

    一个简单的blog系统(十一) 增加文章检索功能 1. 现在,我们就来给博客添加文章检索功能.假定,可以根据关键字魔木查询文章标题,也就是说支持正则表达式,而且字母不会区分大小写. 1.1 首先,我们 ...

  3. 一个简单的blog系统(四) 实现用户页面和文章页面

    一个简单的blog系统(四) 实现用户页面和文章页面 1.现在我们来给博客添加用户页面和文章页面. 1.1 所谓用户页面就是当单击某个用户名链接时,跳转到:域名/u/用户名,并且跳出该用户的所有文章. ...

  4. 15.立体几何——几何为一个简单的立体系统,左右测验,视差的深度_3

    目录 几何为一个简单的立体系统 左右 测验 视差的深度 结论 几何为一个简单的立体系统 我们要做的是,对一个非常简单的立体系统,逐步进行几何变换.我们要做的第一件事,是假设光轴是平行的.就是这些(如图 ...

  5. 一个简单的blog系统(十二) 增加友情链接页面

    一个简单的blog系统(十二) 增加友情链接页面 1.首先,我们打开header.ejs,在其中添加一行代码,并作出响应修改: <li><a href="/links&qu ...

  6. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  7. 一个简单的监控系统的设计

    一个简单的监控系统的设计 # // // 为了实现上级需要一个监控的需求,设计一个小的监控系统,结构如下图. // 虽然是一个比较简单的功能,但是仍然对代码的结构的关系进行了设计,使其具备良好的可扩展 ...

  8. 在kaldi工具包使用小数字语料库创建一个简单的ASR系统(番外篇)

    相信很多人已经看过kaldi英文官网上关于该系统的搭建流程.虽然官方已经写的很通俗易懂,但是第一次接触的话还是不可避免的会碰到许多坑.恰巧最近实践了一下,把整个实践过程写了下来.一是方便自己后续回顾本 ...

  9. 用Java实现一个简单的考试系统

    用Java实现一个简单的考试系统 需求分析 设计思路 编码实现 需求分析 该考试系统可以实现的功能和系统要求应该包括: 学生:登录.考试.考试后查看成绩 老师:出题目(往题库中添加新题目).批阅卷子( ...

最新文章

  1. 当你累了,准备放弃时,看看这个吧!!!
  2. 一篇讲清:数据采集中的安全与隐私
  3. ACL 2020 《Cross-Modality Relevance for Reasoning on Language and Vision》论文笔记
  4. 推荐一套高效的码字工具
  5. [MySQL优化案例]系列 -- 试用TCMalloc
  6. java url 双引号_java - Java在POST请求中发送带有转义双引号的JSON字符串[duplicate] - 堆栈内存溢出...
  7. Java——网络编程(实现基于命令行的多人聊天室)
  8. 【Shell教程】三----运算符,条件判断
  9. 怀旧服小号最多的服务器,魔兽世界怀旧服小号战场将成为GZS量产高督的基地?...
  10. LeetCode513 找左下角的值
  11. Drupal的taxonomy_manager模块合并分类的方法
  12. 【ZOJ 4070】Function and Function
  13. php推荐位调用,推荐位数据循环调用
  14. nginx解析php详细教程,Nginx与PHP交互过程步骤详解
  15. [Python36] 01 start
  16. 项目整体流程及项目经理工作职责
  17. SylixOS学习二—— SylixOS启程之旅_SylixOS 系统概览
  18. 新月已冉冉升起.ALOKEX永续合约统领市场已成定局
  19. Atom编辑器折腾记_(22)二次翻译快捷键【追加1.8新版本新增快捷键】
  20. php 井字棋,怎样用JS做出井字棋游戏

热门文章

  1. 计算机应用202001常规,《计算机应用基础》试卷
  2. 为 UOS 浏览器增加屏蔽广告功能
  3. poj 2245 lotto
  4. LOJ#538. 「LibreOJ NOIP Round #1」数列递推
  5. Python 3.8+numpy查找矩阵中所有鞍点
  6. flume avro java_Flume的Avro Sink和Avro Source研究之一: Avro Source
  7. 案例:马斯洛需求层次理论——西游记的5人团队
  8. 还不知道怎么制作用户体验地图?这份超全攻略送给你
  9. 软件设计师学习笔记-数据库系统
  10. Linux知识点总结