【三石jQuery视频教程】03.创建垂直时间表(Timeline)

视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html



大家好,欢迎来到【三石jQuery视频教程】,我是您的老朋友 - 三生石上。

今天,我们要通过基本的HTML、CSS、jQuery来实现垂直时间表,先来看下最终的产品:

简单起见,时间表中的每个节点用一张图片代替,实际应用中可能是标题-图片-正文的样子。

Step1:网站目录

网站目录非常简单,包含三部分:lesson3.html 文件、lib 目录和 images 目录。

其中 lesson3.html 包含了一个页面最基本的组成部分,正确的设置 DOCTYPE 有助于页面在现代浏览器中正确渲染。

<!DOCTYPE html>
<html>
<head>
    <title>03.创建垂直时间表(Timeline) - 三石jQuery视频教程</title>
    
</head>
<body>

    
</body>
</html>

lib 目录仅包含了最新的 jQuery 库;images 目录包含使用到的 9 张图片。 

Step2:页面结构

为页面添加基本的 html 标签。

  1. 为了实现时间标签的双色背景,嵌套了两层 div,分别用 CSS 样式类 year 和 year-inner 来标示
  2. 时间表中的事件列表用 ul.events li 进行组织
  3. 最后给最外层的时间表节点定义样式类 timeline
<!DOCTYPE html>
<html>
<head>
    <title>03.创建垂直时间表(Timeline) - 三石jQuery视频教程</title>
</head>
<body>
    <div id="main">
        <h2>
            03.创建垂直时间表(Timeline) - 三石jQuery视频教程
        </h2>
        <div class="timeline">
            <div class="year">
                <div class="year-inner">
                    2015
                </div>
            </div>
            <ul class="events">
                <li>
                    <img src="images/1.jpg">
                </li>
                <li>
                    <img src="images/2.jpg">
                </li>
                <li>
                    <img src="images/3.jpg">
                </li>
                <li>
                    <img src="images/4.jpg">
                </li>
            </ul>
            <div class="year">
                <div class="year-inner">
                    2014
                </div>
            </div>
            <ul class="events">
                <li>
                    <img src="images/5.jpg">
                </li>
                <li>
                    <img src="images/6.jpg">
                </li>
                <li>
                    <img src="images/7.jpg">
                </li>
                <li>
                    <img src="images/8.jpg">
                </li>
                <li>
                    <img src="images/9.jpg">
                </li>
            </ul>
        </div>
    </div>
</body>
</html>

  

此时的页面显示效果:

Step3:时间标签的样式

下面我们来创建时间标签的样式,为了实现双色圆形背景,我们做了如下努力:

  1. 固定宽度和高度,并让 border-radius 等于宽度和高度的 1/2 来实现圆形背景
  2. 两个背景的颜色直接取自 FineUI(专业版)的版本更新页面
  3. 为了让时间标签(2015)在 year-inner 中居中显示,分别定义 line-height 和 text-align 属性
  4. 为了让 year-inner 在 year 中居中,我们使用了绝对定位(top:50%; margin-top:-25px;)的 CSS 小技巧
 <style>
	body {
		background-color: #efefef;
	}

	#main {
		margin: 20px auto;
	}

	.timeline .year {
		background-color: #AFDCF8;
		width: 60px;
		height: 60px;
		border-radius: 30px;
		position: relative;
		margin: 0 auto 50px;
	}

	.timeline .year-inner {
		background-color: #46A4DA;
		width: 50px;
		height: 50px;
		text-align: center;
		line-height: 50px;
		color: #fff;
		border-radius: 25px;
		position: absolute;
		top: 50%;
		margin-top: -25px;
		left: 50%;
		margin-left: -25px;
	}

	.events img {
		width: 100%;
	}
</style>

  

此时的页面显示效果:

Step4:让图片左右显示

为了让图片均匀的左右显示,也就是一个左,一个右,然后再一个左,一个右,所以需要明确区分奇数和偶数的 li 标签,我们使用 jQuery 来完成这一任务:

<script src="lib/jquery.js"></script>
<script>
	$(function() {
		$(‘.timeline .events li:nth-child(2n)‘).addClass(‘alt‘);
	});
</script>

jQuery 的子选择器 :nth-child(2n) 用来选择列表中的偶数项,并添加样式类 alt。   

下面,我们通过 CSS 定义,左右两侧的图片分别占据 40% 的宽度,也就是说中间预留了 20% 的宽度,用一个图示来简单说明:

使用 float 样式来使图片左右显示,具体的 CSS 定义:

