使用CSS Flexbox创建简洁时间轴

使用CSS Flexbox创建简洁时间轴

在网页设计中,时间轴是一种常见且有效的方式来展示事件的顺序和进程。本文将介绍如何使用CSS Flexbox创建一个简洁优雅的时间轴,无需复杂的JavaScript代码。
在这里插入图片描述

基本HTML结构

首先,我们需要创建基本的HTML结构:

html复制<div class="timeline"><div class="events"><div class="event life"><svg class="marker" xmlns="http://www.w3.org/200![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d6842b409144c9f99fd8aa5bdc24d89.png#pic_center)
0/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>1989</time><div class="text"><p>I was born in the north of Sweden</p></div></div></div><!-- 更多事件... --></div>
</div>

CSS样式

1. 创建时间线

使用::before伪元素创建时间线:

css复制.events {position: relative;
}.events::before {content: "";position: absolute;top: 0;height: 100%;width: 1px;background: white;
}

2. 事件对齐

使用Flexbox对齐事件:

css复制.event {display: flex;align-items: baseline;
}.event .marker {position: relative;left: -6px;
}

3. 垂直间距

使用Flexbox控制事件间的垂直间距:

css复制.events {display: flex;flex-direction: column;row-gap: 1em;
}

4. 响应式设计

使用媒体查询实现响应式设计:

css复制@media (min-width: 700px) {.events::before {left: 50%;}.event .marker {order: 1;}.event .content {width: 50%;text-align: right;padding-inline: 1em;}.event:nth-child(even) {flex-direction: row-reverse;}.event:nth-child(even) .content {text-align: left;}.event:nth-child(even) .marker {left: 6px;}
}

完整CSS代码

以下是完整的CSS代码:

css复制.events::before {content: "";position: absolute;top: 0;height: 100%;width: 1px;background: var(--color-hr);
}.events {position: relative;display: flex;margin-block: 0.5em;flex-direction: column;row-gap: 1em;
}.event {display: flex;align-items: baseline;
}.event .marker {position: relative;left: -6px;
}.event.life .marker {fill: var(--melange_b_yellow);
}.event.programming .marker {fill: var(--melange_b_magenta);
}.event.family .marker {fill: var(--melange_b_red);
}.content time {font-family: concourse_4, Helvetica, sans-serif;font-weight: bold;
}@media (min-width: 700px) {.events::before {left: 50%;}.event .marker {order: 1;}.event .content {width: 50%;text-align: right;padding-inline: 1em;}.event:is(.programming, .work, .projects) {flex-direction: row-reverse;}.event:is(.programming, .work, .projects) .content {text-align: left;}.event:is(.programming, .work, .projects) .marker {left: 6px;}
}

通过这些CSS样式,我们创建了一个简洁、响应式的时间轴。在小屏幕上,事件垂直排列;在大屏幕上,事件分布在时间线的两侧。这种设计既美观又实用,能够有效地展示事件的顺序和重要性。

使用Flexbox使得创建这样的时间轴变得相对简单,它简化了许多曾经复杂的布局任务。通过调整颜色、字体和间距,你可以进一步自定义时间轴以适应你的网站设计。

demos实现

HTML实现

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>交互式时间轴演示</title><style>/* CSS 样式将在这里 */</style>
</head>
<body><h1>交互式时间轴演示</h1><div class="controls"><label>时间轴颜色:<input type="color" id="lineColor" value="#ffffff"></label><label>事件间距:<input type="range" id="eventSpacing" min="0.5" max="3" step="0.1" value="1"></label><label>响应式布局宽度:<input type="number" id="responsiveWidth" min="300" max="1200" step="50" value="700">px</label></div><div class="timeline"><div class="events"><div class="event life"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>1989</time><div class="text"><p>我出生在瑞典北部</p></div></div></div><div class="event programming"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2005</time><div class="text"><p>开始学习编程</p></div></div></div><div class="event life"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2010</time><div class="text"><p>搬到瑞典南部</p></div></div></div><div class="event programming"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2015</time><div class="text"><p>开始职业编程生涯</p></div></div></div><div class="event family"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2020</time><div class="text"><p>组建家庭</p></div></div></div></div></div><script>// JavaScript 代码将在这里</script>
</body>
</html>

