Bootstrap学习笔记(二)---常见工具和流程导航范例
使用bootstrap框架避免不了写CSS,当CSS文件较大时,会发现维护起来很麻烦,一些默认值,如行高、背景色、标注颜色、字号等信息往往反复出现,还有一些大体上一致,只有小部分不同的样式定义,这就需要css预处理器的帮助,常见的有两种Sass和Less,前者使用ruby写的,需要安装ruby,后者似乎是用js开发,用npm直接安装就可以了。考虑到安装过程,我比较喜欢less。
less最好先安装nodejs,使用其带的npm来安装,nodejs从nodejs.org下载,这是一个服务器端的JS框架,可以用来提供Web服务和做后端开发。less入门可以参考http://less.bootcss.com/,这里有较为详细的描述。这里就不描述了。
安装之后,我在netbeans里使用less,它会调用系统的lessc来生成的css程序,当保存less文件时,会自动生成css文件。这需要配置一下,在项目上右键-》属性-》css预处理程序,将保存时编译LESS文件打勾,就可以了。

在开发过程中,发现一个较长的流程操作,需要分步来执行,我感觉微信公众平台的处理方式比较好,其界面如下:

要实现这个效果,本来打算用图片来实现的,后来发现用CSS+JS也可以实现,我实现的效果如下

这里实现的也非常简单,用了框架的属性来生成了箭头,实际上是两个div,生成了两个类似箭头的东西,下面可以看到效果