.timeline .events li {
	width: 40%;
	margin-bottom: 100px;
	border: solid 1px #AFDCF8;
	padding: 10px;
	border-radius: 5px;
	float: left;
	clear: left;
}

.timeline .events li.alt {
	float: right;
	clear: right;
	margin-top: 50px;
	margin-bottom: 50px;
}

  

此时的页面效果:

Step5:时间标签后面的垂直背景线

本来我们可以使用一个绝对定位的 div 节点来实现这个效果,不过更简便的办法是 :after 伪选择器,先来看 CSS 定义:

.timeline {
	overflow: hidden;
	position: relative;
}

.timeline:after {
	content: "";
	position: absolute;
	width: 6px;
	height: 100%;
	background-color: #AFDCF8;
	top: 0;
	left: 50%;
	margin-left: -3px;
}

:after 伪选择器用来在某个元素的内容后面插入新的内容:

  • content 定义要插入的新内容,这里我们不需要插入任何文本内容,所以留空
  • 将新内容绝对定位,就和使用正常 div 节点一样
  • 为了让垂直背景线水平居中显示,我们同样使用了前面提到的 top:50% + margin-top 的小技巧

此时的页面效果:

 

Step6:垂直背景线到图片的连接线

使用类似的伪选择器,我们很容易相对于每个 li 节点,定义连接线:

.timeline .events li {
	width: 40%;
	margin-bottom: 100px;
	border: solid 1px #AFDCF8;
	padding: 10px;
	border-radius: 5px;
	float: left;
	clear: left;
	position: relative;
}

.timeline .events li:after {
	content: "";
	position: absolute;
	top: 30px;
	left: 100%;
	width: 25%;
	height: 6px;
	background-color: #AFDCF8;
}

特别注意的几点:

  • left: 100% 用来表示连接线紧靠图标的右侧显示
  • width: 25% 用来定义连接线的宽度,恰好占据图片右侧到垂直背景线的距离

一个巨大的疑问号为什么是 25%,而不是其他的数值?

其实这是精心安排的:

再来回忆下,图片占据了 40% 的宽度,那么连接线应该占据整个宽度的 10% = (100% - 40% * 2) / 2,这是显而易见的!

但是 li:after 的绝对定位(position:absolute)是相对于第一个非静态定位的父节点而言的,而这儿父节点就是 .timeline .events li 本身,所以连接线相对于 li 的宽度:

40% * x = 10% =  (100% - 40% * 2) / 2,可以计算出 x = 25%

====

假设,图片的 CSS 中将宽度设为 45%,那么这里的 li:after 的 width 就应该是 ((100% - 45% * 2) / 2) / 45% = 11.1%

此时的页面效果:

Step7:自定义尺寸盒模型(box-sizing)

虽然我们信誓旦旦的说,那个 25% 是精心安排的,但是实际的效果的却相差甚远,连接线的宽度明显宽了很多。

如果这是我们算一下图片的实际宽度,就会发现图片的实际宽度是 40%,这不包含内边距(padding) 和 边框(border)!

这时我们就需要重置页面上所有元素的 box-sizing,从默认值 content-box 改为 border-box,而这个做法也是推荐的做法。

很多注明的 CSS 框架(包括现在比较流行的 BootStrap)都将这一规则作为默认的样式:

* {
    box-sizing: border-box;
}

下面来简单比较下这两则的区别:

  • content-box:为元素设定的宽度和高度不包含内边距和边框
  • border-box:为元素设定的宽度和高度包含内边距和边框  

此时的页面效果:

  

  

Step8:完整的 CSS 代码

为右侧图片添加连接线也很简单,下面看看完整的 CSS 代码:

* {
	box-sizing: border-box;
}

body {
	background-color: #efefef;
}

#main {
	margin: 20px auto;
}

.timeline {
	overflow: hidden;
	position: relative;
}

.timeline:after {
	content: "";
	position: absolute;
	width: 6px;
	height: 100%;
	background-color: #AFDCF8;
	top: 0;
	left: 50%;
	margin-left: -3px;
	z-index: 0;
}

.timeline .year {
	background-color: #AFDCF8;
	width: 60px;
	height: 60px;
	border-radius: 30px;
	position: relative;
	margin: 0 auto 50px;
	clear: both;
	z-index: 1;
}

.timeline .year-inner {
	background-color: #46A4DA;
	width: 50px;
	height: 50px;
	text-align: center;
	line-height: 50px;
	color: #fff;
	border-radius: 25px;
	position: absolute;
	top: 50%;
	margin-top: -25px;
	left: 50%;
	margin-left: -25px;
}

.timeline .events {
	list-style-type: none;
	padding: 0;
	margin: 0;
	clear: both;
}

