一.场景

需要实现时间轴列表,左边一串小圆点,右边是列表内容,需要小圆点位置与列表项对应,最终效果如下:

timeline

二.实现方案

有几个细节:

小圆点要与列表项对齐

首项、末项的时间线不能超出小圆点

列表项之间要有间隔

前两条是对自适应的要求,最后一条是对布局的限制

传统方案是通过列表容器生成一条足够长的竖线,然后列表项自带小圆点,再把小圆点对齐到竖线上。竖线的长度没有办法精确控制(不通过js计算的话),无法满足第二条,那么可以换个方式,让列表项自带同高度的竖线,拼接成完整的时间线

P.S.不用担心拼接出来的竖线会被看出来,一定是完美无缝的,否则浏览器不科学(两个相邻的块级元素之间不能有无法解释的缝隙吧,那么它们的border-left一定能够完美连接起来)

三.具体实现

首先确定结构,因为列表项间隔的限制,列表项需要多套一层:

.listItem>.listItemContent>.listItemContent-date+.listItemContent-content

因为用margin实现间隔的话竖线长度不对,接不起来,所以多套一层listItem,把margin换成padding。由listItem携带竖线和小圆点:

/* 列表项间隔padding-top */

.listItem {

position: relative;

padding-left: 40px;

padding-top: 4px;

}

/* 列表项自带竖线 */

.listItem:before {

content: "";

display: inline-block;

position: absolute;

top: 0;

left: 0;

width: 1px;

height: 100%;

border-right: 1px solid #f3f3f3;

left: 19px;

z-index: 1;

}

/* 列表项自带小圆点 */

.listItem:after {

content: "";

display: inline-block;

position: absolute;

width: 8px;

height: 8px;

background-color: #e0e0e0;

border-radius: 4px;

left: 16px;

top: 50%;

margin-top: -2px;

z-index: 1;

}

注意小圆点的margin-top,这个-2px不是目测的,与列表项间隔和小圆点高度有关:

// top 50%, marginTop -50%是小圆点相对于listItem竖直居中

h = listItemContent.height

pt = listItem.paddingTop

ch = 小圆点.height

y = (h + pt)/2 - ch/2

// 我们想要小圆点相对于listItemContent竖直居中

// 要去掉pt带来的向下偏移offsetY = pt/2 所以

top 50%, marginTop -ch/2 + offsetY

top 50%, marginTop -4 + 2

top 50%, marginTop -2

这是margin转padding套一层带来的麻烦

然后加上首项、末项的时间线不能超出小圆点的限制:

.listItem-first:before {

height: 50%;

top: 50%;

}

.listItem-last:before {

height: 50%;

}

最后添上高亮的效果:

/* 高亮小圆点 */

.listItem.highlight:after {

-webkit-box-sizing: border-box;

-moz-box-sizing: border-box;

box-sizing: border-box;

width: 16px;

height: 16px;

background-color: #3d93fd;

border: 4px solid #88bdfe;

border-radius: 8px;

left: 12px;

-webkit-box-shadow: 0 0 0 3px #d8e9ff;

box-shadow: 0 0 0 3px #d8e9ff;

z-index: 2;

}

/* 高亮列表项 */

.listItem.highlight > .listItemContent {

background-color: #3d93fd;

color: #fff;

}

/* 高亮列表项内容 */

.listItem.highlight .listItemContent-date{

color: #fff;

}

四.Demo

点击列表项高亮,列表项内容支持HTML和图片自适应

写在最后

最近在啃JS动画原理,感谢月影前辈的分享,功力深厚

之前看过几遍了,一直没有理解透彻,直到自己实现才发现数学公式与easing算子的关系