其css样式如下
.arrow-next {
height: 0px;
width: 0px;
border: solid 1.5em;
border-color: #fff;
border-left-color: #54b003;
}
.arrow-current {
height: 0px;
width: 0px;
border: 1.5em solid;
border-color: #54b003;
border-left-color: #fff;
}
arrow-next产生一个箭头,arrow-current产生一个凹陷,原理也很简单,一个长宽为0的div,border很宽,通过其颜色配置,产生这种效果,剩下的就是通过js将这两个div的位置移动到相应的步骤前后,注意处理一下第一步,就可以了,所有代码如下
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>流程导航范例</title>
<!-- Bootstrap -->
<link href="css/bootstrap.css" rel="stylesheet">
<style type="text/css">
.row.row-nav {
border: solid 1px #54b003;
}
.col-nav {
height: 3em;
padding: 0px;
border: 0px;
text-align: center;
font-size: 14px;
line-height: 3em;
}
.col-nav.current {
background-color: #54b003;
}
.arrow-next {
height: 0px;
width: 0px;
border: solid 1.5em;
border-color: #fff;
border-left-color: #54b003;
}
.arrow-current {
height: 0px;
width: 0px;
border: 1.5em solid;
border-color: #54b003;
border-left-color: #fff;
}
</style>
</head>
<body>
<br>
<br>
<br>
<br>
<div class="container">
<div class="row row-nav">
<div class="col-md-3 col-nav current" id="nav-1">
第一步
</div>
<div class="col-md-3 col-nav" id="nav-2">
第二步
</div>
<div class="col-md-3 col-nav" id="nav-3">
第三步
</div>
<div class="col-md-3 col-nav" id="nav-4">
第四步
</div>
</div> <div class='row'>
<div class="arrow-next" id='arrow-next'></div>
<div class='arrow-current' id='arrow-current'></div>
</div>
<br>
<br>
<div class='row'>
<div class="col-xs-6 col-sm-4 col-md-3">
<button id='b1' class='btn btn-success'>第一步</button>
</div>
<div class="col-xs-6 col-sm-4 col-md-3">
<button id='b2' class='btn btn-success'>第二步</button>
</div>
<div class="col-xs-6 col-sm-4 col-md-3">
<button id='b3' class='btn btn-success'>第三步</button>
</div>
<div class="col-xs-6 col-sm-4 col-md-3">
<button id='b4' class='btn btn-success'>第四步</button>
</div>
</div>
<br>
<br>
<div class='row'>
<div class='col-md-4 col-md-offset-4'>
<button id='clear_all' class='btn btn-success form-control'>清除样式</button>
</div>
</div>
</div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/jquery-1.11.1.min.js"></script> <script>
$(function () { $('[id^=nav-]').click(function () {
var position = $(this).position();
var str = 'left:' + position.left + ",top" + position.top;
str = str + ',heigth:' + $(this).height() + ',width:' + $(this).width();
alert(str);
}); $('button[id^=b]').click(function () {
clearClass();
var b = $(this).attr('id');
var index = b.substr(-1, 1);
var current_div = 'nav-' + index;
var next_div = 'nav-' + (parseInt(index) + 1);
$('#' + current_div).addClass('current');
cposition = $('#' + current_div).position();
nposition = $('#' + next_div).position(); cwidth = $('#' + current_div).width();
left = parseInt(cposition.left) + parseInt(cwidth); if (parseInt(index) === 1)
{
$('#arrow-next').css({'position': 'absolute', 'left': left, 'top': nposition.top, 'zindex': 10}).show();
$('#arrow-current').hide();
}
else if (parseInt(index) === 4)
{
$('#arrow-next').css({'position': 'absolute', 'left': (left + 1) + 'px', 'top': cposition.top}).show();
$('#arrow-current').css({'position': 'absolute', 'left': cposition.left, 'top': cposition.top}).show();
} else
{
$('#arrow-next').css({'position': 'absolute', 'left': left, 'top': nposition.top, 'zindex': 10}).show();
$('#arrow-current').css({'position': 'absolute', 'left': cposition.left, 'top': cposition.top}).show();
} if ($(window).width() < 992)
{
$('#arrow-next').hide();
$('#arrow-current').hide();
}
}); $('#clear_all').click(function () {
clearClass();
});
}); function clearClass()
{
$('[id^=nav-]').each(function () {
$(this).removeClass('current').removeClass('arrow-current').removeClass('arrow-next');
});
}
</script>
</body>
</html>
这段代码也挺简单了,虽然花了我一下午的时间,水平有限,努力学习吧。
Bootstrap学习笔记(二)---常见工具和流程导航范例的更多相关文章
- Bootstrap学习笔记(二) 表单
在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...
- bootstrap学习笔记<二>(标题,段落样式)
标题.样式:class="h1"~class="h6" bootstrap中重新定义了h1~h6标签,具体差别如下: 在bootstrap中其他任何标签使用cl ...
- Bootstrap学习笔记(8)--响应式导航栏
说明: 1. 响应式导航栏,就是右上角的三道杠,点一下下方出现隐藏的导航栏.如果屏幕够大就显示所有的导航选项,如果屏幕小比如手机,就显示部分,剩下的放到三道杠里隐藏. 2. 外面套一个大的div,其实 ...
- bootstrap学习笔记<十>(按钮组,导航)
1)按钮组.样式:class="btn-group" <div class="btn-group"> <button class=" ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
随机推荐
- 打印中文dict list的各种姿势
在开发过程中,我们经常需要打印一些变量的值,便于调试.这个时候就会发现如果在dict list这些容器中,如果包含中文字符,不管是str类型,还是unicode类型,都打印不出来.如下: >&g ...
- 前端使用d3.js调用地图api 进行数据可视化
前段时间自己研究了demo就是把某个区域的某个位置通过经纬度在地图上可视化.其实就是使用了第三方插件,比现在比较火的可视化插件d3.js echart.js.大致思路就是,把要用到的位置的geojso ...
- 洛谷 P3391 【模板】文艺平衡树
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...
- linux centos ubentu安装IPython四种方法
IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPytho ...
- CYQ.Data 正式支持 DotNET Core 版本发布
闲话几句: 自从上周开始,IOS人员逝去,就开始接手IOS的代码了. 并开始整理IOS的代码(包括当时一开始设计的开发框架). 在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及 ...
- 随笔-SQL的三种存储引擎即三种类型的表
MYSQL 的环境变量:......server/bin下 引擎(Engine):是电子平台上开发程序或系统的核心组件.利用引擎,开发者可迅速建立.铺设程序所需的功能,或利用其辅助程序的运转.一般而言 ...
- php RAS加密类代码
通过openssl实现的签名.验签.非对称加解密,需要配合x.509证书(如crt和pem)文件使用. <?php /** * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符 ...
- PHP简单实现购物车
首先,判断是否登录.if(isset($_session['user_id'])){ 存在: 把用户id和商品id,加入购物车表}else{ 不存在:使用cookie把商品ID和主机IP放入一个数组 ...
- websocket-php
下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...
- mvc/mvvm小小的总结
mvc/mvvm 阮大神博客 mvc 分为三层,其实M层是数据模型层,它是真正的后端数据在前端js中的一个映射模型,他们的关系是:数据模型层和视图层有映射关系,model改变,view展示也会更改,当 ...