.timeline .events li {
	width: 40%;
	margin-bottom: 100px;
	border: solid 1px #AFDCF8;
	padding: 10px;
	border-radius: 5px;
	float: left;
	clear: left;
	position: relative;
}

.timeline .events li:after {
	content: "";
	position: absolute;
	top: 30px;
	left: 100%;
	width: 25%;  /* 10% = 1 * 40% * 25% */
	height: 6px;
	background-color: #AFDCF8;

}

.timeline .events li.alt {
	float: right;
	clear: right;
	margin-top: 50px;
	margin-bottom: 50px;
}

.timeline .events li.alt:before {
	content: "";
	position: absolute;
	top: 30px;
	left: -25%;
	width: 25%;
	height: 6px;
	background-color: #AFDCF8;
}

.events img {
	width: 100%;
}

  

最终的页面效果:

源码和视频下载

源码和视频下载地址请自行到视频中查找! 三石出品,必属精品!

时间: 2024-10-10 06:28:39

【三石jQuery视频教程】03.创建垂直时间表(Timeline)的相关文章

【三石视频教程】当FineUIPro遇到ReportViewer

FineUIPro 下个版本(v2.8.0)即将支持 ReportViewer,为此三石特别制作了一期视频教程,供大家参考. 运行效果图: 视频下载:http://pan.baidu.com/s/1gdAEOPd

从零开始学习jQuery (三) 管理jQuery包装集

本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着学习如何管理jQuery包装集, 比如添加,删除,切片等. 二.前言 本系列的2,3篇上面列举了太多的API相信大家看着眼晕. 不过这些基础还必须要讲, 基础要扎实.其实对于这些列表大家可以跳过, 等以后用到时再回头看或者查询官方的API说明. 本章内容很少, 主要讲解动态创建元素和操作jQuery

jQuery系列 第三章 jQuery框架操作CSS

第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScript设置标签的样式相对来说比较麻烦,而如果需要批量的设置多个标签的样式那需要写很多代码,使用jQuery可以为我们简化该过程.     使用原生的方式来设置标签的样式(代码示例) 1 <body> 2 <div>我是div标签</div> 3 <button id=

jQuery实现的div垂直水平居中实例代码

jQuery实现的div垂直水平居中实例代码:在窗口中有一个div元素,下面就介绍一下如何使用jQuery将其设置为水平垂直居中对齐,希望能够给需要的朋友带来一定的帮助.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&quo

JQuery根据Json创建表格

$(function () { var getjson = { "百度": "http://www.baidu.com", "新浪": "http://www.sina.com.cn", "腾讯": "http://www.qq.com" }; $('#btn').click(function () { var tbobj = $('<table border="1&qu

6款强大的 jQuery 网页布局创建及优化插件

本文将为您介绍6款功能强大的jQuery插件,它们能够帮助您方便快捷地创建复杂的网络布局并进行优化. 1.UI.Layout 该插件可以创建任何你想要的UI形式:包括从简单的标题或侧边栏,到一个包含工具栏,菜单,帮助面板,状态栏,子表格等复杂的应用.     2.jQUery Masonry 动态布局jQuery插件,折叠式CSS浮动面板. 3.jLayout 可提供四种网页元素布局算法.     4.jQuery pageSlide 该插件灵感来自于Aza Raskin的UI工作中.他最近发表

jQuery EasyUI 窗口 – 创建简单窗口

jQuery EasyUI 窗口 – 创建简单窗口 创建一个窗口(window)非常简单,我们创建一个 DIV 标记: <div id="win" class="easyui-window" title="My Window" style="width:300px;height:100px;padding:5px;"> Some Content. </div> 现在运行测试页面,您会看见一个窗口(win

三、jQuery选择器

注意: jQuery获取的永远是对象,即使网页上没有此元素 不能这样判断 if($('#tt')){} 应根据元素长度来判断 if($('#tt').length > 0){} 或转化成DOM来判断 if($('#tt')[0]){} 一.基本选择器 基本选择器是jQuery中最常用的选择器,也是最简单的选择器,它通过元素id,class,和标签名等来查找DOM元素. 二.层次选择器 三.过滤选择器 1.基本过滤选择器 2.内容过滤选择器 3.可见性过滤选择器 4.属性过滤选择器 5.子元素过滤

jQuery漂亮图标的垂直导航菜单

效果展示 http://hovertree.com/texiao/nav/3/ jQuery漂亮图标的垂直导航菜单 是一款当鼠标滑过菜单项时,会有一个背景遮罩层跟着鼠标移动,效果非常炫酷,图标还是矢量图. 源码下载 效果图如下: HTML文件代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv=&