找回密码
 立即注册

QQ登录

只需一步,快速开始

阿凡佬

中级会员

43

主题

152

帖子

761

积分

中级会员

积分
761
阿凡佬
中级会员   /  发表于:2022-4-10 13:05  /   查看:8680  /  回复:40
本帖最后由 阿凡佬 于 2022-4-10 13:24 编辑

上一周的分享取得了不错的反响,为了让大家做出更美观的系统为了产品周报的那1000金币,我决定把这个系列继续做下去,尽量保持每周日更新一期内容

这期分享之前我发的贴子 纯CSS锤子风格日历 中的日历是如何制作的。
原生的日历,是这样的
image.png945164489.png
第一步万年不变,写选择器。
通过F12检查元素发现,这个日历有4个组成部分,分别是
image.png875434265.png
这只是其中一个状态,当你点击顶栏的放大和缩小按钮后,还能跳出一个月份选择器,它的类名为gcim-calendar__year-view,
image.png850297546.png image.png362095336.png
再来分析按钮状态,众所周知,按钮有5个状态:Normal(一般态), Hover(鼠标经过时), Active(激活时), Focus(焦点停留时), Disabled(不可用时) 有些人说是4个状态, disabled不算,这里不作讨论。一般来说,这5个状态中的后四个都会用4个伪类表示,分别是 :hover, :active, :focus, :disable 。
现在让我们来看下在这个日历中,是怎么表示的
image.png149430235.png image.png272696837.png
我们发现这个日历中按钮的选择状态样式并不是用伪类表示,而是直接用了类名去赋予按钮属性。这样一来,就更简单了。
一通分析下来,我们的主体部分的选择器就写出来了
  1. .gcim-calendar__month-body__week-title{/*星期几的那个几*/}
  2. .gcim-calendar__month-body__normal-day{/*日期*/}
  3. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day{/*本月日*/}
  4. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__trailing-day{/*非本月日*/}
  5. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__today{/*今日*/}
  6. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__selected-day{/*选择日*/}
  7. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day.gcim-calendar__month-body__focusd-day{/*焦点日*/}
  8. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day.gcim-calendar__month-body__focusd-day.gcim-calendar__month-body__today{/*即是焦点日又是今日*/}
复制代码

这里分享一个验证你写的选择器正确与否的方法:在调试工具Ctrl-F查找,输入你写的选择器,文档里会直接标出命中的元素。
image.png91301573.png

