您的位置:

首页 >

腾博会官方网 >

腾博会官方网:通过javascript进行UTF-8编码的实现方法 >

腾博会官方网:通过javascript进行UTF-8编码的实现方法

2016-11-12 10:20:06

分类:腾博会官方网

javascript的字符集:javascript程序是使用Unicode字符集编写的。Unicode是ASCII和Latin-1的超集,并支持地球上几乎所有的语言。ECMAScript3要求JavaScript必须支持Unicode2.1及后续版本,ECMAScript5则要求支持Unicode3及后续版本。所以,我们编写出来的javascript程序,都是使用Unicode编码的。UTF-8UTF-8(UTF8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字的应用中,优先采用的编码。目前大部分的网站,都是使用的UTF-8编码。将javascript生成的Unicode编码字符串转为UTF-8编码的字符串如标题所说的应用场景十分常见,例如发送一段二进制到服务器时,服务器规定该二进制内容的编码必须为UTF-8。这种情况下,我们必须就要通过程序将javascript的Unicode字符串转为UTF-8编码的字符串。转换方法转换之前我们必须了解Unicode的编码结构是固定的。不信可以试一试 String 的 charCodeAt 这个方法,看看返回的 charCode 占几个字节。•英文占1个字符,汉字占2个字符然而,UTF-8的编码结构长度是根据某单个字符的大小来决定长度有多少。下面为单个字符的大小占用几个字节。单个unicode字符编码之后的最大长度为6个字节。•1个字节:Unicode码为0 - 127•2个字节:Unicode码为128 - 2047•3个字节:Unicode码为2048 - 0xFFFF•4个字节:Unicode码为65536 - 0x1FFFFF•5个字节:Unicode码为0x200000 - 0x3FFFFFF•6个字节:Unicode码为0x4000000 - 0x7FFFFFFF具体请看图片:因为英文和英文字符的Unicode码为0 - 127,所以英文在Unicode和UTF-8中的长度和字节都是一致的,只占用1个字节。这也就是为什么UTF8是Unicode的超集!现在我们再来讨论汉字,因为汉字的unicode码区间为0x2e80 - 0x9fff, 所以汉字在UTF8中的长度最长为3个字节。那么汉字是如何从Unicode的2个字节转换为UTF8的三个字节的哪?假设我需要把汉字"中"转为UTF-8的编码1、获取汉字Unicode值大小var str = '中';var charCode = str.charCodeAt(0);console.log(charCode); // => 200132、根据大小判断UTF8的长度由上一步我们得到汉字"中"的charCode为20013.然后我们发现20013位于2048 - 0xFFFF这个区间里,所以汉字"中"应该在UTF8中占3个字节。3、补码既然知道汉字"中"需要占3个字节,那么这3个字节如何得到哪?这就需要设计到补码,具体补码逻辑如下:好吧,我知道这个图你们也看不明白,还是我来讲吧!具体的补位码如下,"x"表示空位,用来补位的。•0xxxxxxx•110xxxxx 10xxxxxx•1110xxxx 10xxxxxx 10xxxxxx•11110xxx 10xxxxxx 10xxxxxx 10xxxxxx•111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx•1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxwarning:有没有发现?补位码第一个字节前面有几个1就表示整个UTF-8编码占多少个字节!UTF-8解码为Unicode就是利用的这个特点哦~我们先举个简单的例子。把英文字母"A"转为UTF8编码。1、“A”的charCode为652、65位于0-127的区间,所以“A”占一个字节3、UTF8中一个字节的补位为0xxxxxxx,x表示的是空位,是用来补位的。4、将65转为二进制得到10000015、将1000001按照从前到后的顺序,依次补到1xxxxxxx的空位中,得到010000016、将11000001转为字符串,得到"A"7、最终,"A"为UTF8编码之后“A”通过这个小例子,我们是否再次验证了UTF-8是Unicode的超集!好了,我们现在再回到汉字"中"上,之前我们已经得到了"中"的charCode为20013,二进制为01001110 00101101。具体如下:var code = 20013;code.toString(2); // => 100111000101101 等同于 01001110 00101101然后,我们按照上面“A”补位的方法,来给"中"补位。将01001110 00101101按照从前到后的顺序依此补位到1110xxxx 10xxxxxx 10xxxxxx上.得到11100100 10111000 10101101.4、得到UTF8编码的内容通过上面的步骤,我们得到了"中"的三个UTF8字节,11100100 10111000 10101101。我们将每个字节转为16进制,得到0xE4 0xB8 0xAD;那么这个0xE4 0xB8 0xAD就是我们最终得到的UTF8编码了。我们使用nodejs的buffer来验证一下是否正确。var buffer = new Buffer('中'); console.log(buffer.length); // => 3console.log(buffer); // => <Buffer e4 b8 ad>// 最终得到三个字节 0xe4 0xb8 0xad因为16进制是不分大小写的,所以是不是跟我们算出来0xE4 0xB8 0xAD一模一样。将上面的编码逻辑写到一个函数中。// 将字符串格式化为UTF8编码的字节var writeUTF = function (str, isGetBytes) { var back = []; var byteSize = 0; for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); if (0x00 <= code && code <= 0x7f) { byteSize += 1; back.push(code); } else if (0x80 <= code && code <= 0x7ff) { byteSize += 2; back.push((192 | (31 & (code >> 6)))); back.push((128 | (63 & code))) } else if ((0x800 <= code && code <= 0xd7ff) || (0xe000 <= code && code <= 0xffff)) { byteSize += 3; back.push((224 | (15 & (code >> 12)))); back.push((128 | (63 & (code >> 6)))); back.push((128 | (63 & code))) } } for (i = 0; i < back.length; i++) { back[i] &= 0xff; } if (isGetBytes) { return back } if (byteSize <= 0xff) { return [0, byteSize].concat(back); } else { return [byteSize >> 8, byteSize & 0xff].concat(back); }}writeUTF('中'); // => [0, 3, 228, 184, 173] // 前两位表示后面utf8字节的长度。因为长度为3,所以前两个字节为`0,3`// 内容为`228, 184, 173`转成16进制就是`0xE4 0xB8 0xAD`// 读取UTF8编码的字节,并专为Unicode的字符串var readUTF = function (arr) { if (typeof arr === 'string') { return arr; } var UTF = '', _arr = this.init(arr); for (var i = 0; i < _arr.length; i++) { var one = _arr[i].toString(2), v = one.match(/^1+?(?=0)/); if (v && one.length == 8) { var bytesLength = v[0].length; var store = _arr[i].toString(2).slice(7 - bytesLength); for (var st = 1; st < bytesLength; st++) { store += _arr[st + i].toString(2).slice(2) } UTF += String.fromCharCode(parseInt(store, 2)); i += bytesLength - 1 } else { UTF += String.fromCharCode(_arr[i]) } } return UTF}readUTF([0, 3, 228, 184, 173]); => '中'另外一种将中文解析得到UTF8字节码的方法另外一种比较简单的将中文转为UTF8字节码的方法比较简单,浏览器也提供了一个方法,而且这个方法大家都一直在用,是什么哪?就是encodeURI。当然,encodeURIComponent也是可以的。没错,就是这个方法。那么这个方法是怎么将一个Unicode编码的中文转为UTF8的字节码嘞?var str = '中';var code = encodeURI(str);console.log(code); // => %E4%B8%AD有没有发现得到了一个转义后的字符串,而且这个字符串中的内容和我之前在上面得到的字节码是一样的~~~。下面我们将%E4%B8%AD转为一个number数组。var codeList = code.split('%');codeList = codeList.map(item => parseInt(item,16));console.log(codeList); // => [228, 184, 173]如此简单,有木有~~~这个简便方法的原理是什么?这里就涉及到的URI中的querystring编码的问题了。因为按照规定,URI中的querystring必须按照UTF8的编码进行传输,而JavaScript是Unicode的,所以浏览器就给我们提供了一个方法,也就是encodeURI/encodeURIComponent方法。这个方法会讲非英文字符(这里考虑下,为什么是非英文字符?)先转为UTF8的字节码,然后前面加个%进行拼接,所以我们将汉字"中"转义下便得到了"%E4%B8%AD".好吧,原理就这些,没有其他的了。不过,这种方法还有个缺点,那就是只会转义非英文字符,所以当我们需要将英文字符也格式化为UTF8编码时,这个方法是达不到我们需求的,我们还需要额外的将英文字符也给转义下。那我想要解析回来应该怎么做哪?用decodeURI/decodeURIComponent就可以了。var codeList = [228, 184, 173];var code = codeList.map(item => '%'+item.toString(16)).join('');decodeURI(code); // => 中好了,到这里本文也就介绍完UTF8的编码了。希望可以帮助大家了解到UTF-8编码的原理。以上就是小编为大家带来的通过javascript进行UTF-8编码的实现方法全部内容了,

废话不多说,直接给大家贴代码了。具体代码如下所示:<!DOCTYPE html><html lang="en"><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <meta charset="utf-8">  <title>点击按钮文字变成input框,点击保存变成文字</title>  <style type="text/css">  table{ text-align: center; font-size: 14px;}  table>thead>tr>th{ font-weight: normal;}  .text-right{ padding-right:73px; text-align: right;}  .text{ width: 50px; height: 30px; border: 1px solid #ddd; text-align:

上一篇文章《Nodejs中 npm常用命令详解》主要是整理了最常使用的npm命令及相关介绍,其中有提到全局安装(npm install gulp -g)和本地安装(npm install gulp),下图来自Gulp中文网入门指南,可以看出全局安装后gulp后还要进行本地安装,一开始我疑惑了?为什么全局安装的gulp么,还要进行本地安装,难道不能在项目中直接调用本地安装的包?带着疑惑,在google找了相关文档,杂七杂八凑合起来才有了点眉目,让我们一起解开nodejs全局安装和本地安装的一些疑惑,如果有讲错的地方,还请大家留意指正。本文以Windows平台上做测试,以gulp为示例做教程什么是全局安装(global)安装位置全局安装方式是键入命令:npm install gulp -g 或npm install gulp--global,其中参数-g的含义是代表安装到全局环境里面,包安装在Node安装目录下的node_modules文件夹中,一般在 \Users\用户名\AppData\Roaming\ 目录下,可以使用npm root -g查看全局安装目录。调用方式全局安装后可以供命令行(command line)使用,用户可以在命令行中直接运行该组件包支持的命令,如下图全局安装gulp后的cmd文件什么是本地安装(local)安装位置本地安装方式是键入命令:npm install gulp 或npm install gulp --save-dev等,其中参数--save-dev的含义是代表把你的安装包信息写入package.json文件的devDependencies字段中,包安装在指定项目的node_modules文件夹下。调用方式本地安装后可以直接通过require()的方式引入项目中node_modules目录下的模块,如下示例,本地安装后直接在gulpfile.js中require('gulp')。为什么全局安装后还要本地安装仅全局安装是够吗1.在js实例代码中,默认下node.js会在NODE_PATH和目前js所在项目下的node_modules文件夹下去寻找模块,因此,如果只是全局安装,不能直接通过require()的方式去引用模块,需要手动解决包路径的配置问题,当然你也可以复制全局安装的node_modules文件夹到项目下,还有办法可以选择将环境变量的NODE_PATH设置为C:\Program Files\nodejs。2.对于包的更新不好管理,可能你需要为每个包重新命名,如[email protected][email protected],为了区别不同项目使用指定的包,保证模块之间的相互依赖(这块下面会介绍),区别每个项目正常运行。因此,不推荐只全局安装。本地安装的重要性最早的node.js/npm实际上是全局的,包括现在还兼容NODE_PATH,但是不能支持全局多版本,于是nodejs团队改成本地安装的方法可能就是为了保证不同版本包之间的相互依赖,什么意思呢,举个例子weui组件中相互依赖的包就有12个其中依赖包的指定版本号如下,不可轻易去修改,因为不同版本包对应依赖包的版本的功能有所差别,如果修改指定的版本来运行weui,就可能会编译出错等bug。再举个例子:复制代码 代码如下:包版本为:A(0.0.1)依赖B(0.0.2),B(0.0.1)依赖C(0.0.3)一段时间原作者更新后,包版本为:A(1.0.1)依赖B(1.0.0),B(1.0.0)依赖C(1.0.0)每一次的更新可能带来不一样的功能,在多人合作、发布模块到npmjs社区、上传到github给其他人使用时,保留模块的版本信息可用于下载指定的版本号显得特别重要。本地安装可以让每个项目拥有独立的包,不受全局包的影响,方便项目的移动、复制、打包等,保证不同版本包之间的相互依赖,这些优点是全局安装难以做到的。另外,据node团队介绍,本地安装包对于项目的加载会更快。有优点也少不了缺点,如每次新项目都要本地安装所依赖的包,安装包时间相对较长,一来是包太大导致下载慢;二是浪费了硬盘空间,不过现在电脑硬盘动不动就几个T,你还会在意节省这点空间吗?以上所述是小编给大家介绍的Nodejs全局安装和本地安装的不同之处,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文实例讲述了JS模拟简易滚动条效果的方法。分享给大家供大家参考,具体如下:使用Js模拟滚动条。简易模式,类似手机上常见的滚动条。效果如下:Js代码如下:var scrollMoveObj = null, scrollPageY = 0, scrollY = 0;var scrollDivList = new Array();// obj需要添加滚动条的对象 w滚动条宽度 className滚动条样式名称// obj元素 必须指定高度,并设置overflow:hidden;// 如要兼容IE6 必须给obj元素 指定 overflow:hidden; function jsScroll(obj, w, className){ if(typeof(obj) == 'string') { obj = document.getElementById(obj); } //当内容未超出现在高度时,不添加滚动条 if(!obj || obj.scrollHeight <= obj.clientHeight || obj.clientHeight == 0) { return; } obj.scrollBarWidth = w||6; obj.style.overflow = 'hidden'; obj.scrollBar = document.createElement('div'); document.body.appendChild(obj.scrollBar); obj.scrollBarIndex = document.createElement('div'); obj.scrollBar.appendChild(obj.scrollBarIndex); obj.scrollBar.style.position = 'absolute'; obj.scrollBarIndex.style.position = 'absolute'; obj.scrollBar.className = className || ''; if(!className) { obj.scrollBar.style.backgroundColor = '#ddd'; obj.scrollBarIndex.style.backgroundColor = '#aaa'; } scrollDivList.push(obj); scrollResetSize(obj); //使用鼠标滚轮滚动 obj.scrollBar.scrollDiv = obj; obj.scrollBarIndex.scrollDiv = obj; obj.onmousewheel = scrollMove; obj.scrollBar.onmousewheel = scrollMove; obj.scrollBarIndex.onmousewheel = scrollMove; //拖动滚动条滚动 obj.scrollBarIndex.onmousedown = function(evt){ evt = evt || event; scrollPageY = evt.clientY; scrollY = this.scrollDiv.scrollTop; isScrollMove = true; document.body.onselectstart = function(){return false}; scrollMoveObj = this.scrollDiv; if(this.scrollDiv.scrollBar.className == '') { this.scrollDiv.scrollBarIndex.style.backgroundColor = '#888'; } return false; }}//当页面大小发生变化时,重新计算滚动条位置window.onresize = function(){ for(var i=0; i<scrollDivList.length; i++) { scrollResetSize(scrollDivList[i]); }}//计算滚动条位置function scrollResetSize(o) { if(o.scrollHeight <= o.clientHeight) { o.scrollTop = 0; o.scrollBar.style.display = 'none'; } else { o.scrollBar.style.display = 'block'; } var x=0, y=0; var p = o; while(p) { x += p.offsetLeft; y += p.offsetTop; p = p.offsetParent; } var borderTop = parseInt(o.style.borderTopWidth||0); var borderBottom = parseInt(o.style.borderBottomWidth||0); o.scrollBar.style.width = o.scrollBarWidth + 'px'; o.scrollBar.style.height = o.clientHeight + 'px'; o.scrollBar.style.top = y + borderTop + 'px'; o.scrollBar.style.left = x + o.offsetWidth - o.scrollBarWidth + 'px'; o.scrollBarIndex.style.width = o.scrollBarWidth + 'px'; var h = o.clientHeight - (o.scrollHeight - o.clientHeight); //当滚动条滑块最小20个像素 if(h < 20) { h = 20; } o.scrollBarHeight = h; o.scrollBarIndex.style.height = h + 'px'; o.scrollBarIndex.style.left = '0px'; setScrollPosition(o);}function setScrollPosition(o) { o.scrollBarIndex.style.top = (o.clientHeight - o.scrollBarHeight) * o.scrollTop / (o.scrollHeight - o.clientHeight) + 'px';}document.documentElement.onmousemove = function(evt){ if(!scrollMoveObj)return; evt = evt || event; var per = (scrollMoveObj.scrollHeight - scrollMoveObj.clientHeight) / (scrollMoveObj.clientHeight - scrollMoveObj.scrollBarHeight) scrollMoveObj.scrollTop = scrollY - (scrollPageY - evt.clientY) * per; setScrollPosition(scrollMoveObj);}document.documentElement.onmouseup = function(evt){ if(!scrollMoveObj)return; if(scrollMoveObj.scrollBar.className == '') { scrollMoveObj.scrollBarIndex.style.backgroundColor = '#aaa'; } scrollMoveObj = null; document.body.onselectstart = function(){return true};}// 鼠标滚轮滚动function scrollMove(evt){ var div = this.scrollDiv || this; if(div.scrollHeight <= div.clientHeight) return true; evt = evt || event; var step = 20; if(evt.wheelDelta < 0) { if(div.scrollTop >= (div.scrollHeight - div.clientHeight)) return true; div.scrollTop += step; } else { if(div.scrollTop == 0) return true; div.scrollTop -= step; } setScrollPosition(div); return false;}完整实例代码点击此处本站下载。更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》希望本文所述对大家JavaScript程序设计有所帮助。

按钮组和下拉菜单组件一样,需要依赖于button.js插件才能正常运作。结构方面:使用一个类名为btn-group的容器,把多个按钮放在这个容器中。按钮组也是一个独立的组件,所以可以找到相应的源码文件:Less:buttons.lessSass:_buttons.scssCss:Bootstrap.css 3131行~3291行<div class="btn-group"><button type="button" class="btn btn-default"><span class="glyphicon glyphicon-step-backward"></span></button>…<button type="button" class="btn btn-default"><span class="glyphicon glyphicon-step-forward"></span></button></div>CSS:.btn-group,.btn-group-vertical {position: relative;display: inline-block;vertical-align: middle;}.btn-group > .btn,.btn-group-vertical > .btn {position: relative;float: left;}.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active {z-index: 2;}.btn-group > .btn:focus,.btn-group-vertical > .btn:focus {outline: none;}.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group {margin-left: -1px;}除了可以使用<button>元素之外,还可以使用其他标签元素,比如<a>标签,唯一要保证的是:不管使用什么标签,.btn-group容器里的标签元素需要带有类名.btn按钮组四个角都是圆角,除了第一个和最后一个按钮具有边上的圆角外,其他的按钮没有圆角。详解:1、默认:所有按钮都是圆角2、除第一个按钮和最后一个按钮,其他的按钮圆角取消3、最后一个按钮只留右上角和右下角为圆角源码:.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {border-radius: 0;}.btn-group > .btn:first-child {margin-left: 0;}.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {border-top-right-radius: 0;border-bottom-right-radius: 0;}.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child) {border-top-left-radius: 0;border-bottom-left-radius: 0;}.btn-group > .btn-group {float: left;}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {border-radius: 0;}.btn-group > .btn-group:first-child> .btn:last-child,.btn-group > .btn-group:first-child> .dropdown-toggle {border-top-right-radius: 0;border-bottom-right-radius: 0;}.btn-group > .btn-group:last-child> .btn:first-child {border-top-left-radius: 0;border-bottom-left-radius: 0;}按钮组工具栏在富文本编辑器中,将按钮组分组排列在一起,比如说复制,剪切,粘贴一组,左对齐,中间对齐,右对齐和两端对齐一组,这时需要用到bootstrap框架按钮工具栏btn-toolbar<div class="btn-toolbar"><div class="btn-group">…</div><div class="btn-group">…</div><div class="btn-group">…</div><div class="btn-group">…</div></div>原理:主要是让容器的多个分组.btn-group元素进行浮动,并且组与组之间保持5px的左外距.btn-toolbar {margin-left: -5px;}.btn-toolbar .btn-group,.btn-toolbar .input-group {float: left;}.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group {margin-left: 5px;}注意在btn-toolbar上清除浮动.btn-toolbar:before,.btn-toolbar:after{ display: table;content: " ";}.btn-toolbar:after{clear: both;}示例:<div class="btn-toolbar"><div class="btn-group"><button class="btn btn-default" type="button"><span class="glyphicon glyphicon-align-left"></span></button><button class="btn btn-default" type="button"><span class="glyphicon glyphicon-align-center"></span></button><button class="btn btn-default"><span class="glyphicon glyphicon-align-right"></span></button><button class="btn btn-default" type="button"><span class="glyphicon glyphicon-align-justify"></span></button></div><div class="btn-group"><button class="btn btn-default" type="button"><span class="glyphicon glyphicon-font"></span></button><button class="btn btn-default" type="button"><span class="glyphicon glyphicon-bold"></span></button></div></div>按钮嵌套分组很多时候,我们把下拉菜单很普通的按钮组排列在一起,实现类似于导航菜单的效果: 使用的时候只需将之前制作下拉菜单的dropdown容器的类名换成btn-group,并且和普通的按钮放在同一级:<div class="btn-group"><button class="btn btn-default" type="button">首页</button><button class="btn btn-default" type="button">产品展示</button><button class="btn btn-default" type="button">案例分析</button><button class="btn btn-default" type="button">联系我们</button><div class="btn-group"><button class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">关于我们<span class="caret"></span></button><ul class="dropdown-menu"><li><a href="#">公司简介</a></li><li><a href="#">企业文化</a></li><li><a href="#">组织结构</a></li><li><a href="#">客服服务</a></li></ul></div></div>.btn-group > .btn-group {float: left;}.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {border-radius: 0;}.btn-group > .btn-group:first-child> .btn:last-child,.btn-group > .btn-group:first-child> .dropdown-toggle {border-top-right-radius: 0;border-bottom-right-radius: 0;}.btn-group > .btn-group:last-child> .btn:first-child {border-top-left-radius: 0;border-bottom-left-radius: 0;}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle {outline: 0;}.btn-group > .btn + .dropdown-toggle {padding-right: 8px;padding-left: 8px;}.btn-group > .btn-lg + .dropdown-toggle {padding-right: 12px;padding-left: 12px;}.btn-group.open .dropdown-toggle {-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);}.btn-group.open .dropdown-toggle.btn-link {-webkit-box-shadow: none;box-shadow: none;}按钮垂直分组只需把水平分组的类名.btn-group换成.btn-group-vertical即可。<div class="btn-group-vertical"><button class="btn btn-default" type="button">首页</button><button class="btn btn-default" type="button">产品展示</button><button class="btn btn-default" type="button">案例分析</button><button class="btn btn-default" type="button">联系我们</button><div class="btn-group"><button class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">关于我们<span class="caret"></span></button><ul class="dropdown-menu"><li><a href="#">公司简介</a></li><li><a href="#">企业文化</a></li><li><a href="#">组织结构</a></li><li><a href="#">客服服务</a></li></ul></div></div>.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn {display: block;float: none;width: 100%;max-width: 100%;}.btn-group-vertical > .btn-group > .btn {float: none;}.btn-group-vertical > .btn + .btn,.btn-group-vertical > .btn + .btn-group,.btn-group-vertical > .btn-group + .btn,.btn-group-vertical > .btn-group + .btn-group {margin-top: -1px;margin-left: 0;}.btn-group-vertical > .btn:not(:first-child):not(:last-child) {border-radius: 0;}.btn-group-vertical > .btn:first-child:not(:last-child) {border-top-right-radius: 4px;border-bottom-right-radius: 0;border-bottom-left-radius: 0;}.btn-group-vertical > .btn:last-child:not(:first-child) {border-top-left-radius: 0;border-top-right-radius: 0;border-bottom-left-radius: 4px;}.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {border-radius: 0;}.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {border-bottom-right-radius: 0;border-bottom-left-radius: 0;}.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {border-top-left-radius: 0;border-top-right-radius: 0;}等分按钮又称为自适应分组按钮:整个按钮组的宽度是容器的100%,而按钮组里面的每个按钮平分整个容器的宽度,例如一个按钮组里有五个按钮,每个按钮是容器宽度的20%;一个按钮组里有四个按钮,每个按钮是容器宽度的25%;实现方法:只需要在按钮组.btn-group 上追加一个类名.btn-group-justified<div class="btn-group btn-group-justified"><buttton class="btn btn-default" type="button">首页</buttton><buttton class="btn btn-default" type="button">案例分析</buttton><buttton class="btn btn-default" type="button">联系我们</buttton><buttton class="btn btn-default" type="button">关于我们</buttton></div>.btn-group-justified {display: table;width: 100%;table-layout: fixed;border-collapse: separate;}.btn-group-justified > .btn,.btn-group-justified > .btn-group {display: table-cell;float: none;width: 1%;}.btn-group-justified > .btn-group .btn {width: 100%;}把.btn-group-justified模拟成表格(display:table),并且把里面的按钮模板模拟成表格单元格(display:table-cell)。注意:在制作等分按钮组时,尽量使用<a>标签来制作按钮,因为使用button标签元素时,使用display:table在部分浏览器下支持并不友好脚本之家推荐阅读:详解Bootstrap按钮以上所述是小编给大家介绍的Bootstrap按钮组件,希望对大家有所帮助!

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 腾博会官网 网站地图

联系我们

827570882

扫描二维码分享到微信