3 行 CSS 代码实现日历界面

开发 测试
日历组件大家应该很熟悉了,但你想过如何实现日历的界面布局吗?最容易想到的方法是用 table布局,毕竟它在视觉上跟表格类似。

 

[[358245]]

日历组件大家应该很熟悉了,但你想过如何实现日历的界面布局吗?最容易想到的方法是用 table布局,毕竟它在视觉上跟表格类似。但是从现代 CSS 的角度来说,table多用来展示列表数据,而不是用作布局方案。因为它需要很多额外的 DOM 元素,而且样式控制上也不够灵活。另一种方法是用 flex布局,这也算是 CSS3 给我们带来的福利,让界面布局工作简化了许多。

本文打算介绍一种更简单的方法,只需要 3 行核心 CSS 代码即可实现日历界面!你可能猜到了,它就是 Grid布局。

先看 HTML 部分:

  1. <div class="calendar-wrapper"
  2.   <h1>Decemeber</h1> 
  3.   <ul class="calendar"
  4.     <li class="weekday">一</li> 
  5.     <li class="weekday">二</li> 
  6.     <li class="weekday">三</li> 
  7.     <li class="weekday">四</li> 
  8.     <li class="weekday">五</li> 
  9.     <li class="weekday">六</li> 
  10.     <li class="weekday">日</li> 
  11.  
  12.     <li class="first-day">1</li> 
  13.     <li>2</li> 
  14.     <li>3</li> 
  15.     <!-- ... --> 
  16.     <li>29</li> 
  17.     <li>30</li> 
  18.     <li>31</li> 
  19.   </ul> 
  20. </div> 

为简单起见,这里把一周七天和日期全都放进一个列表里了。CSS 代码更简单了:

  1. .calendar { 
  2.   display: grid; // 1 
  3.   grid-template-columns: repeat(7, 1fr);  // 2 
  4. .first-day { 
  5.   grid-column-start: 2; // 3 

稍微解释下,第一行就是将列表声明为grid容器。第二行的属性 grid-template-columns用来设置每列的宽度。一周有 7 天,因此需要 7 列。也可以这样写:

  1. grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr; 

或者

  1. grid-template-columns: 40px 40px 40px 40px 40px 40px 40px; 

是不是显得重复啰嗦?所以有了 repeat()简写方法,用于定义多个等宽的列就方便多了。这里的1fr 是新的 CSS 弹性长度单位,具体用法可以参考 [https://www.w3.org/TR/css3-grid-layout/#fr-unit]。

最后,由于大部分月份的 1 号并不是周一,所以要用grid-column-start属性设置1号这个单元格的位置。

Bingo!一个极简日历就完成了!

极简日历

当然了,头部的背景色还是需要额外代码的,但这不是关键所在。想要了解更多关于强大的 CSS Grid 布局的知识,推荐参考 MDN 文档 [https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout]

 本文转载自微信公众号「1024译站」,可以通过以下二维码关注。转载本文请联系1024译站公众号。

 

责任编辑:武晓燕 来源: 1024译站
相关推荐

2013-04-08 14:07:28

CSS

2024-02-20 12:49:00

CSS函数前端

2015-05-27 07:44:34

日历控件 jQueryCSS3

2013-04-10 09:28:24

CSS3CSS

2022-04-09 09:11:33

Python

2022-03-26 22:28:06

加密通信Python

2018-01-23 09:17:22

Python人脸识别

2017-10-17 13:30:32

Python人脸识别

2023-05-15 10:41:13

CSS深色模式

2021-12-16 06:21:16

React组件前端

2014-06-19 10:02:32

Haskell代码

2022-04-15 08:07:21

ReactDiff算法

2020-08-19 10:30:25

代码Python多线程

2021-09-09 05:57:57

JS模块打包器前端

2022-02-08 12:30:30

React事件系统React事件系统

2021-09-09 06:55:43

Web剪辑视频

2019-11-12 13:06:20

代码开发工具

2020-04-02 15:39:51

代码编译器前端

2012-04-10 10:49:45

WEBCSS

2010-09-13 14:17:42

CSS纵向导航菜单
点赞
收藏

51CTO技术栈公众号