选择器都出来了,那还等什么,开始改吧~!
  1. .gcim-calendar__month-body__week-title{
  2.     /*星期*/
  3.     background:white;
  4.     border-top: #dfdfdf solid 0.5px;
  5.     font-size:13px;
  6.     COLOR:#666666
  7. }
  8. .gcim-calendar__month-body__normal-day{
  9.     /*日*/
  10.     width:36px;
  11.     height: 36px;
  12.     font-weight:600;
  13.     font-size:16px;
  14.     color:#5e5e5e;
  15.     border: #dfdfdf solid 0.5px;
  16.     transition: all .2s;
  17. }
  18. .gcim-calendar__month-body__normal-day:hover{
  19.     box-shadow: 1px 1px 2px 0 #dcdcdc inset;
  20.     background: #f3f3f3;
  21. }
  22. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day{
  23.     /*本月日*/
  24. }
  25. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__trailing-day{
  26.     /*非本月日*/
  27.     background:#FAFAFA;
  28.     color:#C4C4C4;
  29. }
  30. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__today{
  31.     /*今日*/
  32.     font-weight:800;
  33.     color: #1750d7b3;
  34.     text-shadow: 0.025rem 0.05rem 0.1rem #fff, 0 0 black;
  35. }
  36. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__selected-day{
  37.     /*选择日*/
  38.     color:white;
  39.     background-image: linear-gradient(#6c9af2,#4b7ae9 90%);
  40.     border: #485b9e solid 0.5px;
  41.     text-shadow: -0.05rem -0.1rem 0 rgb(0 0 0 / 30%);
  42.     box-shadow:1px 1px 1px 0 rgba(0,0,0,0.5) inset;
  43. }
  44. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day.gcim-calendar__month-body__focusd-day{
  45.     /*焦点日*/
  46.     background:white;
  47.     font-weight:800;
  48.     color: #1750d7b3;
  49.     text-shadow: 0.025rem 0.05rem 0.1rem #fff, 0 0 black;
  50.     box-shadow: 0px 0px 2px 1px #4b7ae9 inset;
  51. }
  52. .gcim-calendar__month-body__normal-day.gcim-calendar__month-body__common-day.gcim-calendar__month-body__focusd-day.gcim-calendar__month-body__today{
  53.     /*即是焦点日又是今日*/
  54.     color:white;
  55.     background-image: linear-gradient(#6c9af2,#4b7ae9 90%);
  56.     border: #485b9e solid 0.5px;
  57.     text-shadow: -0.05rem -0.1rem 0 rgb(0 0 0 / 30%);
  58.     box-shadow:1px 1px 1px 0 rgba(0,0,0,0.5) inset;
  59. }
复制代码
一顿魔改之后,有点雏形出来了
image.png325205992.png image.png327592772.png
这时候我们发现一个问题,无论怎么设置日期的宽度,它始终不能超过27.42,它也并没有被设置max-width,是哪里出问题了吗?
这时候我们就要分析它的布局方式了。我们看到它的元素标签是td,说明套着它的是一个table,而table如果未设置width,其中td的宽度将会根据内容自动,也就是说,我们无法直接通过td的width直接设置单元格宽度。
image.png935194396.png
其实,我现在可以简单粗暴地,直接用一句
  1. table.gcim-calendar__month-body{
  2.     width: 250px;
  3. }
复制代码

但如果我以后想改变内部单元格的宽度,我又要找到这个属性,并且拿出计算器算出最合适的宽度。那么有没有什么一劳永逸的办法呢,当然:
  1. table.gcim-calendar__month-body{
  2.    width:max-content;
  3. }
复制代码
将width设置为max-content后,table的宽度将跟从内部td的宽度。这样一来,我以后想调整单元格宽度,我就可以直接调整单元格的width属性了,而不用去找到它的父元素table.
image.png33293761.png
第一部分的工作已完成,看着效果还不错,接下来我们要把顶栏的几个按钮和下面的选择今日按钮美化一下
还是先写选择器:
  1. .gcim-calendar__header{/*顶栏*/}
  2. .gcim-calendar__header .cell{/*顶栏按钮*/}
  3. .gcim-calendar__header .gcim-calendar__header__text{/*顶栏-年份*/}
  4. .gcim-calendar__today-button{/*选择今日按钮*/}
复制代码
然后开始写属性。。。
这时候大家是不是觉得,选择器好写,但是写属性就好困难,一次一次修改工程文件中的css,一次次调试,大了调小宽了调窄,黑了调白亮了调暗,实在太麻烦。这里我分享一个所见即所得的调试办法:
首先,在工程内创建一个空白的CSS文件,比如说StyleSheet.css。然后把这个文件,在浏览器调试工具里找出来,具体位置在
网站根目录->GeneratedResources->UserFile
image.png892806396.png
我们就可以在这个文件里随时修改,并且修改出来的属性能够实时地反映到页面上。我在写这篇帖子的时候,就是用这个办法,实时调试,给大家做演示。是不是很方便呢?
并且写完了之后,右键,另存为保存到本地,然后替换工程内原本的文件,这样就完成了一次更新。

回到正题。。
  1. .gcim-calendar__header{
  2.     /*顶栏*/
  3.     height:36px;
  4. }
  5. .gcim-calendar__header .cell{
  6.     /*顶栏按钮*/
  7.     width: 32px;
  8.     height: 32px;
  9.     background-size:28px 28px;
  10.     background-position:center center;
  11.     float: left;
  12. }
  13. .gcim-calendar__header .gcim-calendar__header__text{
  14.     /*顶栏-年份*/
  15.     font-size: 16px;
  16.     font-weight:600;
  17.     padding-top:4px;
  18.     text-shadow: 0.05rem 0.05rem 0.1rem #fff, 0 0 black;
  19.     color: rgba(0, 0, 0, .6) !important;
  20.     margin-left:24px;
  21.     width:120px;
  22.     height:32px;
  23. }
  24. .gcim-calendar__today-button{
  25.     /*选择今日按钮*/
  26.     font-size: 16px;
  27.     font-weight:600;
  28.     padding-top:6px;
  29.     text-shadow: 0.05rem 0.05rem 0.1rem #fff, 0 0 black;
  30.     color: rgba(0, 0, 0, .6) !important;
  31.     height:32px;
  32.     margin:4px;
  33.     margin-right:0px;
  34.     border:#DFDFDF solid 0.5px;
  35.     border-radius:8px;
  36. }
复制代码

经过不断地修改,调整,终于调试出一个看着最顺眼的排版(也就只是调了下字体大小和对齐方式)
image.png417716369.png
不过底部那个选择今日,我样式既然做成按钮了,怎么能缺了交互动作呢?那么接下来给底部的按钮添加:hover伪类以及:active伪类,这样这个按钮在鼠标移过和按下时,能给用户一个反馈
  1. .gcim-calendar__today-button:hover{
  2.     color:white !important;
  3.     background-image: linear-gradient(#6c9af2,#4b7ae9 90%);
  4.     border: #485b9e solid 0.5px;
  5.     text-shadow: 0.1rem 0.05rem 0 rgb(0 0 0 / 30%);
  6.     box-shadow:1px 1px 1px 0 rgba(255,255,255,0.5) inset;
  7. }
  8. .gcim-calendar__today-button:active{
  9.     color:white !important;
  10.     background-image: linear-gradient(#4b7ae9,#6c9af2 90%);
  11.     border: #485b9e solid 0.5px;
  12.     text-shadow: -0.05rem -0.1rem 0 rgb(0 0 0 / 30%);
  13.     box-shadow:1px 1px 1px 0 rgba(0,0,0,0.5) inset;
  14. }
复制代码

image.png467415770.png image.png982023620.png
挺好看,binglingbingling的,嘿嘿。

其实到这,我们可以结束今天的分享了,看下最终的成果,感觉很有成就感有木有!
image.png151061705.png





但是气氛都烘托到这了,再不添加“亿点点”特效,感觉都对不太起这么好看的界面

1.gif

以下是工程文件和源码(工程文件是8.0的)
游客,如果您要查看本帖隐藏内容请回复


老生常谈一句:大家的回帖就是我发帖的动力
另外,我也是在不断学习的过程中,给大家分享的同时也为了巩固我自身的技术。如果有误区,欢迎大佬指正!

评分

参与人数 3金币 +1000 满意度 +10 收起 理由
13794930121 + 5
Chelsey.Wang + 1000 赞一个!
孤狼 + 5

查看全部评分

40 个回复

倒序浏览
阿凡佬
中级会员   /  发表于:2022-4-10 13:18:10
沙发
回复 使用道具 举报
tominson
银牌会员   /  发表于:2022-4-10 13:33:49
板凳
厉害
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2022-4-10 14:56:51
地板
膜拜大佬
回复 使用道具 举报
amtath悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-10 17:27:52
5#
顶楼主啦..希望楼主多发精品好帖啦.....
回复 使用道具 举报
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-15 11:00:41
6#
必须给大佬安排一个
回复 使用道具 举报
18992270255
高级会员   /  发表于:2022-4-19 10:46:18
7#
不错,学习了
回复 使用道具 举报
happyboyjia
高级会员   /  发表于:2022-4-22 09:37:44
8#
这个要好好学习的
回复 使用道具 举报
chenjamo
金牌服务用户   /  发表于:2022-4-22 17:27:32
9#
本帖最后由 chenjamo 于 2022-4-22 17:30 编辑

看了下工程文件,里面直接将CSS文件放在工程文件中发布,也没有在CSS类名中添加,那是否活字格的CSS先调用的自定义发布的CSS
回复 使用道具 举报
137294886
金牌服务用户   /  发表于:2022-4-22 23:49:52
10#
确实不错,学习了
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部