时间刻度线css,纯CSS时间轴列表相关推荐

  1. 轮回眼css,纯CSS如何实现血轮眼+轮回眼特效(代码详解)

    本篇文章给大家介绍一下使用纯CSS实现血轮眼+轮回眼特效的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 效果(完整代码在底部) 其实实现并不难,都是重复的代码比较多. 实现(可 ...

  2. html 文本溢出 兼容,CSS - 纯css实现多行文本溢出省略(兼容所有浏览器)

    前言 多行文本超出高度限制出现省略号 , 移动端多为webkit内核的 , 有扩展属性-webkit-line-clamp , 但并不是CSS规范中的属性 , PC端往往要借助js去实现这一效果,但麻 ...

  3. b站图片css,纯CSS打造BiliBili样式博客主题

    前言 一直以来,我都在思考如何减少不必要的JS代码,仅通过CSS来实现博客园主题美化.CSS有很多魔法代码,例如:before,iconfont,order,等等,利用好这些技巧,也能实现很好美化效果 ...

  4. 修改echarts的x轴y轴的刻度和刻度线文本颜色和xy轴的轴线颜色和标题title的字体颜色

    1,x轴y轴都是一样的: 1.1修改刻度文本颜色: 找到xAxis和yAxis: 添加如下代码:(和data和type同级并列) axisLabel: {show: true,textStyle: { ...

  5. CSS:纯css样式实现左右两侧文字中间填充点或线(仿账单报表样式),自适应

    效果图: 实现原理很简单,使用flex布局,中间的填充使用border属性,看似是很多点,其实是一个盒子的border. 并且自动适应填充. html代码: <div class="t ...

  6. html hover图片效果,CSS第9款:Imagehover.css 纯CSS打造的图片悬停效果

    用过很多图片县停效果,说实在话,很多都不好用.我大致说一下原因: 1.对基础CSS影响比较大: 2.附加的插件太多: 3.还要引用有一些JS. 而CSS3的诞生,对我们前端开发来说,有了质的飞跃!下边 ...

  7. window lcd css,纯CSS实现液晶字体效果

    使用css实现液晶字体效果 /*The Digits*/.light{width:300px;background:#f4f5f7;height:60px;text-align:center; }.d ...

  8. html三角形下拉列表,CSS—纯CSS实现三角图形(常用于带指引效果的小三角,下拉列表的小三角等)...

    常用情况,如下图 图片.png 图片.png CSS代码 .we-chat-info::after{ position: absolute; top: 109px; right: -8px; cont ...

  9. webkit内核 css,纯CSS改变webkit内核浏览器的滚动条样式

    基于webkit的浏览器现在可以自定义其滚动条的样式了,实现代码如下: 复制代码代码如下: ::-webkit-scrollbar/*整体部分*/ { width: 10px; height:10px ...

  10. 纯CSS样式实现圆角边框

    圆角应用的比较广泛,比如说一些说明的div,或者模块的div,圆角的button等. 公司的页面一般是用图片实现的,坑爹的是这次的图片整个边框的上面或整个都是一个图片,我现在要调整大小受到图片的限制了 ...

最新文章

  1. 龙岩学院和三明学院计算机专业,龙岩学院和三明学院哪个比较好?
  2. python如何做散点图-【Python】使用scatter()绘制散点图
  3. 信息系统项目管理师案例分析
  4. linux c配置文件书写格式,读取配置文件源代码[linux c]
  5. 推荐一款日志切割神器,好用到爆!!
  6. .NET项目升级手记:可为空引用
  7. java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备
  8. bug篇——mysql排序混乱问题
  9. android 关闭jack_安卓编译 Jack server 错误问题解决办法
  10. 软件工程毕业设计选题java_软件工程毕业设计选题
  11. Spring-core源码 -- AlternativeJdkIdGenerator Spring的UUID生成器类
  12. LM2596、LM2576
  13. linux安装rz sz命令不能用,Linux下如何安装rz和sz命令
  14. 扩展YouTube视频频道,提高业务增量
  15. 原子范数最小化(Atomic Norm Minimization)
  16. 大工邮箱收件服务器,Outlook 2010 设置邮箱详细步骤
  17. 消费升级背景下零食行业发展报告_趋势 | 保健食品 “零食化”升级
  18. find基础命令与提权教程
  19. 【高等数学】伯努利方程及其求解方法
  20. meshgrid()+plt.contourf()用法

热门文章

  1. 北风:个人如何在职场中野蛮生长
  2. LaTeX 多图 排列
  3. python中的tenacity 的简单使用
  4. 钉钉机器人+Mac定时Launchctl
  5. 数学模型预测模型_改进著名的nfl预测模型
  6. laaS 、paaS和SaaS区别
  7. 计算机机械硬盘寿命,机械硬盘的寿命
  8. ubuntu域名解析失败解决方案
  9. Axure 8授权码
  10. 计算机文化基础项目化教程答案,第七版计算机文化基础实践教程 第3-4章习题答案及解析...