CSS实现

body {font-family: Arial, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;background-color: #f0f0f0;color: #333;
}h1 {text-align: center;
}.controls {background-color: #e0e0e0;padding: 10px;margin-bottom: 20px;border-radius: 5px;
}.controls label {display: block;margin-bottom: 10px;
}.timeline {background-color: #fff;padding: 20px;border-radius: 5px;box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}.events::before {content: "";position: absolute;top: 0;height: 100%;width: 2px;background: var(--line-color, #fff);
}.events {position: relative;display: flex;margin-block: 0.5em;flex-direction: column;row-gap: var(--event-spacing, 1em);
}.event {display: flex;align-items: baseline;
}.event .marker {position: relative;left: -6px;
}.event.life .marker { fill: #ffd700; }
.event.programming .marker { fill: #ff00ff; }
.event.family .marker { fill: #ff0000; }.content time {font-weight: bold;
}@media (min-width: 700px) {.events::before {left: 50%;}.event .marker {order: 1;}.event .content {width: 50%;text-align: right;padding-inline: 1em;}.event:nth-child(even) {flex-direction: row-reverse;}.event:nth-child(even) .content {text-align: left;}.event:nth-child(even) .marker {left: 6px;}
}

js实现

document.addEventListener('DOMContentLoaded', function() {const lineColor = document.getElementById('lineColor');const eventSpacing = document.getElementById('eventSpacing');const responsiveWidth = document.getElementById('responsiveWidth');const timeline = document.querySelector('.timeline');const events = document.querySelector('.events');function updateTimeline() {timeline.style.setProperty('--line-color', lineColor.value);events.style.setProperty('--event-spacing', `${eventSpacing.value}em`);document.body.style.setProperty('--responsive-width', `${responsiveWidth.value}px`);}lineColor.addEventListener('input', updateTimeline);eventSpacing.addEventListener('input', updateTimeline);responsiveWidth.addEventListener('input', updateTimeline);updateTimeline();
});

完整demo

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>交互式时间轴演示</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;background-color: #f0f0f0;color: #333;}h1 {text-align: center;}.controls {background-color: #e0e0e0;padding: 10px;margin-bottom: 20px;border-radius: 5px;}.controls label {display: block;margin-bottom: 10px;}.timeline {background-color: #fff;padding: 20px;border-radius: 5px;box-shadow: 0 2px 5px rgba(0,0,0,0.1);}.events::before {content: "";position: absolute;top: 0;height: 100%;width: 2px;background: var(--line-color, #fff);}.events {position: relative;display: flex;margin-block: 0.5em;flex-direction: column;row-gap: var(--event-spacing, 1em);}.event {display: flex;align-items: baseline;}.event .marker {position: relative;left: -6px;}.event.life .marker { fill: #ffd700; }.event.programming .marker { fill: #ff00ff; }.event.family .marker { fill: #ff0000; }.content time {font-weight: bold;}@media (min-width: var(--responsive-width, 700px)) {.events::before {left: 50%;}.event .marker {order: 1;}.event .content {width: 50%;text-align: right;padding-inline: 1em;}.event:nth-child(even) {flex-direction: row-reverse;}.event:nth-child(even) .content {text-align: left;}.event:nth-child(even) .marker {left: 6px;}}</style>
</head>
<body><h1>交互式时间轴演示</h1><div class="controls"><label>时间轴颜色:<input type="color" id="lineColor" value="#ffffff"></label><label>事件间距:<input type="range" id="eventSpacing" min="0.5" max="3" step="0.1" value="1"></label><label>响应式布局宽度:<input type="number" id="responsiveWidth" min="300" max="1200" step="50" value="700">px</label></div><div class="timeline"><div class="events"><div class="event life"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>1989</time><div class="text"><p>我出生在瑞典北部</p></div></div></div><div class="event programming"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2005</time><div class="text"><p>开始学习编程</p></div></div></div><div class="event life"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2010</time><div class="text"><p>搬到瑞典南部</p></div></div></div><div class="event programming"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2015</time><div class="text"><p>开始职业编程生涯</p></div></div></div><div class="event family"><svg class="marker" xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="6"></circle></svg><div class="content"><time>2020</time><div class="text"><p>组建家庭</p></div></div></div></div></div><script>document.addEventListener('DOMContentLoaded', function() {const lineColor = document.getElementById('lineColor');const eventSpacing = document.getElementById('eventSpacing');const responsiveWidth = document.getElementById('responsiveWidth');const timeline = document.querySelector('.timeline');const events = document.querySelector('.events');function updateTimeline() {timeline.style.setProperty('--line-color', lineColor.value);events.style.setProperty('--event-spacing', `${eventSpacing.value}em`);document.body.style.setProperty('--responsive-width', `${responsiveWidth.value}px`);}lineColor.addEventListener('input', updateTimeline);eventSpacing.addEventListener('input', updateTimeline);responsiveWidth.addEventListener('input', updateTimeline);updateTimeline();});</script>
</body>
</html>

参考文章: Jonas Hietala: A simple timeline using CSS flexbox

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/446649.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT招聘乱象的全面分析

近年来&#xff0c;IT行业的招聘要求似乎越来越苛刻&#xff0c;甚至有些不切实际。许多企业在招聘时&#xff0c;不仅要求前端工程师具备UI设计能力&#xff0c;还希望后端工程师精通K8S服务器运维&#xff0c;更有甚至希望研发经理掌握所有前后端框架和最新开发技术。这种招聘…

AI大模型是怎么运作的?深入解析

在当今这个日新月异的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;如同一位隐形的助手&#xff0c;悄然渗透进我们生活的方方面面&#xff0c;其影响力日益显著。这位“隐形助手”背后的工作原理究竟是怎样的呢&#xff1f;接下来&#xff0c;本文将从AI的基本原理…

随机多智能体系统中的自然策略能力

本文探讨了在随机多智能体系统中采用自然策略进行PATL及PATL逻辑的模型检验问题。研究发现&#xff0c;当活跃联盟被限于确定性策略时&#xff0c;NatPATL的模型检验问题是NP完全的&#xff1b;在同样的限制条件下&#xff0c;NatPATL的复杂度则为2NEXPTIME。若不限制策略类型&…

2024全面大模型学习指南

前言 随着人工智能技术的迅猛发展&#xff0c;大模型&#xff08;Large Models&#xff09;已成为这一领域的新宠。从GPT系列到BERT&#xff0c;再到各类变体&#xff0c;大模型以其强大的能力吸引了无数开发者和研究者的目光。那么&#xff0c;作为一个零基础的学习者&#x…

2024 年 04 月编程语言排行榜,PHP 排名创新低?

编程语言的流行度总是变化莫测&#xff0c;每个月的排行榜都揭示着新的趋势。2024年4月的编程语言排行榜揭示了一个引人关注的现象&#xff1a;PHP的排名再次下滑&#xff0c;创下了历史新低。这种变化对于PHP开发者和整个技术社区来说&#xff0c;意味着什么呢&#xff1f; P…

ChatGPT国内中文版镜像网站整理合集(2024/10/06)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…

LLMs训练避坑帖——如何高效 LLMs pretrain?

LLM训练-pretrain 这篇文章介绍下如何从零到一进行 pretrain 工作。 类似的文章应该有很多&#xff0c;不同的地方可能在于&#xff0c;我并不会去分析 pretrain 阶段的核心技术&#xff0c;而是用比较朴素的语言来描述这个大工程的每一块砖瓦。我的介绍偏方法论一些&#xf…

服务器信息安全可视化:增强风险监测

通过图扑可视化技术&#xff0c;将服务器的安全状态以图形化方式展示&#xff0c;帮助安全团队实时监控潜在威胁&#xff0c;提高快速响应能力&#xff0c;保障数据和系统的安全性与稳定性。

【MATLAB源码-第248期】基于matlab的EMD算法+ICA算法轴承故障分析。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 经验模态分解&#xff08;EMD&#xff09;与轴承故障识别 EMD的基本原理 EMD 是一种自适应的信号分解技术&#xff0c;最初由 Huang 等人在 1998 年提出&#xff0c;旨在分析非线性和非平稳信号。传统的信号处理方法通常假设…

绘制YOLOv11模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线

一、本文介绍 本文用于绘制模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线。用以比较不同算法的收敛速度,最终精度等,并且能够在论文中直观的展示改进效果。支持多文件的数据比较。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化…

E41.【C语言】练习:斐波那契函数的空间复杂度的计算及函数调用分析

1.题目 求下列代码的时间复杂度 long long f(size_t n) {if(n < 3)return 1;return f(n-1) f(n-2); } 2.解 显然是递归算法(递归讲解见35.【C语言】详解函数递归),可以画个二叉树分析 Fib嵌套函数调用细则的分析 进入f(n),返回f(n-1)f(n-2),注意:一次只能调用一个函数…

漫途以产品为导向,为集成商客户提供稳定、可靠的物联网终端设备!

无锡漫途科技有限公司成立于2014年8月至今已经十年有余&#xff0c;在这期间公司始终把“1344”战略作为核心指导方向。 “1”代表只做一件事&#xff0c;即以“物联网基础大数据服务商”为主要业务定位&#xff0c;围绕中国制造 2025&#xff0c;推动中国工业智能化转型升级&…

电脑录屏怎么录视频和声音?新手必看的屏幕录制技巧

我们在生活或工作中&#xff0c;经常需要用到屏幕录制&#xff0c;如用来制作教学视频、分享游戏直播、记录软件操作教程等&#xff0c;但对于新手来说&#xff0c;如何在电脑上录制既清晰又带有声音的视频&#xff0c;可能还是一个挑战。今天&#xff0c;我们就来分享三个实用…

华为OD机试 - 小明找位置 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

一句话就把HTTPS工作原理讲明白了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 上午好&#xff0c;我的网工朋友。 在当今互联网高度发达的时代&#xff0c;信息安全已成为不容忽视的重要议题。 随着越来越多的个人信息和敏感…

朗伯特反射模型

免责声明&#xff1a;本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

如何快速入门VCU应用层软件开发?(34篇实例讲解+软件开发测试方法+工具使用)

最近&#xff0c;用一个多月的时间总结了VCU应用层软件开发的基本流程&#xff0c;架构&#xff0c;关键模块的控制策略及Simulink建模方法、测试方法及相关工具的使用。如何快速入门VCU应用软件开发层软件开发&#xff0c;通过本篇文章可以给你答案。文章标题为超链接&#xf…

【MATLAB代码,带TDOA数据导入】TDOA三维空间的位置(1主锚点、3副锚点),多个时间点、输出位置的坐标

作品简介 【MATLAB代码&#xff0c;带TDOA数据导入】TDOA求三维下的位置&#xff0c;通过四个锚节点&#xff08;1主锚点、3副锚点)的信号传播时间差定位。 一次性求解多个时间点的位置&#xff0c;输出位置图像和点的坐标。 产品特点 精准定位&#xff1a;有效消除测距误差…

Centos7 开启Crash dump

Centos7 开启Crash dump 1. 安装依赖2. 修改grub3. kdump自动启动4. 手动测试kdump是否产生5. 确认crash报错内容 1. 安装依赖 yum install -y kexec-tools crash2. 修改grub 在grub中修改GRUB_CMDLINE_LINUX的值,加入crashkernel参数,值为内存/4 即1G内存crashkernel设置为2…

spring boot 2.7整合Elasticsearch Java client + ingest attachment实现文档解析

一、软件环境 软件版本号备注Spring boot2.7.23.x版本建议使用ElasticSearch8.xElasticSearch7.17.4ElasticSearch 7.x 可使用JDK 8 ElasticSearch 8.x 要求使用JDK 11 二、安装ElasticSearch 下载地址&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/el…