RPA如何帮助小公司四两拨千斤

中小企业普遍势单力薄、竞争力较为薄弱,难以和大企业进行直接竞争和抗衡。随着数字化的来临,新技术的发展,一些中小企业已经看到了转机。据财务管理咨询机构Centtrip的一项研究显示,目前英国已有七成多的中小企业,在其业务的部分或全部领域使用自动化技术,因为RPA正在使英国的中小型企业受益。 小公司制胜的法宝中小企业拥抱RPA技术将会是一大趋势,这是由RPA的种种好处决定的(全天候运转/增速提效/高质量/高准确性的服务/跨系统执行任务/安全可靠)。这些好处可以将中小企业的优势放大、扬长避短,从而在市场中为自己争得一席之地。 竞争,是每一个中小型企业与生俱来的组成部分。然而,即便如此,相较于那些既有规模,又具备完善的技术、充足的资金,还能够迅速占领市场并雇佣到最优秀人才的大公司而言,中小型企业似乎永远略逊一筹。不过,现在有一条好消息。RPA(机器人流程自动化)技术也许正在改变游戏规则。 RPA与中小企业自身特点相契合据财务管理咨询机构Centtrip的调查研究发现,英国有五分之一(21%)的中型企业认为自动化技术将帮助他们与更大的竞争对手PK。Centtrip的首席执行官兼联合创始人布莱恩·贾米森(Brian Jamieson)表示:“自动化技术代表了各行各业数字革命的开始。RPA已经在改变公司的运营方式,提高了那些长期应用老式流程和系统的领域的生产力和创新力”。起初,中小型公司为此可能会承担较大的初始成本,但一旦项目实施起来,自动化服务有可能会为他们铺平道路,以赶上那些拥有更多资源、更大的竞争对手。这个新的公平竞争环境不仅有利于整体经济领域,更有利于客户,因为他们可以有更多的选择,去获得更好的服务。虽然大公司更有可能从RPA中获益,但Centtrip通过对500多名决策者的研究发现,近三分之一(33%)的中型企业认为自动化技术将为他们节省了“大量资金”;近四分之三(74%)的中小企业已经在其业务的部分或全部领域使用RPA技术。RPA技术所具备的优势和中小企业自身特点是相契合的。这也是为什么那么多英国中小企业会投入RPA的拥抱当中。 随着RPA和人工智能对企业的影响不断扩大,未来成功的企业将会把流程作为战略性资产进行管理,并将其视为维持竞争优势不可或缺的组成部分。

July 9, 2019 · 1 min · jiezi

前端培训中级阶段8-jQuery元素属性样式操作20190801期

前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 好久没有更文,有没有人想我呀。我没有摸鱼,最近调研了一下 vue-element-admin,用来做了个小项目。发现自己需要学习的地方还有很多啊。 今日份内容attr()、prop()addClass()、removeClass()、toggleClass()html()、text()、val()offset()、position()css()animate()、stop()、delay()attr() 与 prop()差异性,在之前的文章中就已经讲过了。这里说一下重点。attr() 对应 attribute ,是标签的属性。如 href,src,id,classprop() 对应 properties ,是标签的状态(基本是Boolean类型)。如 checked、disabled addClass()、removeClass()、toggleClass()用于操作标签的 class 属性,封装的一系列方法(对应原生 classList)。 $('p').addClass('wrap') 会给所有的p标签增加一个 warp 的 class。如果已经有了,就不会重复操作。$('p').removeClass('wrap') 会给所有的p标签移除 warp 的 class。如果没有,就不会操作。$('p').toggleClass('wrap') 会给所有的p标签切换 warp 这个class。如果有,就删除。如果没有,就添加。html()、text()、val()也在之前讲过了。 html() 对应 innerHTMLtext() 对应 innerTextval() 对应 value其实也可以用做 xss 防护。先用 text 写内容,然后用 html 读内容。当然,还是建议,不要相信用户的输入。都用 text() 来写入内容。offset()、position()offset获取匹配元素在当前视口的相对偏移。返回的对象包含两个整型属性:top 和 left,以像素计。此方法只对可见元素有效。offset获取匹配元素相对父元素的偏移。返回的对象包含两个整型属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。css()获取css值支持多种写法。 $("p").css("color");$("p").css(["color","font-size"]);设置css值也支持多种写法 $("p").css("color",'#0ff');$("p").css({"color":'#c0c','font-size': '18px',backgroundColor: '#0c0'});推荐使用键值对的方法。如果是有斜杠的,可以加引号,或者改成大写。$("p").css('font-size',()=>50*Math.random()+'px'); 随机字体大小。 其实也可以根据index来做渐进色彩等等。。animate()、stop()、delay()animate支持两种入参方式 (params,[speed],[easing],[fn] )params: 一组包含作为动画属性和终值的样式属性和及其值的集合speed: 三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)easing: 要使用的进度效果的名称(需要插件支持).默认jQuery提供"linear" 和 "swing".fn: 在动画完成时执行的函数,每个元素执行一次。(params,options)params: 一组包含作为动画属性和终值的样式属性和及其值的集合options: 动画的额外选项。如: ...

July 9, 2019 · 1 min · jiezi

纯css实现选中切换效果

最近不太忙,多写几篇文章。很多时候我们用js来实现视觉效果,其实不用那么麻烦,掌握一些常用的css知识能让你事半功倍,这篇文章讲的是使用纯css来实现一个列表项的选中效果,希望对你有所帮助 先上链接,点击预览https://codepen.io/Ritr/pen/B... 实现这个效果只需要简单三步走:0:写一个简单的列表,并且初始化css html代码 <p>你喜欢哪种水果</p><ul> <li> <label for="banana"> <input type="radio" id="banana" name="fruit"> <span>香蕉</span> </label> </li> <li> <label for="apple"> <input type="radio" id="apple" name="fruit"> <span>苹果</span> </label> </li> <li> <label for="orange"> <input type="radio" id="orange" name="fruit"> <span>橘子</span> </label> </li></ul>css代码 ul,li{ list-style-type:none;}ul{ border:1px solid #000; padding:5px; width:200px;}li{ margin:2px; background:#ccc;}1:使用css选择器,选择目标。如果你想对某些元素添加某些视觉效果的时候,首先选中它,再写一些特定的css以区别于其他元素 input:checked + span{ color:#F66; font-weight:bold; background:#ff0;}2:隐藏radio,radio默认是个小圈圈,我们先把它隐藏起来,实际上会通过label标签的for属性来实现对radio的选中 input[type="radio"]{ display:none;}3:优化样式,这样会骚微好看一点点 li label,li label span{ display:inline-block; width:100%;}操作虽然简单,但也是我写这么久css的总结,如果对你有所帮助希望你点个赞。谢谢

July 9, 2019 · 1 min · jiezi

CSS的一些单位

你确定,EM是相对于父元素的大小?在我们写样式修饰的时候,长度单位像PX、EM、REM是我们常用的。那么它们有什么不同的地方呢? 1、PX像素。相对长度单位,相对于显示器的屏幕分辨率的大小 IE无法调整那些使用px作为单位的字体大小国外大部分的网站能够调整的原因在于其使用了em或者rem作为字体大小2、emem相对长度单位 相对于当前对象内的文本字体大小尺寸 参考物是父元素的font-size当前父元素没有设置字体尺寸 ,相对于浏览器的默认字体大小em的值不是固定的em会继承父级元素的字体大小3、remrem是css3新增的一个相对单位,rem是相对于HTML根元素的字体大小的长度单位 优点 只需要设置根目录的大小就可以把整个页面的的比例调好兼容性 ie8 更早的版本4、vw、vhvw、vh、vmax、vmin 这四个单位基于视口 vw是相对视口的宽度而定的 长度等于视口宽度的1/100 vh是相对视口(viewport)的高度而定的,长度等于视口高度的1/100 5、%(百分比)一般来说就是相对于父元素 1、对于普通定位元素就是我们理解的父元素 2、对于position: absolute;的元素是相对于已定位的父元素 3、对于position: fixed;的元素是相对于ViewPort(可视窗口) 6、vmcss3新单位,相对于视口的宽度或高度中较小的那个 其中最小的那个被均分为100单位的vm 比如:浏览器高度900px,宽度1200px,取最小的浏览器高度,1 vm = 900px/100 = 9 px 缺点:兼容性差

July 8, 2019 · 1 min · jiezi

移动端兼容问题总结1

原文地址: https://luoyangfu.com/article...input 键盘类型问题描述: 在android上只需要更换type 即可更改键盘类型,ios无效。 解决方法: 需要在表单元素外层增加<form> 标签,才能生效 文本在android 偏上问题描述: 在android上小于12px文本上下居中,android 文本显示偏上 设置字体为11px, 上下居中.解决方式1: font-size: 22px;padding: 10px 40px;border-radius: 40px;line-height: 22px;zoom: 0.5;解决方式2: font-size: 22px;padding: 10px 40px;border-radius: 40px;transform: scale(0.5);transform-origin: 0% 0%;这里都是通过先放大,然后在缩小来解决这个问题(这里应该避免使用小于12px 字体的高度) ios 输入法顶起页面问题描述:页面被输入法顶起,导致滚动,无法锁定 解决方式: 在当前容器外层再包裹一层,使用 position: fixed 来解决这个问题,做一个容器内滚动。 iconfont transform 相关操作无效描述: rotate 一个角度无效 解决方法: 需要直接操作 iconfont::before 这个伪类,不能直接对iconfont操作 .icon::before { transform: rotate(90deg);}ios 下 document.execCommand(copy) 无效在ios 下直接使用 input.select() 这种方式无效需要采用下面方式: input.setSelectionRange(0, data.length)这种方式来选取文本的长度。

July 8, 2019 · 1 min · jiezi

十分钟通关CSS内嵌样式

内嵌样式样式定义:用于辅助美化HTML,使得网页效果色彩性更高,更容易吸引用户。 样式可以为网页设置颜色、背景、排版等丰富的属性。 标签中的style属性用于帮助标签定义内嵌样式,内嵌样式格式如下例所示, 使用style作为标记,在内部写入格式如: key:value; 的数据对象来表示 具体的样式。 <div style="color: red;"> Hello World !</div>但是在标签很多的情况下,如果大量在页面中堆叠内嵌样式,则会使得页面臃肿 冗余,如下例: <div style="width: 100px; height: 100px; color: red; background-color: green; font-size: 20px; font-weight: bold; line-height: 20px; text-align: center;">大量堆积内嵌样式</div>

July 8, 2019 · 1 min · jiezi

弹性布局flex-兼容写法

兼容浏览器版本Chrome 21+Opera 12.1+Firefox 22+Safari 6.1+IE 10+浏览器对最新flexbox规范的支持情况:Chrome 29+Firefox 28+Internet Explorer 11+Opera 17+Safari 6.1+ (前缀 -webkit-)Android 4.4+iOS 7.1+ (前缀 -webkit-)定义弹性布局盒子display display: -webkit-box; / 老版本语法: Safari, iOS, Android browser, older WebKit browsers. / display: -moz-box; / 老版本语法: Firefox (buggy) / display: -ms-flexbox; / 混合版本语法: IE 10 / display: -webkit-flex; / 新版本 语法: Chrome 21+ / display: flex; / 新版本语法: Opera 12.1, Firefox 22+ / display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex;定义子元素排列flex-direction ...

July 8, 2019 · 2 min · jiezi

React的移动端和PC端生态圈的使用汇总

对于一项技术,我们不能停留在五分钟状态,特别喜欢一句话,用什么方式绘制UI界面一点不重要,重要的是底层的思维,解决问题和优化的思路。由于React的生态极为庞大,本文内容部分来自一些别人的汇总,至于原文只要还是能找到的,我都会贴上地址,谢谢前期贡献的作者,如果有没有被汇总到的,欢迎在下面补充。生态圈:React官方推荐超大型项目使用的TypeScript为什么要把TypeScript放在第一位,因为TypeScript在构建超大型应用时,多人协作可以极大的加快工作效率,特别是前后端交互特别多,业务情况特别复杂的状况下(比如IM),它的优势就凸显出来了。但是在一些中小型项目中,优势并不是那么的明显。(比如做完项目跑路后期不迭代这种) TypeScript并不是一个新语言,可以简单的认为 TS= js + Type.它只是一个javascript的超集,目前更新速度也是非常快, 个人建议,在Node.js开发和React native以及大型React中使用TypeScript在下载官方的react脚手架中,包含了一个第三方的ts创建脚手架的命令 在 Create React App 中使用 TypeScriptCreate React App 内置了对 ·TypeScript` 的支持。需要创建一个使用 TypeScript 的新项目,在终端运行:npx create-react-app my-app --typescript interface IState { collapsed?: boolean, } interface IProps { props?: string | Function } constructor(props: IState) { super(props) } flag :number = 123 componentDidMount() { const result = this.FunctionTest() } FunctionTest():Promise<number|string|object>{ return Promise.resolve(false) } TypeScript写起来代码量会多一些,但是对于参数类型,返回类型,一眼明了,拥有静态类型检查,如果有问题,在编写代码时候就可以知道。补充一点,现在TS的生态已经足够适应开发,像一般的webpack插件都有了typescript的文件支持,当然,并不是所有的第三包都支持ts.在技术选型的时候就要考虑清楚这点,否则就会多做很多事情。状态统一集中管理,redux,mbox,redux-sage,dva等开源库先看看原始的react数据管理 组件间数据的传递,依靠props,状态数据提升等完成,但是对于跨层级的组件间数据传递,就不那么友好了,尤其是大型项目后期的迭代维护再说说被人吐槽,但是它的单向数据流思想不得不肯定的redux. Redux 状态及页面逻辑从 <App/>里面抽取出来, 成为独立的 store, 页面逻辑就是 reducer <TodoList/> 及<AddTodoBtn/>都是 Pure Component, 通过 connect 方法可以很方便地给它俩加一层 wrapper 从而建立起与 store 的联系: 可以通过 dispatch 向 store 注入 action, 促使 store 的状态进行变化, 同时又订阅了 store 的状态变化, 一旦状态有变, 被 connect 的组件也随之刷新使用 dispatch 往 store 发送 action 的这个过程是可以被拦截的, 自然而然地就可以在这里增加各种 Middleware, 实现各种自定义功能, eg: logging这样一来, 各个部分各司其职, 耦合度更低, 复用度更高, 扩展性更好在面试的时候,我觉得如果可以手写一个redux库,并且说清楚单向数据流的思维,是一个加分项。最终推荐使用dva,感谢前辈的开源,解放了我们 ...

July 7, 2019 · 4 min · jiezi

JavaScript-实现-iOS-下的计算器

最后一次更新于2019/07/07 效果 iOS 计算器该项目可在浏览器页面上实现 iOS 计算器。该项目可被分成三部分: HTML,CSS 和 JavaScript。 具体实现方法会在下方详细展开。 HTML首先,我们需要创建一个 HTML 文件来定义 iOS 计算器的布局。它只有一个文本框。 第一行的按钮均为特殊操作符按钮 (被标记为 btn orange_btn)。除此之外,最后一列的按钮表示常见操作符 (被标记为 gray_btn)。 剩下的按钮均为普通数字按钮 (被标记为 btn). 所有的按钮被包裹在 table 标签下。 具体代码如下: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="interface.css"> <script src="end_console.js"></script> <script src="jquery-1.12.2.js"></script> <!-- 只需要引用其中一种方法! --><!-- <script src="jQuery_solution.js"></script> --> <title>JavaScript Calculator</title></head><body><table> <!--展示表达式--> <tr> <td colspan="4"><input class="output_txt" type="text" value="0" disabled></td> </tr> <tr> <td><input class="gray_btn" type="button" value="AC"></td> <td><input class="gray_btn" type="button" value="+/-"></td> <td><input class="gray_btn" type="button" value="%"></td> <td><input class="btn orange_btn" type="button" value="÷"></td></tr> <tr> <td><input class="btn" type="button" value="7"></td> <td><input class="btn" type="button" value="8"></td> <td><input class="btn" type="button" value="9"></td> <td><input class="btn orange_btn" type="button" value="×"></td></tr> <tr> <td><input class="btn" type="button" value="4"></td> <td><input class="btn" type="button" value="5"></td> <td><input class="btn" type="button" value="6"></td> <td><input class="btn orange_btn" type="button" value="-"></td></tr> <tr> <td><input class="btn" type="button" value="1"></td> <td><input class="btn" type="button" value="2"></td> <td><input class="btn" type="button" value="3"></td> <td><input class="btn orange_btn" type="button" value="+"></td></tr> <tr> <td colspan="2"><input class="btn btn_long" type="button" value="0"></td> <td><input class="btn" type="button" value="."></td> <td><input class="btn orange_btn" type="button" value="="></td></tr></table></body></html>CSS第二个任务是渲染 iOS 的布局。比如在我们的事例中,所有按钮的边缘都是圆角。除此之外,gray_btn 对应的按钮16进制的颜色表示是 #a6a6a6,orange_btn 对应的按钮16进制的颜色表示是 #ff9705 而 btn 对应的按钮16进制的颜色表示是 #333333。 ...

July 7, 2019 · 4 min · jiezi

基于-vw-单位的移动端适配方案学习笔记

基于 vw 单位的移动端适配方案学习笔记回顾并总结一下移动端适配的一些知识前提要求"head"里添加"meta" <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />兼容性,ie9+ (ie8 让它自个儿玩去吧)计算 html 的"font-size"// 设计稿宽度, 750|640|520var designWith = 750// 设计稿上1px对应设备上多少个单位的vw, 100vw表示设备屏幕宽度var vw = 100 / designWith// html的font-size的大小// 同时也是单位rem的大小// 为了方便后面的尺寸计算,放大100倍,即设计稿上的100px;var fontSize = 100 * vw// 设置html的font-size, 可以直接写在 css 里面document.getElementsByTagName("html")[0].style.fontSize = fontSize + "vw"使用设计稿上元素的尺寸(px): eleWidth .ele { width: (eleWidth/100)rem;}code<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> <style> html { font-size: 13.33333333vw; /* 设计稿750px; 此时,1rem对应设计稿上的100px */ } html, body { margin: 0; } body { /* 设置默认的字体大小,这里的0.32rem=16px */ font-size: 0.32rem; } .list { list-style: none; padding-left: 0; margin: 0; } .list::after { content: ""; clear: both; } .box { float: left; width: 2.5rem; height: 2.5rem; } </style> </head> <body> <ul class="list"> <li class="box" style="background-color: #2196f3">box 01</li> <li class="box" style="background-color: #8bc34a">box 02</li> <li class="box" style="background-color: #ff5722">box 03</li> </ul> </body></html>

July 7, 2019 · 1 min · jiezi

简单好用的CSS命名规范和JS代码风格

CSS命名规范BEM命名法BEM(Block, Element, Modifier)是由Yandex团队提出的一种前端命名规范。其核心思想是将页面拆分成一个个独立的富有语义的块(blocks),从而使得团队在开发复杂的项目变得高效,并且十分有利于代码复用,即便团队引入新成员,也容易维护。 Block是块,比方说div、header,可以嵌套复用。更严格一点来说不能影响自身布局,最好不要设置margin和position,也不要使用元素选择器和ID选择器。 Element是元素,比方说input、p。是Block的组成部分。 Modifier是修饰,定义Block和Element的外观、状态、或者行为。当然这个部分并不是必须的,可以省略。 Block与Element之间通过__来连接,Element与Modifier之间通过--来连接 总体就是Block__Element--Modifier 何时用Element何时用Block如果一段代码可能被重用,并且它不依赖于页面中的其他组件,这时就可以使用Block,反之就可以使用Element。 JavaScript代码风格推荐去看Aribnb地址。

July 7, 2019 · 1 min · jiezi

16进制转rgba

function hexToRgba(hex, opacity) { return "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," + parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";}使用方法hexToRgba('#00c154', 0.2)

July 6, 2019 · 1 min · jiezi

Web性能优化

web性能可以通过以下几方面来优化content方面 1、减少HTTP请求:合并文件、CSS精灵、inline Image 2、减少DNS查询:DNS缓存、将资源分布到恰当数量的主机名 3、减少DOM元素数量 Server方面1、使用CDN 2、配置ETag 3、对组件使用Gzip压缩 Cookie方面1、减小cookie大小 2、css方面 3、将样式表放到页面顶部 4、不使用CSS表达式 5、使用<link>不使用@import Javascript方面1、将脚本放到页面底部 2、将javascript和css从外部引入 3、压缩javascript和css 4、删除不需要的脚本 5、减少DOM访问 图片方面1、优化图片:根据实际颜色需要选择色深、压缩 2、优化css精灵 3、不要在HTML中拉伸图片

July 5, 2019 · 1 min · jiezi

H5新增标签与样式及让元素水平垂直居中

元素垂直居中### 方法一:已知元素的高宽 #div1{ background-color:#6699FF; width:200px; height:200px; position: absolute; /*父元素需要相对定位*/ top: 50%; left: 50%; margin-top:-100px ; /*二分之一的height,width*/ margin-left: -100px; }方法二:未知元素的高宽#div1{ width: 200px; height: 200px; background-color: #6699FF; margin:auto; position: absolute; /*父元素需要相对定位*/ left: 0; top: 0; right: 0; bottom: 0; }html5CSS3有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML和 HTML5?HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,地理定位等功能的增加。 绘画 canvas 元素用于媒介回放的 video 和 audio 元素本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 的数据在浏览器关闭后自动删除语意化更好的内容元素,比如 article、footer、header、nav、section表单控件,calendar、date、time、email、url、searchCSS3实现圆角,阴影,对文字加特效,增加了更多的CSS选择器 多背景 rgba新的技术webworker, websockt, Geolocation移除的元素纯表现的元素:basefont,big,center,font, s,strike,tt,u;对可用性产生负面影响的元素:frame,frameset,noframes;是IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式:当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架- <!--[if lt IE 9]><script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script><![endif]-->

July 5, 2019 · 1 min · jiezi

16进制颜色代码FF000000

以黑色为例 #FF000000前两位为透明度,透明度分为256阶(0-255),计算机用16进制表示(00-FF)。 换算方法:透明度百分比 * 255 = 值(10进制)需要转换成16进制 转换参照表,00%=FF(不透明) 5%=F2 10%=E5 15%=D8 20%=CC 25%=BF 30%=B2 35%=A5 40%=99 45%=8c 50%=7F 55%=72 60%=66 65%=59 70%=4c 75%=3F 80%=33 85%=21 90%=19 95%=0c 100%=00(全透明) 后6位为颜色值,采用RGB配色(十六进制),000000为黑色,ffffff为白色前端会书写一般透明度写在后两位,即#000000FF,FF为不透明可以忽略,写成#000000或者#000

July 5, 2019 · 1 min · jiezi

常见的CSS布局样式

在定义样式前要设定一些默认样式*{margin:0;padding:0;}html body{height:100%;}一列布局两个要点 页面内容区域有一个固定宽度。页面内容区域在浏览器窗口中自适应居中实现方法:页面内容区域box{width: 自定义宽度;margin:0 auto;}两列布局*{margin:0;padding:0;}html,body{height:100%;}aside,main{height:100%;}aside{background:#72C7A1;}.main{background:#E0C569;}aside{width:200px;float:left;}.main{margin-left:200px;}一列固定宽,一列自适应宽: 固定宽度的列:通常称为边栏(左右均可),主要放置一些固定性的内容,如导航,菜单之类。自适应宽的列::根据浏览器窗口的大小自动判断宽度,主要放置主体内容。应用场景: 后台管理、用户中心、博客等三列布局特点: 三列布局,中间宽度自适应,两边定宽。中间列放置主体内容,在浏览器中优先展示渲染。原理: 当元素处于浮动状态时,设置负margin >= 子元素宽度时,子元素会覆盖到兄弟元素之上*{margin:0;padding:0;}html,body{height:100%;}main,.sidebox-left,sidebox-right{height:100%;}main{background:#1A2F90;color:#ffff;}.sidebox-left{width:200px;background:#CDE36D;}.sidebox-right{width:300px;background:#FB81E7;}main,.sidebox-left,sidebox-right{float:left}main{width:100%;\** box-sizing:border-box; \**这个是将标准盒模型转化为框架盒模型padding-left:200px;}.sidebox-left{margin-left:-100%;}.sidebox-right{maring-left:-300px;}

July 5, 2019 · 1 min · jiezi

移动端的3种适配方法

做移动端页面以来,经常会听说移动端的适配这个问题,但是并没有认真分析过是如何适配各种机型的。目前公司用的是手淘的flexible.js进行页面适配的。适配的根本原理其实就是将设计稿按一定的比例在不同的手机上实现。 在分析移动段适配之前首先要了解一下rem, css3的一个相对长度单位。既然是相对长度,那就有一个参照体了,rem就是相对于html元素的font-size计算值的倍数。即1rem 等于一倍的html元素的font-size值。 接下来分析一下三种移动端适配的方法一、@media + rem最早看到这个适配是在同事的代码里,当时并不知到是什么原理,也并不明白这些数字是怎么来的。@media screen and (min-width:350px){ html{font-size:342%;}}@media screen and (min-width:360px){ html{font-size:351.56%;}}@media screen and (min-width:375px){ html{font-size:366.2%;}}@media screen and (min-width:384px){ html{font-size:375%;}}@media screen and (min-width:390px){ html{font-size:380.85%;}}@media screen and (min-width:393px){ /* 小米NOTE */ html{font-size:383.79%;}}@media screen and (min-width:410px){ html{font-size:400%;}}@media screen and (min-width:432px){ /* 魅族3 */ html{font-size:421.875%;}}@media screen and (min-width:480px){ html{font-size:469%;}}@media screen and (min-width:540px){ html{font-size:527.34%;}}@media screen and (min-width:640px){ html{font-size: 625%;}}@media screen and (width:720px){ html{font-size: 703.125%;}}@media媒体查询, 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。上述代码中,第一个@media screen and (min-width:350px)表示当移动设备的宽度大于350px的时候页面将使用花括号内的样式,即将html根元素的字号设置为342%。(max-width:350px,则表示设备宽度小于350px时将采用此样式)。上述css代码的作用可见就是在不同分辨率的设备上设置不同的html字体大小。 ...

July 5, 2019 · 2 min · jiezi

一名合格的CFO需具备什么样的素质或能力

过去,人们评判一名CFO合格的标准,主要看其是否具备专业的财务背景和优秀的管理能力。当然,要想做的更为出色,还需要具备良好的沟通、协调、创新能力,以及高情商、高忍耐力、高灵活性等素质。 不可否认,这些因素对于评判一名CFO是否合格或优秀,如今依然凑效。但只有这些能力还远远不够,特别是在科技高速发展的今天,一名出色的CFO一定要对财务范围之外的创新技术有所了解。 据致同调查显示:89%的CFO认为未来这一职位需要更强的数据分析技能。而这一观点的形成则来源于目前人工智能的应用以及大数据的普及。另有调查称,61%的CFO认为使用数据及分析工具协助进行业务决策是他们财务战略中极为重要的一部分;同时,52%的CFO认为向数字化运营模式转型也是非常重要的环节。 随着RPA(机器人流程自动化)技术的兴起与发展,流程自动化对公司业务开始产生更为重大的意义,特别是对于公司业务效率与准确性的提升方面,以及成本节省方面,RPA有着更大的优势与应用前景。据致同的调查与分析显示,未来1-5年内可以应用流程自动化的领域包括财务规划与分析,预算与预测,企业发展与战略规划以及财务报告与管理。在实际的工作中,被提及最多的问题就是究竟什么样的场景可以应用到RPA相关技术?RPA可以在很多职能部门中发挥作用,最能够凸显收益的就是将之应用于需要大量重复性劳动的工作中,或是有明确规则可以依据的工作中。通过应用RPA,效率一般可以提升4-5倍。这是因为RPA具备,高效、合规、节省成本、能提升准确性和生产力等优势。更为重要的是,RPA可以将员工的时间释放出来,让员工把时间和关注点放在更有价值的事情上——包括重新规划工作内容,更专注地解决产品组合、利润创造以及产品定价等机器人无法替代的工作上。为了能够最大限度地发挥RPA的功能,并为公司带来更为广阔的发展空间,CFO们必须要对RPA技术具备深入的了解。这样才能在之后的评估中,对接下来的工作有着清楚的认识和更为妥善的安排,优先考虑能够给公司带来最佳效益的部门,进行RPA的部署,依靠RPA解决企业痛点。

July 5, 2019 · 1 min · jiezi

CSSCSS3-实现-居中水平垂直

1,水平居中:行内元素 把行内元素放在一个属性块(display:block)元素中,然后设置父层元素属性居中: .test { text-align:center;} 2,水平居中:块状元素 设置外边距 .test { margin: 100px auto;} 3,水平居中:多个块状元素 把块状元素属性(display:inline-block),然后设置父层元素属性居中: .test { text-align:center;} 4,水平居中:多个块状元素(flexbox布局实现) 把块状元素的父元素属性 display:flex和justify-content:center,如下设置: .test { text-align:center;} 5,垂直居中:单行的行内元素 设置height和line-height属性 .test { height: 100px;line-height:100px; } 6,垂直居中:多行的行内元素 给要居中的父元素设置display:table-cell和vertical-align:middle属性 .test { background: red;width: 200px;height: 200px;/* 以下属性垂直居中 */display: table-cell;vertical-align:middle;} 7,垂直居中:已知高度的块状元素 给要居中的元素设置如下属性 .test { top: 50%;margin-top: -50px; /* margin-top值为自身高度的一半 */position: absolute;padding:0;} 8,水平垂直居中:已知高度和宽度的元素 给要居中的元素设置如下属性 (1).test { position: absolute;margin:auto;left:0;top:0;right:0;bottom:0;}(2) .test{ position: absolute;top: 50%;left: 50%;margin-top: -75px; /* 设置margin-left / margin-top 为自身高度的一半 */margin-left: -75px;} 9,水平垂直居中:未知高度和宽度元素 给要居中的元素设置如下属性 .test { ...

July 4, 2019 · 1 min · jiezi

亚马逊CTOWerner-Vogels将出席CSS-2019对话腾讯汤道生探讨全球云安全新趋势

以云服务为代表的产业互联网引领了数字化升级的浪潮。全球领先的科技企业腾讯、亚马逊将在今年7月30-31日聚首第五届互联网安全领袖峰会(Cyber Security Summit 2019,简称CSS2019),探讨全球云安全新趋势。 CSS最新议程披露,亚马逊副总裁和首席技术官Werner Vogels将出席今年CSS并进行主题演讲。Werner Vogels还将与腾讯公司云与智慧产业总裁汤道生展开对话,分享护航产业互联网“安全”升级的全球经验。 亚马逊CTO来华分享全球化视角下的安全趋势 “对于企业数字化转型的道路而言,云计算无疑是一个巨大的推动力。”在这样的前瞻眼光下,Werner Vogels作为科技巨头亚马逊在云计算领域的掌舵人,不仅带领着团队推出亚马逊云服务,还成功地开拓出全球云服务巨大的市场,将亚马逊打造成全球领先云服务商,并推动亚马逊向人工智能转型加速。 作为推动亚马逊云计算发展的核心人物与叱咤全球的云计算领域大咖,今年7月30日,Werner Vogels将在CSS 2019的现场带来关于云安全的议题分享。 Werner Vogels曾是一名荷兰皇家海军,是世界名校康奈尔大学计算机科学系的研究科学家。他在2004年加入亚马逊,次年便成为CTO和副总裁,至今仍然带领亚马逊业务发展。他凭借在云计算的教育和推广的卓越贡献,被《信息周刊》评为“2008年度CTO”。 亚马逊CTO对话腾讯汤道生大咖共话“如何让云更安全” IIS7站长 作为全球云计算领域的大咖,Werner Vogels在CSS 2019的现场不仅带来“科技感”的云安全议题分享,还将与腾讯公司云与智慧产业总裁汤道生围绕产业数字化升级中的安全趋势变化与实战经验展开深度交流。 在中国,腾讯积累了工业、能源、交通、教育、医疗等众多行业的云服务经验,更是累计获得30多项可信云认证,成为国内拥有可信云认证最全的云计算厂商。腾讯公司云与智慧产业总裁汤道生在2019腾讯全球数字生态大会上曾表示,“在产业互联网大厦里,腾讯提供从毛胚房到精装房的各种行业解决方案,让企业不管规模大小、不管需求多少都能拎包入住。” 数字化转型的实质,是企业在云计算的支撑下,通过应用数字化,进一步挖掘数据价值,依托数据实现业务的创新与洞察,最终推动企业业务的创新和增长。这一过程中,数字资产成为企业的核心资产,数字资产的安全也自然成为重中之重。 “安全绝对是最为重要的,没有所谓百分之百的安全。我们必须在安全方面有不断的投资、不断的创新。” Werner Vogels的话就恰恰印证了安全在企业上云过程中的重要性。 据了解,此次圆桌不仅将聚焦腾讯和亚马逊关于云安全的趋势分享和应用前瞻。Werner Vogels也将分享,作为全球云服务的先行者,他们在传统产业数字化转型中的上云过程有哪些经验与启发?安全在其中扮演了怎样的角色?如何能更好的应对产业数字化的安全挑战? 这些答案都将在CSS 2019的现场为你揭晓! 此外,本届CSS还将契合产业互联网背景,以“产业升级,安全升维”为主题,邀请IDC安全研究副总裁Pete Lindstrom、中国工程院院士邬贺铨、滴滴信息安全战略副总裁弓峰敏等国内外顶级安全大咖,共同进行一场关于产业互联网下安全行业未来发展的全球性对话。让我们共同期待CSS 2019的到来!

July 4, 2019 · 1 min · jiezi

DIVCSS规范命名大全集合

网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率,具体DIV CSS命名规则CSS命名大全内容篇。 常用DIV+CSS命名大全集合,即CSS命名规则 DIV CSS命名目录我们开发CSS+DIV网页(Xhtml)时候,比较困惑和纠结的事就是CSS命名,特别是新手不知道什么地方该如何命名,怎样命名才是好的方法。 一、命名规则说明: - TOP 1)、所有的命名最好都小写2)、属性的值一定要用双引号("")括起来,且一定要有值如class="divcss5",id="divcss5"3)、每个标签都要有开始和结束,且要有正确的层次,排版有规律工整4)、空元素要有结束的tag或于开始的tag后加上"/"5)、表现与结构完全分离,代码中不涉及任何的表现元素,如style、font、bgColor、border等6)、<h1>到<h5>的定义,应遵循从大到小的原则,体现文档的结构,并有利于搜索引擎的查询。7)、给每一个表格和表单加上一个唯一的、结构标记id8)、给图片加上alt标签9)、尽量使用英文命名原则10)、尽量不缩写,除非一看就明白的单词 DIVCSS5给大家介绍常见CSS命名和DIV CSS命名方法。 二、相对网页外层重要部分CSS样式命名: - TOP 外套 wrap ------------------用于最外层头部 header ----------------用于头部主要内容 main ------------用于主体内容(中部)左侧 main-left -------------左侧布局右侧 main-right -----------右侧布局导航条 nav -----------------网页菜单导航条内容 content ---------------用于网页中部主体底部 footer -----------------用于底部 三、DIV+CSS命名参考表: - TOP 以下为CSS样式命名与CSS文件命名参考表,DIV CSS命名集合: CSS样式命名 说明网页公共命名 wrapper 页面外围控制整体布局宽度container或#content 容器,用于最外层layout 布局head, #header 页头部分foot, #footer 页脚部分nav 主导航subnav 二级导航menu 菜单submenu 子菜单sideBar 侧栏sidebar_a, #sidebar_b 左边栏或右边栏main 页面主体tag 标签msg #message 提示信息tips 小技巧vote 投票friendlink 友情连接title 标题summary 摘要loginbar 登录条searchInput 搜索输入框hot 热门热点search 搜索search_output 搜索输出和搜索结果相似searchBar 搜索条search_results 搜索结果copyright 版权信息branding 商标logo 网站LOGO标志siteinfo 网站信息siteinfoLegal 法律声明siteinfoCredits 信誉joinus 加入我们partner 合作伙伴service 服务regsiter 注册arr/arrow 箭头 ...

July 4, 2019 · 1 min · jiezi

在Typescript项目中如何优雅的使用ESLint和Prettier

对于Typescript项目的编码规范而言,主要有两种选择ESLint和TSLint。ESLint不仅能规范js代码,通过配置解析器,也能规范TS代码。此外由于性能问题,TypeScript 官方决定全面采用ESLint,甚至把仓库作为测试平台,而 ESLint 的 TypeScript 解析器也成为独立项目,专注解决双方兼容性问题。 最近在我的项目的编码规范中全量的用ESLint代替了TSLint,针对其中遇到的问题做一个记录。 用ESLint来规范Typescript代码用ESLint来规范React代码结合Prettier和ESLint来规范代码在VSCode中使用ESLinthusky和lint-staged构建代码工作流gitlab的CI/CD来规范代码原文在我的博客中: https://github.com/forthealll... 欢迎star和收藏 一、用ESLint来规范Typescript代码首先安装依赖: npm i -d eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin这三个依赖分别是: eslint: ESLint的核心代码@typescript-eslint/parser:ESLint的解析器,用于解析typescript,从而检查和规范Typescript代码@typescript-eslint/eslint-plugin:这是一个ESLint插件,包含了各类定义好的检测Typescript代码的规范安装好这3个依赖包之后,在根目录下新建.eslintrc.js文件,该文件中定义了ESLint的基础配置,一个最为简单的配置如下所示: module.exports = { parser: '@typescript-eslint/parser', //定义ESLint的解析器 extends: ['plugin:@typescript-eslint/recommended'],//定义文件继承的子规范 plugins: ['@typescript-eslint'],//定义了该eslint文件所依赖的插件 env:{ //指定代码的运行环境 browser: true, node: true, } }在ts项目中必须执行解析器为@typescript-eslint/parser,才能正确的检测和规范TS代码env环境变量配置,形如console属性只有在browser环境下才会存在,如果没有设置支持browser,那么可能报console is undefined的错误。二、用ESLint来规范React代码如果在你的TS项目中同时使用了React,那么为了检测和规范React代码的书写必须安装插件eslint-plugin-react,然后增加配置: module.exports = { parser: '@typescript-eslint/parser', extends: [ 'plugin:react/recommended' 'plugin:@typescript-eslint/recommended' ], //使用推荐的React代码检测规范 plugins: ['@typescript-eslint'], env:{ browser: true, node: true, }, settings: { //自动发现React的版本,从而进行规范react代码 "react": { "pragma": "React", "version": "detect" } }, parserOptions: { //指定ESLint可以解析JSX语法 "ecmaVersion": 2019, "sourceType": 'module', "ecmaFeatures":{ jsx:true } } rules: { }}在Rules中可以自定义你的React代码编码规范。 ...

July 4, 2019 · 2 min · jiezi

css经典面试题-div不设高度完全居中

要求body下div垂直居中div内文字垂直居中div宽度和高度均为body宽度的一半分析div居中不难,考虑margin或者left/top配合translate属性实现关键点在于div高度等于body一半,由于body没有高度,设置div height: 50%;得到的结果是div的高度为0即使通过对body进行绝对定位的手段使得body高度为100vh,div高度设置50%也只能是body高度的一半,而不是宽度的一半此时要借助于padding,因为padding设置百分比时,参考便是父容器的宽度代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> body{ padding: 0; margin: 0; } #box{ width: 50%; /* div处置居中 */ position: relative; transform: translate(50%, 25%); /* */ /* 此处解决div高度为body宽度的一半,并且文字垂直居中 */ padding-top: 25%; padding-bottom: 25%; line-height: 0; text-align: center; /* */ background-color: #111; color: #fff; } </style></head><body> <div id="box"> box123 </div></body></html>效果

July 3, 2019 · 1 min · jiezi

怎么做大发直属一手代理咨询843302

导师【筘:843302】那么多玩彩导师中,我是一个实事求是的、不夸大其词给你们画饼的导师!专业与否不是我说了算,是实力说话,我能带你回血稳赚,甚至捞第一桶金。这边我想跟彩友说的,计划方案是一方面,自己玩谁都不可能一直中,自认为会看走势盲目下注的都会死的很惨。计划不一定百分百中,谁都不是神人,我们讲究实事求是、以诚相待,不带忽悠的,怎么玩中奖率高,这是一个值得长期摸索探讨的话题,我有技巧你有需求。你们要清楚,有规律技巧的计划方案绝对比盲目下注中奖率高得多! 1、不单要学会赢还要懂得怎样去止损,定下个止损目标是为了帮助自己在失手的时候有个损失限度,不受到翻本情绪的影响导致自己更加的错误下去。这里就跟炒股一样,有止损就一定要有止赢,不要以为你赢那天你会一直赢下去,我告诉你,玩彩十个有九个都是一开始赢后面爆了帐户的。彩是每天都会有,不要急着打回来,今天输了,明天还有机会。今天挂了。改日再战! 2、稳赚方法技巧是有的,但我在这里说的稳赚是最少以一个星期为单位,短期暴利模式网上一搜一大堆,但都拼不过变态期,一把回到解放前很多人都经历过,快三方式很多接近稳赚,我告诉自己是稳赚,但我不敢这么跟大家说,因为没有什么事情是绝对的,何况堵搏。为什么我说很多方法都可行呢?因为我不是叫你从早上九点到晚上12点都玩,那什么方法都是会回到解放前的。抓住重要,几把就可以收工了,用得着这么麻烦吗?而且庄家最怕你什么?不怕你赢,就怕你赢了不玩。 3、止损与止赢的比例。我个人建设止损与止赢的比例定在1:1。就是说比如你帐号是1W的,你今天的目标是赢1千,那你一定要做到赢1千就收,同样的到你输1千的时候你也要收。不要跟我说拿1W只赢1千很小,不合理。我相信这么多人玩彩的没有多少人能做到平均每天25%利润,我估计99%的人都做不到,其实不是他们的技术做不到,是他们的心态做不到。而我可以带你们做得到回血本金25%以上! 我是一位真正可以教你们看懂规律,学懂下注技巧的导师。信任的第一步是自己跨出去的,机会也要自己把握住的,翻身致富的梦想还是要有的,兴许很快就实现了。我已经在这等你们了,想学真本事在自己手里,找我就对了,带你稳赚回血,不仅授之以鱼,关键的是授之以渔!彼此把握,你们会欣慰现在的选择,因为我有100%的用心和信心带你们稳赚回血!信人先信己,既然在观望,不如就试试,信赖了,一不小心,我就带你捞第一桶金,带你飞了呢!【筘:843302】

July 3, 2019 · 1 min · jiezi

前端面试汇总htmlcss

HTML: 1、前端页面有哪三层组成?分别是什么?有什么作用? 前端页面由结构层HTML,表示层CSS,行为层JS组成。2、HTML5为什么只用写<!DOCTYPE html>? HTML5不是基于SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而HTML4.0基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。3、Doctype作用?标准模式与兼容模式有什么区别? !DOCTYPE声明位于HTML文档的第一行,处于HTML标签之前,告知浏览器的解析器用什么文档标准解析这个文档,DOCTYPE不存在或者格式不正确会导致文档以兼容模式存在。4、HTML5有哪些新特性?移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5? 1)新特性: HTML5现在已经不是SGML的子集,主要是关于图像、位置、存储、多任务等功能的增加; 绘画canvas; 用于媒介回放的video和audio元素; 本地离线存储localstorage长期存储数据,浏览器窗口关闭数据不丢失; sessionStorage的数据在浏览器窗口关闭后自动删除; 语义化标签,footer、header、nav、section等; 表单控件data、email、time、url、search等; 新增了地理定位功能,getCurrentPosition();2)移除的元素: big、center、font、s等;3)支持HTML5新标签: IE8/IE7/IE6支持通过document.createElement方法创建的标签,可以利用这一特性让浏览器支持性标签。4)区分HTML和HTML5: HTML5会声明DOCTYPE; 标签的使用; h5新增的功能使用;CSS

July 3, 2019 · 1 min · jiezi

时间格式转换

时间格式转换先看一下需要实现的效果吧! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> body #date { height: 200px; width: 200px; background: #f5f5f5; display: flex; flex-direction: column; align-items:center; justify-content: center; } .hours{ display: flex; } .time{ width: 30px; height: 50px; text-align: center; line-height: 50px; color: #fff; margin: 0 3px; } .time:nth-child(1){ background: red; } .time:nth-child(2){ background: blue; } .time:nth-child(3){ color: #000; margin: 0; } .time:nth-child(4){ background: orange; } .time:nth-child(5){ background: greenyellow; } .day{ line-height: 3em; } </style> </head> <body> <div id="date"></div> <script> function DateDiff2(type) { // type(TIME 时分; DAY 年月日) let date = new Date(); // 当前时间 let year = date.getFullYear(); // 年 let month = date.getMonth(); // 月 let day = date.getDate(); //日 let hours = date.getHours(); // 时 let minutes = date.getMinutes(); // 分 let newmonth = month < 10 ? "0" + (month + 1) : (month + 1); let newday = day < 10 ? "0" + day : day; let newHours = hours < 10 ? "0" + hours : hours; let newMinutes = minutes < 10 ? "0" + minutes : minutes; if(type == 'TIME') return newHours + ":" + newMinutes else if(type == 'DAY') return "<div class='day'>" + year + "." + newmonth + "." + newday + "</div>" } setInterval(function() { let date = DateDiff2('TIME'); let str = '<div class="hours">' for(let i = 0; i < date.length; i ++) { str += '<div class="time">' + date[i] + '</div>' } str += '</div>' + DateDiff2('DAY') document.getElementById('date').innerHTML = str }, 1000) </script> </body> </html>简单的实现了一下效果,样式写的有点啰嗦,自己写的简洁一些哈!!!上效果图:希望对大家有帮助,感觉有用的给个赞呗! ...

July 3, 2019 · 2 min · jiezi

CSS零碎之emrem

移动端的开发基本很少直接使用px作为单位了,目前最常用的是rem。不过在这之前其实还有个em单位,和rem长得非常的像,那么它们有什么区别呢?又有什么不一样的适用场景呢? 注意:无论使用em,还是rem,客户端最终解析的值依旧是px!em:相对父级元素字体大小的倍数从title的解释就可以看出,em的基准是其父级元素,不过这个父级元素要求是设置有font-size值的,如下面的例子: <div class="father" style="font-size:20px;"> <div class="son" style="font-size:2em;"></div></div>那么son的字体大小就是2 * 20px = 40px,此时,如果father的字体大小变化了,那么son的也会跟着变化。假如没有父元素,则基准就是body(由于默认浏览器默认字体为16px,所以默认情况1em=16px)。 rem:相对 html 根元素字体大小的倍数跟上面解释body基准时的差不多,默认情况下1rem=16px。此时,只要根元素字体大小不变,那么相对于它的rem就不会变。对于移动端的各种机型来讲,由于不同的机型屏幕尺寸、分辨率都不一样,不太可能使用相同的根元素字体大小作为基准,所以所谓rem布局,就是通过js动态计算出不同机型的根元素字体大小值,来对页面进行等比例的缩放,达到适配大部分机型的效果。那么具体如何去设定这个基准呢?假设把手机屏幕宽度均分成10等份(因为rem布局就是针对宽度去做设定的),规定其中的一份作为根元素的font-size值,那么根元素font-size值就可由下述公式获得: document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';在这个基准下,那么1rem的值也随之得到了: 1rem = document.documentElementstyle..fontSize = document.documentElement.clientWidth / 10 + 'px';那么,不同屏幕的机型由于屏幕宽度不同,也就得到了在"屏幕宽度均分成10等份"这个标准下的rem相对值。比较完整的计算方式如下: // set 1rem = viewWidth / 10function setRemUnit () { var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px'}setRemUnit()// reset rem unit on page resizewindow.addEventListener('resize', setRemUnit)window.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit() }})注意:这里的标准 "10"可以是任一值,只要跟下面转换公式中用到的标准值保持一致即可,这里只是为了计算方便才这么设定。这样,rem的基础生态就搭建好了。那么如何基于这套标准应用到开发中去呢? 在继续之前,先来了解下"像素"这个知识点,因为接下来都会用到它的概念。 像素分为两种:设备像素和CSS像素 1、设备像素(device independent pixels): 设备屏幕的物理像素,任何设备的物理像素的数量都是固定的 2、CSS像素(CSS pixels): 又称为逻辑像素,是为web开发者创造的,在CSS和javascript中使用的一个抽象的层 在pc端,css像素和物理像素是1:1的关系;而在移动端,由于类似retina的各种高清屏的出现,css像素和物理像素的关系一般是2:1或者3:1,即1个物理像素容纳2到3个css像素,实现高清的效果。一般移动端页面的开发流程是:设计人员以某个机型作为标准,设计好UI。前端开发针对这个机型的UI做开发,然后其它机型相对的去等比例缩放。这里以iphone6作为标准(因为实际开发中基本也是用它做设计),它的物理像素为750x1334,css像素为375*667,假设UI上图片a的宽度为140,那么如何把它转换成以rem为单位的值呢?现在屏幕宽度是已知的10rem,要求UI上宽140的rem值,假设为X,由下图可以很容易的得到比例关系: ...

July 3, 2019 · 1 min · jiezi

uniapp-scrollview-实现滑动菜单

<scroll-view class="monthDescTab" scroll-x="true" @scroll="scroll" scroll-left="0"> <view v-for="(month, index) in dataArrMonth" class="beforeMonth" :class="beforeMonthActive == index ? 'active' : ''" @click="toMonth(month, index)" :key="month" v-show="monthTitleShow" > {{ month }}月 </view></scroll-view><style>.monthDescTab { width: 100%; /* * 文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。 * 只有加入这句话white-space: nowrap; scroll-view组件才能够滑动(此处为横向滑动) */ white-space: nowrap; font-size: 30upx; height: 50upx; line-height: 50upx; color: #e8e8e5;}</style>

July 3, 2019 · 1 min · jiezi

如何把一个项目从Git本地仓库上传到github上

1、在桌面上创建一个文件夹(或者mkdir一个文件),将代码拷贝到该文件夹。 2、打开该文件,鼠标右击进入Git Bash Here 3、通过命令git init把这个文件夹变成Git可管理的仓库 4、通过git add把项目添加到仓库(或git add .把该目录下的所有文件添加到仓库,注意点是用空格隔开的)在这个过程中你其实可以一直使用git status来查看你当前的状态。 5、用git commit -m "日志" 把项目提交到仓库。 6、git remote add origin (仓库地址) 可能出现错误:! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@gitee.co解决: 1、先输入git pull --rebase origin master2、在输入git push origin master如果还不行,出现push declined due to email privacy restrictions则

July 2, 2019 · 1 min · jiezi

译来用-SVG-和-CSS-画朵云彩吧

译文出自:闪电矿工翻译组原文地址:Drawing Realistic Clouds with SVG and CSS 原文作者:Beau Jackson 仓库原文链接:Drawing Realistic Clouds with SVG and CSS 译者:sichenguo 【译】来用 SVG 和 CSS 画朵云彩吧希腊神话中有这样一个故事是讲述宙斯创造出来一个云女神涅斐勒,并且类似大多数的希腊神话一样的,这个故事非常的奇异且限制级。下面一个简短克制的版本。 我们能够知道的是: 涅斐勒是由宙斯以他自己美丽的妻子的形象创造的。一个凡人遇见涅斐勒,陷入爱河,并且他们一起有了一个孩子,确切的说是一个半人半马的婴儿。 很怪诞对吧,值得庆幸的是,在浏览器中创建云的过程要简单得多,而且风险要小得多。 (Demo) 最近,我发现开发者Yuan Chuan 已经实现了用代码生成逼真的云。对我来说,浏览器中的云这个概念一直如同希腊神话中的那边神秘。 让我们来看一下这个’画笔‘吧 (点这里),可以见到的是作者通过使用 box-shadow 作为包含两个滤镜的 <filter> 元素的补充实现了这个令人惊叹的‘云图’! 想要绘制出兼顾写实和精致的云图,需要搭配使用feTurbulence 和feDisplacementMap 这两个滤镜。这两个滤镜不仅可以具有强大且复杂的功能,并且还可以提供一些令人兴奋的特性(其中包含奥斯卡获奖算法))!当然,这些功能在浏览器‘引擎盖’下有着令人生畏的复杂性。 虽然这些 SVG 滤镜的物理特性超出了本文的范围,但 MDN 和 w3.org 上提供了大量文档供学习参考。另外还有 feTurbulence 和 feDisplacement 介绍。 对于本文,我们将专注于学习使用这些 SVG 滤镜来实现令人惊奇的效果。滤镜背后的实现算法并不在我们的研究范围内,就像艺术家虽然可以绘制出美丽的景观但却不用懂得油漆的分子结构。 而我们需要做的只是密切关注一小部分 SVG 属性,这些属性使得我们可以在浏览器中绘制逼真的云图。通过学习这些属性可以让我们在项目中按照自己的意愿更好的制作出特定的滤镜效果。 一些必要的前置基础知识CSS 规则 box-shadow的五个值得关注的属性: box-shadow: <offsetX> <offsetY> <blurRadius> <spreadRadius> <color>;让我们来增大这些值(可能会高于正常的开发者会做的),这样在视图的右下方就会有阴影出现。 !(Demo) ...

July 2, 2019 · 3 min · jiezi

垂直居中的几种实现方式

相比较水平居中,垂直居中比较复杂点。尤其是在实际页面中,有很多特殊的场景,导致水平居中实现起来比较麻烦。这篇文章旨在纪录一些我知道的居中方式。以一道经典面试题为例:一个200*200的div在一个div水平垂直居中,用css实现。 首先定义元素<!--dom层:和垂直居中无关的样式直接定义在style里。--><body> <div class="margin" style="width: 500px;height: 500px;background-color: aqua"> <div class="center" style="width: 200px;height: 200px;background-color: antiquewhite"></div> </div></body> 1.百分比的方式缺点:必须知道居中元素的实际大小。根据实际大小用margin进行调整,因为top,left是以元素的上边框进行计算的。 <style> .center { position: absolute; top: 50%; left: 50%; margin-top: -100px; margin-left: -100px; } .margin{ position: relative; //外层元素必须定义为relative,否则是相对整个屏幕水平垂直居中 }</style> 2.百分比结合transform优点:利用transform改良上面那种必须知道元素大小的限制。 <style> .center{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .margin{ position: relative; }</style> 3.flex布局Flex布局(弹性布局),作为css3新增的布局方式,能很好的支持不同的屏幕大小,绝对是现在的前端工程师必备技能。 <style> .margin { display: flex; justify-content: center; align-items: Center; } </style>4.flex布局结合margin .margin{ display: flex; } .center{ margin: auto; }5.绝对定位和0 .margin{ position: relative; } .center{ overflow: auto; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; }

July 1, 2019 · 1 min · jiezi

maskimage的应用

遮罩层,如果学过Flash的同学应该都听过,跟PS的剪切蒙版差不多。大概的效果就是被遮罩层与遮罩层不透明的部分重叠的部分是可见的,而遮罩层是不显示的。类似于现实世界中一张A4卡纸剪了个洞,我们可以通过洞看卡纸后面的物体,这里卡纸相当于遮罩层,只不过洞是遮罩层不透明的部分,其他部分是遮罩层透明的部分,与我们想象中的正好相反。 CSS中也有遮罩这个属性 —— mask-image,但是这么多年了,很多浏览器还不支持,Chrome还需要加前缀。利用mask-image能做出一些不错的效果,比如 https://codepen.io/inegoita/p...。 以前做过活动券的需求,右下角是水印,不同的券颜色不一样。如果直接用图片的话可能就需要不同图片,而用mask-image,只需要一张图片,变换颜色用CSS控制就可以了。http://demo.vczhan.com/css/ma... 前几天,一个朋友接到一个需求,用一个心形容器里面的水波来体现亲密度,水波是动画效果并且限制在容器里。 想到用mask-image这个属性正合适,于是要来了心型图片,拿到设计师导出的SVG文件,用SVGO压缩下得到一个SVG。另外水波是显示在内层容器里的,原来是想直接缩小心形SVG,发现还是有些差别的,还好可以从这个SVG里直接提取出内层的心形SVG 接下来是做水波,用SVG写比较简单,先定义一条波纹路径,用二次贝塞尔曲线画出重复的两段横向波纹,方便后面做动画,然后引用这个路径做两条波纹出来。 <svg viewBox="0 0 120 125"> <defs> <path id="wave" d="M 0 0 C 30 0, 30 15, 60 15, 90 15, 90 0, 120 0, 150 0, 150 15, 180 15, 210 15, 210 0, 240 0 v 125 h -240 z"/> </defs> <use class="wave" xlink:href="#wave" x="0" y="1" /> <use class="wave" xlink:href="#wave" x="0" y="0" /></svg>最后在心形容器的元素上加上遮罩,把水波放在这个容器里,加上动画就好了。 其他细节看demo代码。 参考:https://developer.mozilla.org...

July 1, 2019 · 1 min · jiezi

从电子游戏到DevOps

从电子游戏到DevOps在一个项目团队中,开发与运维之间的关系像极了知名大型游戏《刺客信条》里的故事:开发就是追求自由的刺客联盟——我喜欢用各种新颖技术手段去满足用户爸爸那些花里胡哨的需求,你别管那技术好不好用,总之它实现了需求;运维就是那支持秩序的圣殿骑士——我要的是稳定运行!稳定运行!稳定运行啊! 于是,产品与运维之间形成了一道墙。开发部门夜以继日地打造出自己的“杰作”,并怀着今晚就能开庆功会的心情把自己的“杰作”交给了运维部门,殊不知墙那面的运维们对开发的抱怨才刚刚开始:l 这款优秀的产品在目前的底层平台上无法运行,因为这个平台太古老了,因为这个平台空间不足,因为这个平台不支持某某版本……l 这款产品的体系结构跟我们的{存储,网络,部署,安全}模型不匹配。l 这款产品的报告、安全、监视、备份balabalabala 我们搞不懂 ,所以没法把它做成实际可用的产品。当运维将问题源源不断地反馈给开发后,开发的回复一定是:l 这不是我们的错,我们的代码非常完美,是(运维部门的)部署做的太差劲了。l 运维部门比较笨,他们不懂新技术,为什么他们没法实现最新的技术呢?为什么他们这么落伍呢?l 在我的机器上运行的没问题啊……刺客联盟与圣殿骑士互掐了几百年,但事实上他俩都不过是想维护人类文明;开发与运维互看不顺眼,但他们的初心都是想这个项目能顺利验收。虽然开发和运维这样相爱相杀的关系看上去和游戏很像,但其对项目的危害性可不是游戏,开发与运维陷入一场暴风骤雨,客户则成了蒙受损失的一方,最终团队失去了客户,失去了金钱,失去了项目。DevOps就是为了让开发和运维告别这样的悲剧而被提出的。它是一种框架,包含了很多优秀想法和原则,它重视开发部门和运维部门打破隔墙,通力合作。DevOps希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。专家们总结出了下面这个DevOps能力图,良好的闭环可以大大增加整体的产出。 在DevOps环境中,开发人员和系统管理员会构建一些关系、流程和工具,从而更好的与客户互动,最终提供更好的服务。 DevOps的三大原则基础设施即代码DeveOps的基础是将重复的事情使用自动化脚本或软件来实现,例如Docker(容器化)、Jenkins(持续集成)、Puppet(基础架构构建)、Vagrant(虚拟化平台)等;持续交付持续交付是在生产环境发布可靠的软件并交付给用户使用。而持续部署则不一定交付给用户使用。涉及到2个时间,TTR(Time to Repair)修复时间,TTM(Time To Marketing)产品上线时间。要做到高效交付可靠的软件,需要尽可能的减少这2个时间。部署可以有多种方式,比如蓝绿部署、金丝雀部署等;协同工作开发者和运维人员必须定期进行密切的合作。开发应该把运维角色理解成软件的另一个用户群体。协作有几个的建议:a、自动化(减少不必要的协作);b、小范围(每次修改的内容不宜过多,减少发布的风险);c、统一信息集散地(如wiki,让双方能够共享信息);d、标准化协作工具(比如jenkins)。 DevOps的影响交付使用DevOps有多爽?有调查报告发现,在2016年,根据全球4600位各IT公司的技术工作者的提交数据统计,得出使用DevOps的公司团队平均每年可以完成1460次部署。与传统组织相比,DevOps组织的部署频繁200倍,产品投入使用速度快2555倍,服务恢复速度快24倍。协调合作强有力的发布协调人弥合了开发与运营之间的技能鸿沟和沟通鸿沟,采用电子数据表、电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。 自动化强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。如今,IT行业已经越来越与市场的经济发展紧密挂钩,能否让公司的IT配套方案及时跟上市场需求的步伐,在今天显得至关重要,DevOps或许就是给与公司和团队的一剂良方。最后推荐几个在实现DevOps上已很成熟的项目管理工具:CORNERSTONE、Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker。要说这些工具各有什么特色,改天我们再聊吧。话说不知道刺客信条故事的最后结局会不会也和运维与开发一样,最终两个派系握手言和共同进退呢……

July 1, 2019 · 1 min · jiezi

JS动态解析浏览器和网页的各种宽高属性

获得各种宽高的属性还有公式 body { padding: 50px; height: 500px; border: 1px dotted red; overflow: scroll; } span { color: blue; }<body onscroll="body_scroll()"> <div>网页可见区域高document.body.clientHeight=height + padding * 2- 滚动条宽度<span id="span_client_height">测试的文字12</span></div> <div>网页可见区域宽document.body.clientWidth=width + padding * 2- 滚动条宽度<span id="span_client_width">测试的文字12</span></div> <div>body的总高度document.body.offsetHeight= height+border*2+padding*2 = clientHeight + 滚动条宽度 + 边框宽度*2<span id="span_client_offsetHeight">测试的文字12</span></div> <div>body的总宽度document.body.offsetWidth= width+border*2+padding*2 = clientWidth + 滚动条宽度 + 边框宽度*2<span id="span_client_offsetWidth">测试的文字12</span></div> scrollHeight的MDN解释:元素内容高度的度量,包括由于溢出导致的视图中不可见内容 <div>滚动总高度document.body.scrollHeight<span id="span_client_scrollHeight">测试的文字12</span></div> <div>滚动的高度document.body.scrollTop<span id="span_client_scrollTop">测试的文字12</span></div> <div>滚动总宽度document.body.scrollWidth<span id="span_client_scrollWidth">测试的文字12</span></div> <div>浏览器可视窗口的高度,不包括边框、工具栏、调试窗口(可变)window.innerHeight<span id="span_inner_height">测试的文字12</span></div> <div>浏览器可视窗口的宽度,不包括边框(可变)window.innerWidth<span id="span_inner_width">测试的文字12</span></div> <div>浏览器窗口的宽度,包括滚动条和边框(可变)window.outerHeight<span id="span_outer_height">测试的文字12</span></div> <div>浏览器窗口的高度,包括边框、工具栏(可变)window.outerWidth<span id="span_outer_width">测试的文字12</span></div> <div>屏幕物理分辨率高(不变)window.screen.height=window.screen.availHeight+windows上下任务栏<span id="span_screen_height">测试的文字12</span></div> <div>屏幕物理分辨率宽(不变)window.screen.width=window.screen.availHeight+windows左右任务栏<span id="span_screen_width">测试的文字12</span></div> <div>浏览器窗口的可用高度,不包括windows任务栏(可变)window.screen.availHeight<span id="span_screen_availHeight">测试的文字12</span></div> <div>浏览器窗口的可用宽度,不包括windows任务栏(可变)window.screen.availWidth<span id="span_screen_availWidth">测试的文字12</span></div> <div>浏览器窗口距离显示屏上部高度(可变) window.screenTop<span id="span_window_top">测试的文字12</span></div> <div>浏览器窗口距离显示屏下部高度(可变) window.screenLeft<span id="span_window_left">测试的文字12</span></div></body> 现在我们来动态监视它们的变化添加各种监听事件来监听当浏览器大小发生改变时各种数据的变化规律 function body_scroll(){ console.log(this) console.log(document.body.scrollTop) } window.onload = function () { dataUpdate(); } window.onresize = function () { dataUpdate(); } window.onscroll = function () { console.log("window.onscroll") dataUpdate(); } document.body.onclick =function () { dataUpdate(); }//浏览器位置变化了之后我们点击body来获取变化 ...

July 1, 2019 · 2 min · jiezi

2019年7月所遇知识点整理

*注:本文章是在工作过程中所接触的知识点的整理,涉及的东西比价杂乱,如有错误之处,欢迎纠错与指导

July 1, 2019 · 1 min · jiezi

css实现文字竖排的方式

html中文字的默认排列是横向排列的,但一些特殊情况下是需要文字竖向排列的。单行文字竖向排列 .onecn{ width: 20px; margin: 0 auto; line-height: 24px; } .oneen{ width: 15px; margin: 0 auto; line-height: 24px; font-size: 20px; word-wrap: break-word;/*英文的时候需要加上这句,自动换行*/ word-break:break-all;}说明:实现文字单行竖向排列,只需要把宽度设置为刚好容纳一个字体的宽度即可。 多行文字竖向排列 .two{      margin: 0 auto;      height: 140px;      writing-mode: vertical-lr;/*从左向右 从右向左是 writing-mode: vertical-rl;*/     writing-mode: tb-lr;/*IE浏览器的从左向右 从右向左是 writing-mode: tb-rl;*/  }说明:高度很重要,如果需要控制文字的间距和行距,可以添加属性letter-spacing和line-height。 扩展:竖排文字动画显示效果(文字从上到下动画显示出来) end~~~如有更好方法,欢迎大家留言讨论,谢谢!!

July 1, 2019 · 1 min · jiezi

我们开发者有自己的导航网站啦-wanghangcomcn-Beta版正式上线

一直想把本地自己用的导航发布到线上,由于自身UI不过关,长期以来只是停留在“筹备”之中 ̄▽ ̄。最近把界面简单做了一下美化,正式发布上来了,不过是简化版本,有许模块没有加入其中,后期会陆续更新,敬请期待!心愿是为我们开发者、前端以及UI设计师提供一个属于我们自己的导航主页。希望大家多多包含、多多提提意见,多多支持,感谢!围观网址:www.wanghang.com.cn,欢迎大家拍砖

July 1, 2019 · 1 min · jiezi

一年前端女生面试经验分享

写在前面 18年通过校招来到深圳的一家外包公司,内中曲折不在这里啰嗦,太坑了,不干了。在这里奉劝还没毕业的学弟妹们,毕业第一家千万别选外包!写简历这一年,我没做过什么正经项目,要做也是让你改改小样式,做做表格和测试,再来就是复制粘贴,简历上要按照真实情况写,那就是3k开的hr都不会找你去面试的。所以从简历开始包装,找几个项目代码看懂,最好选用框架写的项目。再来就是专业技能,写你熟悉的以及职位描述要求的技能,对号入座。 20-99人小公司 没有什么技术傍身的最好别去小公司,我总共面了3个小公司,大概都是要你上能前端、下能后端、中间还会ui+ps,还让你不断学习算法,有一家公司更甚,直接跟我说,基本无休,半夜都有可能被拉起来那种。。。balabala,有一家是老板特别嚣张,全程门缝里看人。 面试一:(问的特点是:问了简历上有的,还问了它们招人需要会的技术,即前后端数据库算法微信小程序都问)1、vue和react的不同点2、vue和其他两个比起来有什么优势3、移动端和pc端上传视频和图片有什么不同4、element怎么引用的,按需还是全局5、怎么取到table中的td(我说jq,她说用h5中的cell。。。???黑人问号)6、说说es6新增了什么,我能想到的7、什么可以避免全局污染(答案,箭头函数)8、箭头函数的this指向改变,本来是指向window,那怎么让它指向当前9、怎么把h5代码放进小程序框架10、了解服务器方面吗?会不会搭服务器环境,打包,上线11、了解算法吗,说说我了解的算法,我说排序,二叉树等等12、问我排序有哪些?我说快速排序、冒泡排序(让我现场敲快速排序)额(⊙o⊙)… 面试二:(问的特点是:他说看着简历来问)1、html5和html代码怎么区别?utf-8怎么加?。。。我说有个属性,他说叫什么。。。回来才想起,是charset2、问我css权值,不就是优先级吗,问什么权值啊我回答的是优先级,他说不对。。???3、样式写法优先:内联样式-id选择-class选择-元素4、熟悉原生js是怎么熟悉法?5、h5、css3新特性6、flex布局7、ajax怎么理解?问我直接在网页输入网址和用ajax请求的有什么区别?其实他想说,一个是全局更新,一个是局部更新8、vue的computed和监听有什么不同9、在data中有个值a,在计算属性返回,a变化了,返回的值会变吗?10、如果在var a定义的a呢,计算属性返回的会变吗11、问v-on和v-bind的区别12、v-on:click=后面接的东西叫什么?。。。修饰符13、vue的组件通信14、data()这样写法和data:有什么不一样15、了解vuex吗 面试三:(问的特点就是:从门缝里问,还不知道他想表达什么主要是)问jq中a.addclass().click()是怎么做到一直 .下去的?js中是怎么实现的?事件委托说说是什么?2000的阶乘写一个闭包,并讲原理this的指向 外包公司 面试四:去面了两次腾讯外包,总的来说就是比较重视基础,爱问原理 第一家:途径信息1、觉得用scss和直接用css有什么区别?Scss相比有什么优点?2、Ant Design3、有没有做过前端代码性能优化的工作?怎么做的4、有没有做过一些前端安全性能?5、前端点击流,数据统计6、列举熟悉的编码规范7、介绍一些react的模型MVVM框架8、有了解css3和es6的新特性吗9、介绍一下什么是盒模型10、描述一下这两个系统(vue/react)的登录功能有什么区别 11、是否能够描述出前端通信机制12、深度克隆13、PC端和移动端开发的区别笔试经常考察点:闭包、变量和函数作用域、this指向、数组和字符串方法 第二家:文思海辉(历史第二快结束,十几分钟)问了两个div不设置高要怎么自适应高度一致(这个我没答出来,直接gg)id和class的区别 以上都是要求比较高的外包,需要你能担当更大的责任,后来有一家需要做的挺少,因为是女生,而且项目以后端为主,要求不是很高,只问了浏览器存储和js继承,所以面试也是有运气的一部分的。 还面了两家根本是不符合条件的,他们是要做小程序的。。。所以去面试前,做好问清楚。 最后,我决定好好啃几个项目,看懂了再去面试,再好好看看基础,加油!

July 1, 2019 · 1 min · jiezi

总结清除浮动的方法

方法一、在结尾处添加空div标签clear:both在浮动的盒子之下再放一个标签,在这个标签中使用clear:both,来清除浮动对页面的影响. 注意:一般情况下不会使用这一种方式来清除浮动。因为这种清除浮动的方式会增加页面的标签,造成结构的混乱. <div class="box"> <div class="red">1</div> <div class="sienna">2</div> <div class="blue">3</div> <div class="clear"></div></div>方法二、父级div定义 overflow: auto原理:使用overflow属性来清除浮动有一点需要注意,overflow属性共有三个属性值:hidden,auto,visible。我们可以使用hiddent和auto值来清除浮动,但切记不能使用visible值 <div class="box over-flow"> <div class="red">1</div> <div class="sienna">2</div> <div class="blue">3</div></div>方法三、使用伪元素来清除浮动(:after,注意:作用于浮动元素的父亲)(注:主要推荐该方法) .clearfix:after{ content:"";/*设置内容为空*/ clear:both;/*清除浮动*/ display:block;/*将文本转为块级元素*/ height:0;/*高度为0*/ line-height:0;/*行高为0*/ visibility:hidden;/*将元素隐藏*/}.clearfix{ zoom:1;/*为了兼容IE*/}end~~~如有更好方法,欢迎大家留言讨论,谢谢

June 30, 2019 · 1 min · jiezi

内敛元素间隙问题

行内元素之间会产生间隙bug问题的场景:当行内元素之间有“回车”、“tab”、“空格”时就会出现间隙。注:常见的行内元素有:img、span、a、b等 解决方法写在一行,之间不要有空格之类的符号(不建议,代码混乱,不直观) <div><a>1</a><a>2</a><span>33333</span><span>44444</span><em>555555</em></div>父元素设置font-size:0,然后内敛元素上再设置具体的字体大小。div{font-size:0;}span{font-size:16px;}float浮动个人认为最直接的方法,当然是在适当的场景中,因为过度的浮动会产生需要清除浮动的必要 如有更好的方法欢迎大家留言,谢谢~~~

June 30, 2019 · 1 min · jiezi

表单元素中readonly和disabled的区别

一、readonly和disabled作用元素的范围不同disabled属性可以作用于所有的表单元素。readonly属性只对<input type="text">、<input type="number">、<textarea>和<input type="password">等可以输入的表单元素有效。 二、readonly和disabled对元素的作用程度不同readonly属性只是将元素设置为只读,可以获取焦点、失去焦点。而disabled属性直接阻止对元素的一切操作。 disabled属性阻止对元素的一切操作,例如获取焦点,点击事件等等。readonly属性只是将元素设置为只读,其他操作正常。 三、readonly和disabled对表单提交的作用不同表单元素在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去, 而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据) disabled属性可以让表单元素的值无法被提交。readonly属性则不影响提交问题 总结readonly 属性规定输入字段为只读。只读字段是不能修改的。不过,用户仍然可以使用 tab 键切换到该字段,还可以选中或拷贝其文本。 readonly 属性可以防止用户对值进行修改,直到满足某些条件为止(比如选中了一个复选框)。然后,需要使用 JavaScript 消除 readonly 值,将输入字段切换到可编辑状态。 readonly 属性可与 <input type="text"> 或 <input type="password"> 配合使用。 disabled 属性规定应该禁用 input 元素。被禁用的 input 元素既不可用,也不可点击。可以设置 disabled 属性,直到满足某些其他的条件为止(比如选择了一个复选框等等)。然后,就需要通过 JavaScript 来删除 disabled 值,将 input 元素的值切换为可用。 注释:disabled 属性无法与 <input type="hidden"> 一起使用。

June 30, 2019 · 1 min · jiezi

转载史上最简单的平衡树无旋Treap

【转载】史上最简单的平衡树——无旋Treap作者:fzszkl博客地址:https://ac.nowcoder.com/discu...使用此PDF文件时请保留上述信息!谢谢合作!觉得文章不错请点击链接为博客点赞!高能预警:所有示例代码都是数组版的,欢迎copy!前置知识:线段树!请确保你完全理解最基础的线段树和LazyTag(区间加法和区间求和). 一、简介无旋Treap,又称fhq_treap,是范浩强大佬发明的一种强力数据结构. 总的来说,它可以支持一切Treap和Splay等平衡树的操作,支持可持久化(但是这篇博客不会讲),常数远小于Splay,但是处理LCT问题略比Splay逊色,以至于我到现在还不会. 对于初学者来说,它比Splay好学,比Treap好用,实在不失为一个性价比极高的数据结构. 二、详解首先让我们来复习一下平衡树们的祖宗——二叉搜索树的性质: 递归定义,空树是一棵二叉搜索树,二叉搜索树的左子树的最大点权小等于根的点权小等于右子树的最小点权,二叉搜索树的左右子树也是二叉搜索树. 二叉搜索树的插入,删除,搜索等操作都容易被极端数据卡满复杂度,这时我们就需要各种神奇操作来确保它的树高期望大小为log级别.我们直接看无旋Treap是如何操作的(因为其他几种我不大会): 无旋Treap有两种基本操作: (1)分裂Split将树分为两棵树,其中树A的最大点权小等于树B的最小点权.因为树高期望为log,所以单次操作的复杂度期望为log. (2)合并Merge将两棵树合为一棵树,其中树A的最大点权小等于树B的最小点权.为了保证树高期望为log,我们要想办法随机合并. 没了(卧槽你啥都没说啊). 好吧,为了博客过审,还是再来仔细讲一下. 以下实例代码中,0代表空节点,Pushdown代表下传标记,Pushup代表向上更新. 先来看一眼Split: void Split( int Nod , int Siz , int &A , int &B ) { if( Nod == 0 ) return (void)( A = B = 0 ) ; Pushdown( Nod ) ; if( Siz <= Size[Ls[Nod]] ) B = Nod , Split( Ls[Nod] , Siz , A , Ls[Nod] ) ; else A = Nod , Split( Rs[Nod] , Siz - Size[Ls[Nod]] - 1 , Rs[Nod] , B ) ; Pushup( Nod ) ;}Nod为当前准备拆开的节点,A和B为左右子树根节点的指针,Siz为拆分出的左子树的大小. ...

June 28, 2019 · 1 min · jiezi

自定义input-checkbox或者radio的样式

浏览器自带的单选钮和多选框的样式都比较单一,很多时候我们需要更换它们的样式。 HTML <div> <input type="radio" name="radioname" id="radio_1st" value="1"> <label for="radio_1st">这是一个单选钮</label></div>关键:1,label的for属性绑定到input框的id属性,这样保证label再被点击时也点击了input单选钮(label拥有了input的点击性质)2,此时的input框可以被隐藏起来,将所有样式写到label上,做一个假的单选钮样式 CSS /*隐藏input*/input[type="radio"] { display: none;}/*label虚拟选择器添加单选钮未点击状态样式*/input[type="radio"]+label:before { background: url(../images/radio-check-out.png);}/*label虚拟选择器添加单选钮点击状态样式*/input[type="radio"]:checked+label:before { background: url(../images/radio-check-in.png);}/*样式上完成单选框状态的展示*/效果

June 28, 2019 · 1 min · jiezi

深入理解JavaScript的类型转换

前言JavaScript作为一门弱类型语言,我们在每天的编写代码过程中,无时无刻不在应用着值类型转换,但是很多时候我们只是在单纯的写,并不曾停下脚步去探寻过值类型转换的内部转换规则,最近通过阅读你不知道的JavaScript中篇,对js的值类型转换进行了更加深入的学习,在此分享给大家参考学习。概念将值从一种类型转换为另一种类型通常称为类型转换,主要发生在静态语言的编译阶段;强制类型转换则发生在动态语言的运行阶段;JavaScript作为一门典型的动态弱类型语言自然而然采用的是强制类型转换(即隐式强制类型转换和显式强制类型转换);在js的强制类型转换总是返回标量基本类型值,如字符串、布尔、数字,不会返回对象和函数 var a = 42;var b = a + '';//隐式强制类型转换var c = String(a);//显式强制类型转化前情提要在阅读后面的内容之前,我们首先要明白下面几个概念,以方便对后续内容的理解 封装对象 :eg:var a = new String('abc'),a被叫做封装了基本类型的封装对象,还原一个封装对象的值,可以调用valueOf方法;基本类型的几乎所有方法并非来自本身,而是来自于封装对象的原型对象,例如下面例子 const a = 1.2;console.log(a.toFixed(0));//1基本类型数字并不存在toFixed方法,只是在访问该方法时候,js自动封装基本类型为对应的封装对象,再去访问该封装对象的原型上对应的方法,等同于下面例子 const a = 1.2;console.log(new Number(a).__proto__.toFixed());//0ToPrimitive抽象操作:该操作主要是将对象类型转换为基本类型,首先检查某个对象是否有valueOf属性,如果有则返回该对象的valueOf的值,否则调用该对象的toString属性并返回值(如果valueOf返回的不是基本类型则调用toString方法,例如数组的valueOf返回的还是数组,所有ToPrimitive会默认调用toString方法);抽象值操作ToString负责处理非字符串到字符串的强制类型转换,规则如下:1.null转换为'null',undefined转换为'undefined',其他基本类型都调用基本类型的包装对象属性toString()并返回值。const a = 123;const _a = new Number(123);console.log(String(a), _a.toString());//'123' '123'const b = true;const _b = new Boolean(true);console.log(String(b), _b.toString());//'true' 'true'2.数字的字符串化遵循通用规则,但是极小极大数字使用指数形式const a = 1.07*1000*1000*1000*1000*1000*1000*1000;console.log(String(a));//'1.07e+21'3.对于普通对象来说,除非自行定义,否则toString()返回Object.prototype.toString()的值,其他对象有自己的toString()方法则调用自己的该方法const b = {};console.log(String(b));//[object object]4.数组的默认toString()方法进行了重新定义,将所有单元字符串化以后再用‘,’连接起来const a = [1, 2, 3];console.log(String(a));//'1,2,3'5.JSON字符串化 5-1.JSON字符串化和toString的效果基本相同,只不过序列化的结果总是字符串5-2.JSON对于不安全的值(undefined,function(){},symbol)直接忽略,数组中则以null填充5-3.对象循环引用直接报错,正则表达式序列化为{}ToNumber负责处理非数字到数字的强制类型转换,规则如下:1.true转换为1,false转换为0,undefined转换为NaN,null转换为0console.log(Number(null));//0console.log(Number(undefined));//NaNconsole.log(Number(true));//1console.log(Number(false));//02.对字符串的处理遵循数字常量的相关规定/语法,处理失败时返回NaNconsole.log(Number('123'));//123console.log(Number('0b111'));//7console.log(Number('0o123'));//83console.log(Number('0x123'));//291console.log(Number('123a'));//NaNconsole.log(Number('a123'));//NaN3.对象(包括数组)会首先按照ToPrimitive抽象操作被转换为相应的基本类型值,再按照前两条规则处理;如果某个对象即不存在valueOf方法也不存在toString方法,则会产生TypeError错误(例如Object.create(null)不存在以上两种方法)const arr = [1, 2, 3];console.log(Number(arr));//NaNconsole.log(Number(arr.toString()));//NaNconst num = new Number(123);console.log(Number(num));//123console.log(Number(num.valueOf()));//123const bool = new Boolean(true);console.log(bool.valueOf());//trueconsole.log(Number(bool));//1console.log(Number(bool.valueOf()));//1const obj1 = { toString:()=>"21"}const obj2 = { valueOf:()=>"42", toString:()=>"21"}const obj3 = { a:1}console.log(Number(obj1));//21console.log(Number(obj2));//42console.log(obj3.toString());//[object Object]console.log(Number(obj3));//NaNconst obj = Object.create(null);console.log(Number(obj));//TypeError上述obj1,obj2分别调用toString和valueOf方法,obj3调用原型上的toString()方法 ...

June 28, 2019 · 3 min · jiezi

前端开发应知网站

作为一名前端开发者(所有程序员)最起码遇到bug就算不会解决也应该会搜解决问题的答案跟大家分享一下我个人积累的网站:MDN开发者文档:https://developer.mozilla.org...菜鸟教程:https://www.runoob.com/W3CSchool:http://www.w3school.com.cn/JavaScript教程网:https://zh.javascript.info/一行代码搞定bug监控:https://www.fundebug.com/?tds...阿里巴巴图标库:https://www.iconfont.cn/UI颜色布料:https://www.materialui.co/colorslogo在线制作,有很多:http://www.logofree.cn/在线开发工具:https://tool.lu/c/developer渐进式web应用程序核对表:https://developers.google.cn/...在线存放图片的地址:https://sm.ms/MintUI:https://mint-ui.github.io/#!/...ElementUI:https://element.eleme.cn/#/zh-CNiViewUI:https://www.iviewui.com/Layui:https://www.layui.com/cubeUI:https://didi.github.io/cube-u...Antd:https://ant.design/index-cnMUI:http://dev.dcloud.net.cn/mui/Animate.CSS:https://daneden.github.io/ani...ECharts:https://www.echartsjs.com/ind...HighCharts:https://www.highcharts.com.cn/蚂蚁数据可视化:http://antv.alipay.com/zh-cn/...热力图插件:https://www.patrick-wied.at/s...百度地图开放平台:https://passport.baidu.com视频监控直播的插件VLC:https://www.videolan.org/力扣JS题库:https://leetcode-cn.com/ES6入门(阮一峰大佬的):http://es6.ruanyifeng.com/babel(将ES6代码转为ES5代码):https://babeljs.io/处理时间与日期的JS库:http://momentjs.cn/Lodash:https://www.lodashjs.com/你可能不需要jQuery:http://youmightnotneedjquery....云小蜜智能机器人API:https://help.aliyun.com/produ...易万维源接口:https://www.showapi.com/api/a...短信验证码接口:https://www.mysubmail.com/sms...草料二维码生成器:https://cli.im/RAP2假数据接口:http://rap2.taobao.org/易文档接口:https://easydoc.xyz - - 感谢旅行呱大佬帮助我们丰富资源,他的CSDN主页为:https://me.csdn.net/atsoar免费接口:http://www.bejson.com/knownjs...假数据接口(测试用):http://jsonplaceholder.typico...jQuery插件库:http://www.jq22.com/search轮播图插件:https://www.swiper.com.cn/放大镜插件:http://www.elevateweb.co.uk/i...响应式瀑布流插件:http://www.jq22.com/jquery-in...小表情的emoji:https://emojipedia.org/Postman测试前端请求后端接口:https://www.getpostman.com/coding代码托管平台:https://coding.net/码云代码托管平台:https://gitee.com/github代码托管平台:https://github.com/SVN代码托管平台:https://svnbucket.com/?ADTAG=...SVN代码托管中心:http://www.svnchina.com/禅道:https://www.zentao.net/git官网:https://git-scm.com/npm官网:https://www.npmjs.com/掘金网:https://juejin.im/思否:https://segmentfault.com/知乎:https://www.zhihu.com阿里云:https://www.aliyun.com腾讯云:https://cloud.tencent.com/GitBook:https://legacy.gitbook.com/@l...妙味课堂:https://miaov.com/慕课网:https://www.imooc.com/html中文网:https://www.html.cn/hCoder:http://www.hcoder.net/扣丁学堂:http://www.codingke.com/React官网:https://reactjs.org/Redux官网:https://react-redux.js.org/React Router:https://reacttraining.com/rea...Vue官网:https://cn.vuejs.org/NodeJS官网:http://nodejs.cn/uni-app:https://uniapp.dcloud.io/微信开发者平台:https://developers.weixin.qq....DvaJS:https://dvajs.com/jQuery官网:https://jquery.com/jQuery API中文文档:http://jquery.cuishifeng.cn/ZeptoJS官网:https://zeptojs.com/cheerioJS安装地址:https://www.npmjs.com/package...RequireJS官网:https://requirejs.org/Sass官网:https://sass-lang.com/Less官网:http://lesscss.org/Bootstrap官网:https://www.bootcss.com/VScode快捷键介绍:https://www.cnblogs.com/bindo...Socket通信:https://socket.io/JSONPlaceholder:http://jsonplaceholder.typico...web开发互助网:http://hz.uyi2.com/

June 28, 2019 · 1 min · jiezi

borderimagesource-和-boderradius-不兼容问题

在前端实现设计稿过程中,经常遇到 border-image-source 这种border渐变的情况。如下 代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>border img</title> <style> .demo { width: 200px; height: 50px; border-image-source: linear-gradient(132deg, #00fcff, #009eff); border-style: solid; border-width: 5px; border-image-slice: 1; } </style></head><body> <div class="demo"> </div></body></html>但是,当给元素来个border-radius 立马就变了样: 代码: .demo { width: 200px; height: 100px; border-image-source: linear-gradient(132deg, #00fcff, #009eff); border-style: solid; border-width: 5px; border-image-slice: 1; border-radius: 50px; background: #000; box-sizing: border-box; }border-radius 和 border-image-source不能一起使用,晕。。。 遇到这种问题,有人可能要问设计师要个渐变的背景图了。 其实,换个思路,也很好解决。 一个外层div这个用border的渐变内层div,水平垂直居中,遮盖外层中间部分,边角部分就是border了。代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>border img</title> <style> .demo { width: 200px; height: 100px; background-image: linear-gradient(132deg, #00fcff, #009eff); border-radius: 50px; box-sizing: border-box; position: relative; display: flex; } .true-demo { width: 190px; height: 90px; background: wheat; border-radius: 50px; box-sizing: border-box; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style></head><body> <div class="demo"> <div class="true-demo"></div> </div></body></html> ...

June 28, 2019 · 1 min · jiezi

svgcss3做一个动感的波浪效果

一根矢量的波浪 <svg viewBox="0 0 560 20" class="wave-animation__water-wave wave-animation__water-wave--front"> <use xlink:href="#wave"></use></svg><svg id="wave" width="100%" height="100%"> <path d="M420,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C514,6.5,518,4.7,528.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H420z"></path> <path d="M420,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C326,6.5,322,4.7,311.5,2.7C304.3,1.4,293.6-0.1,280,0c0,0,0,0,0,0v20H420z"></path> <path d="M140,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C234,6.5,238,4.7,248.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H140z"></path> <path d="M140,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C46,6.5,42,4.7,31.5,2.7C24.3,1.4,13.6-0.1,0,0c0,0,0,0,0,0l0,20H140z"></path>完整代码: <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"></head><body> <div class="circle-countdown circle-countdown--ended"> <div class="circle-countdown__content-wrapper"> <div class="circle-countdown__content wave-animation"> <div id="water" class="wave-animation__water"> <svg viewBox="0 0 560 20" class="wave-animation__water-wave wave-animation__water-wave--back"> <path d="M420,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C514,6.5,518,4.7,528.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H420z"> </path> <path d="M420,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C326,6.5,322,4.7,311.5,2.7C304.3,1.4,293.6-0.1,280,0c0,0,0,0,0,0v20H420z"> </path> <path d="M140,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C234,6.5,238,4.7,248.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H140z"> </path> <path d="M140,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C46,6.5,42,4.7,31.5,2.7C24.3,1.4,13.6-0.1,0,0c0,0,0,0,0,0l0,20H140z"> </path> </svg> <svg viewBox="0 0 560 20" class="wave-animation__water-wave wave-animation__water-wave--front"> <path d="M420,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C514,6.5,518,4.7,528.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H420z"> </path> <path d="M420,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C326,6.5,322,4.7,311.5,2.7C304.3,1.4,293.6-0.1,280,0c0,0,0,0,0,0v20H420z"> </path> <path d="M140,20c21.5-0.4,38.8-2.5,51.1-4.5c13.4-2.2,26.5-5.2,27.3-5.4C234,6.5,238,4.7,248.5,2.7c7.1-1.3,17.9-2.8,31.5-2.7c0,0,0,0,0,0v20H140z"> </path> <path d="M140,20c-21.5-0.4-38.8-2.5-51.1-4.5c-13.4-2.2-26.5-5.2-27.3-5.4C46,6.5,42,4.7,31.5,2.7C24.3,1.4,13.6-0.1,0,0c0,0,0,0,0,0l0,20H140z"> </path> </svg> </div> </div> </div> </div> <style> .circle-countdown { width: 441px; height: 441px; position: relative; top: 0; left: 0; padding: 2.5rem; border: 1px solid #fb64b6; border-radius: 50%; overflow: hidden; } .wave-animation { overflow: hidden; } .wave-animation__percent { position: absolute; left: 0; top: 0; z-index: 3; width: 100%; height: 100%; display: flex; display: -webkit-flex; align-items: center; justify-content: center; color: #fff; font-size: 64px; } .wave-animation__water { position: absolute; left: 0; top: 0; z-index: -1; width: 100%; height: 100%; /* 调整这里的60%就可以改变进度,波浪高低 */ transform: translate(0, calc(100% - 60%)); background: #f852d6; transition: all 2s; } .wave-animation__water-wave { width: 200%; position: absolute; bottom: 100%; } .wave-animation__water-wave--back { right: 0; fill: #1d1d1d; animation: wave-back 1.4s infinite linear; } .wave-animation__water-wave--front { left: 0; fill: #f852d6; margin-bottom: -1px; animation: wave-front 0.7s infinite linear; } @keyframes wave-front { 100% { transform: translate(-50%, 0); } } @keyframes wave-back { 100% { transform: translate(50%, 0); } } </style></body></html> ...

June 27, 2019 · 2 min · jiezi

从输入URL到页面展示完成浏览器做了些什么

为什么输入URL就可以显示想要的页面?输入URL后浏览器做了些什么?前端可以针对这些做哪些优化? 浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF、image及其他格式。那么从输入URL到浏览器显示完成,大致是分为2个阶段。首先解析url,完成后通过http获取页面资源,最后将获得的资源渲染展示出来。 HTML页面加载和解析流程1.用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;2.浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;3.浏览器又发出CSS文件的请求,服务器返回这个CSS文件;4.浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;5.浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;6.服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头重新渲染这部分代码;7.浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;8.Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div> (style.display=”none”)。突然少了这么一个元素,浏览器不得不重新渲染这部分代码;9.终于等到了</html>的到来,浏览器泪流满面……10.等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径;11.浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面 1. 解析url、获取页面资源 DNS解析获取ip地址TCP请求(3次握手)http请求获得返回数据html2. 解析、渲染页面 html解析/dom树构建同获取html方式获取css/js/图片的资源解析构建css规则树构建渲染树布局layout渲染页面DNS域名解析 浏览器在发起http请求前,会先解析这个域名,找到ip地址。这个过程就是dns解析。解析过程如下:1)浏览器先查询hosts文件是否有与这个域名对应的ip地址,如果有则直接向这个ip地址发起http请求。查询不到就进行下一步。 2)浏览器向本地DNS服务器发出解析域名的DNS解析报文,本地DNS服务器收到请求后,先查询缓存,判断是否有对应的记录,如果有就返回这条记录,查询不到就进行下一步。 3)本地DNS服务器没有在缓存中查询到对应的记录,本地DNS服务器于是就向DNS根服务器发起查询请求。DNS根服务器收到请求通过查询得到顶级域名对应的顶级域服务器的ip地址,然后向本地DNS服务器发送一条应答报文。 4)本地DNS服务器收到应答报文后,得到顶级域服务器的地址,然后向该地址发送请求解析域名的DNS请求报文。 5)顶级域名服务器在收到请求后先查询缓存是否有对应的记录,如果有就返回对应的记录,如果没有找到就查询域名对应的二级域服务器地址,然后将域名对应的二级域服务器地址返回给本地DNS服务器。 6)本地DNS服务器收到应答报文后,得到二级域服务器的地址,然后向该地址发送请求解析域名的DNS请求报文。 7)二级域服务器在收到请求后先查询缓存是否有对应的记录,如果有就返回对应的记录,如果没有找到就查询域名对应的三级域服务器地址,然后将域名对应的三级域服务器地址返回给本地DNS服务器。 8)本地DNS服务器收到应答报文后,得到三级域服务器的地址,然后向该地址发送请求解析域名的DNS请求报文。 9)三级域服务器在收到请求后在DNS区域数据库中查询对应的记录,返回对应的记录 10)本地名称服务器在收到三级域服务器后,向用户返回一条DNS应答报文,并将这条记录保存在缓存中 11)浏览器就得到了域名对应的ip地址,然后就可以发起http请求了 3次握手4次挥手 ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization):在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1.因此, SYN置1就表示这是一个连接请求或连接接受报文。 FIN (finis):完,终结的意思, 用来释放一个连接。当 FIN = 1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。1)第一次握手:建立连接。客户端发送 SYN 包到服务器,Sequence Number 为 x,进入 SYN_SENT 状态,等待服务器确认。2)第二次握手:服务器收到 SYN 包,对这个报文进行确认,设置 Acknowledgment Number 为 Sequence Number + 1;同时自己也要发送 SYN 包,Sequence Number 为 y;服务器将这些所有信息放入 SYN + ACK 包中发送给客户发,服务器进入 SYN_RCVD 状态。3)第三次握手:客户端收到 SYN + ACK 包。将 Acknowledgment Number 设为 y + 1,即服务器发来的 Sequence Number + 1,并向服务器发送 ACK 包,发送完成后客户端和服务器都进入 ESTABLISHED 状态。 ...

June 27, 2019 · 2 min · jiezi

vue中给window移除事件监听失败的问题

在mounted中给vue添加了一个事件监听,然后再beforedestory中移除事件监听,发现移除事件监听失败后来发现想要移除window的addEventListener,需要把后面的function挂在到this上 mounted () { window.addEventListener('resize', this.listenResize) }, beforeDestroy () { window.removeEventListener('resize', this.listenResize) }listenResize方法我定义在methods中具体请参考baoleilei6的文章

June 27, 2019 · 1 min · jiezi

css开发总结

1.重叠的外边距 当上下垂直的外边距同时存在时会发生外边距折叠。就是只保留两个margin值中较大的那个。 html: <div class="div1"> <div class="div2"></div> <div class="div2"></div> </div>css: .div1{ width: 600px; height: 200px; border: 1px solid #aaa; margin: 0 auto;}.div2{ width: 50px; margin: 20px; border: 1px solid red; height:50px;}效果: 2.重置css样式为了避免不同浏览器的不能默认样式所带来的的麻烦,重置css样式无疑是最好的选择。 * { margin: 0; padding: 0; box-sizing: border-box;}3.所有元素设置为Border-box box-sizing属性有两个值: content-box(默认): -内容的实际尺寸。所有的padding和边框值都不包含。border-box : padding与边框包含在元素的宽度或高度中。 比如一个元素设置为:width: 100px;box-sizing:border-box,那么它的总宽就是100px,包括:padding与边框。4.短横线命名当class或者ID包含多个单词时,应使用连字符(-),CSS不区分大小写,因此不能使用驼峰式命名。同样,CSS中也不建议使用下划线连接的命名方式。 5.不要重复设置 善用继承样式,可以去掉很多重复代码。 6.使用transform属性来创建动画 最好使用transform()函数来创建元素的位移或大小动画,尽量不要直接改变元素的width,height以及left/top/bottom/right属性值。 7.注意选择器的权重 id>.class>el 8.慎用!important 因为!important的权重是最高的,它可以覆盖掉所以的样式 9.em, rem与px em - 设置元素为1em,其大小与父元素的font-size属性有关。这个单位用于媒体查询中,特别适用于响应式开发,但是由于em单位在每一级中都是相对于父元素进行计算的,所以要得出某个子元素em单位对应的px值,有时候是很麻烦的。rem - 相对于<html>元素的font-size大小计算,rem使得统一改变页面上的所有标题和段落文本大小变得非常容易。px - 像素单位是最精确的,但是不适用于自适应的设计。px单位是可靠的,并且易于理解,我们可以精细的控制元素的大小和移动到1px。大型项目使用预处理器Sass, Less, PostCSS, Stylus等css预处理器。它们提供诸如变量、CSS函数、选择器嵌套和许多其他很酷的功能,使CSS代码更易于管理,特别是在大型项目中。 11.压缩CSS文件 网页首要关注点就是加载速度,压缩文件无疑是其中较好的一种方式。 ...

June 26, 2019 · 1 min · jiezi

关于js返回上一页的实现方法

下面是常用代码: <a href="<a href="javascript :history.back(-1)">返回上一页</a>或 <a href="javascript :;" onClick="javascript :history.back(-1);">返回上一页</a>如果是用按钮做的话就是: <input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页">用图片做的话就是: <a href="javascript :;" onClick="javascript :history.back(-1);"><img src="图片路径" border="0" title="返回上一页"></a>[color=#FF0000]几秒钟后[/color]自动返回上一页代码:(加入两个head间,3000表示3秒) <SCRIPT language=javascript>function go(){window.history.go(-1);}setTimeout("go()",3000);</SCRIPT>

June 26, 2019 · 1 min · jiezi

怎么修改inputtextarea元素中的placeholder属性样式

input::-webkit-input-placeholder{} /* 使用webkit内核的浏览器 */input:-moz-placeholder{} /* Firefox版本4-18 */input::-moz-placeholder{} /* Firefox版本19+ */input:-ms-input-placeholder{} /* IE浏览器 */

June 26, 2019 · 1 min · jiezi

CSS3主要内容

CSS3主要内容一、CSS选择器 CSS3选择器规范地址: https://www.w3.org/TR/2011/RE... CSS3最新选择器规范: https://www.w3.org/TR/selectors !---问题---! 1.CSS的全称是什么?Cascading Style Sheets 2.样式表的组成:CSS选择器 + CSS声明块:(一个个CSS声明:属性名+属性值) 3.浏览器读取编译CSS的顺序?CSS选择器的解析顺序:从右往左。这样做是为了减少无效匹配次数,从而匹配快、性能更优。 1.基本选择器*,html,.,#,空格,>,+,~,,(1)通配符选择器:* {}(2)元素选择器:body {}任何一个HTML元素(3)类选择器:. .list {}(4)ID选择器:# #list {}(5)后代选择器:空格 .list li{}(6)选择器的分组:用逗号,隔开各个选择器 h1,h2,h3{color: pink;} 此处的逗号我们称之为结合符基本选择器扩展(7)子元素选择器:>,也可称为直接后代选择器,此类选择器只能匹配到直接后代,不能匹配到深层次的后代元素。 #wrap > .inner {color: pink;}(8)相邻兄弟选择器:+,它只会匹配紧跟着的兄弟元素。 #wrap #first + .inner {color: #f00;}(9)通用兄弟选择器:~,它会匹配所有的兄弟元素(不需要紧跟)。 #wrap #first ~ div { border: 1px solid;}2.属性选择器(1)存在 和 值 属性选择器 [attr]:该选择器选择包含 attr 属性的所有元素,不论 attr 的值为何。 [attr=val]:该选择器仅选择 attr 属性被赋值为 val 的所有元素。 [attr~=val]:该选择器仅选择 attr 属性的值(以空格间隔出多个值)中有包含 val 值的所有元素,比如位于被空格分隔的多个类(class)中的一个类。 (2)子串值属性选择器 [attr|=val] : 选择attr属性的值是val(包括val)或以val-开头的元素。 [attr^=val] : 选择attr属性的值以val开头(包括val)的元素。 [attr$=val] : 选择attr属性的值以val结尾(包括val)的元素。 [attr*=val] : 选择attr属性的值中包含字符串val的元素。 ...

June 26, 2019 · 2 min · jiezi

我们来谈谈项目中遇到的需要兼容pc端和移动端的css布局

首先在head里面需要引入移动端属性:<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 1.css布局方式之div + css布局; <!-- html --><div class="box"> <div class="pic_box"> <img src="./images/pic.png" alt=""> </div> <div class="content_box"> <div class="title"> <img src="./images/title.png" alt=""> <span class="tip">标题: div + css布局</span> <!-- <p class="tip">标题: div + css布局</p> --> </div> <div class="content"> <p>内容: 兼容pc端和移动端的css布局</p> </div> </div></div><!-- js --><script> (function () { var html = document.documentElement; // 获取屏幕宽度 var hwidth = html.getBoundingClientRect().width; // 设置html标签的font-size 大小为hwidth/15 html.style.fontSize = hwidth/10 + 'px'; })()</script>/ css /html,body { margin: 0;}.box { margin: 0.4rem;}.box .pic_box img { width: 3rem;}.box .content_box { float: right; margin-top: -2.7rem; width: 6rem; font-size: initial;}.box .content_box .title { height: 0.7rem; margin-bottom: 0.2rem;}.box .content_box .title img { width: 0.7rem; height: 0.7rem; vertical-align: -25%;}.box .content_box .title .tip { / float: right; / line-height: 0.7rem;}.content { font-size: 0.4rem;}p { margin: 0;} ...

June 25, 2019 · 2 min · jiezi

软工二大作业总结

NJU-SE电影院系统【我又来占坑了】【考完来写】

June 25, 2019 · 1 min · jiezi

Commit-message-代码提交规范

Commit message 代码提交规范**前言**在多人协作项目中,如果代码风格统一、代码提交信息的说明准确,那么在后期协作以及Bug处理时会更加方便。Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。一般来说,commit message 应该清晰明了,说明本次提交的目的。 Commit message 的作用 ● 提供更多的历史信息,方便快速浏览● 过滤某些commit(比如文档改动),便于快速查找信息● 直接从commit生成Change log● 可读性好,清晰,不必深入看代码即可了解当前commit的作用。● 为 Code Reviewing(代码审查)做准备● 方便跟踪工程历史● 提高项目的整体质量,提高个人工程素质Commit message 的格式 Commit message 包括三个部分:Header,Body 和 Footer <type>(<scope>): <subject>// 空一行<body>// 空一行<footer>一、Header Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)(1)type type用于说明 commit 的类别,只允许使用下面的标识 feat:新增功能(feature) fix:修补bug docs:仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等 style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑 refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试,包括单元测试、集成测试等 chore:构建过程或辅助工具的变动 type:代表某次提交的类型,比如是修复一个bug还是增加一个新的feature。 perf: 优化相关,比如提升性能、体验 revert: 回滚到上一个版本 ci:自动化流程配置修改注:如果type为feat和fix,则该 commit 将肯定出现在 Change log 之中 (2)scope scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。(3)subject ...

June 25, 2019 · 2 min · jiezi

推送Web浏览器的通知

你如何增加网站的流量?电子商务企业的主要目标是继续吸引现有用户并吸引新访客。通过发送电子邮件通知,短信提醒,社交媒体和网络推送通知,有很多方法可以增加网站流量和客户互动度。今天,我们将看到推送通知如何适用于Web浏览器。这些是通过桌面和移动浏览器发送给用户的通知。这些通知在用户的桌面或移动浏览器上提供 - 无论用户是否在网站上。这些通知允许用户从他们喜欢的网站获得及时更新,并允许开发人员有效地重新使用相关内容以增加网站的流量。 此项目需要以下项目 Website前端网站,您必须在index.html中包含jav.json文件 manifest.json有关您的网站扩展的基本元数据信息,这将帮助您与浏览器操作进行通信。 service-worker.js这是一个脚本文件,您的浏览器在后台运行并执行同步操作。 notification.js允许浏览器通知的JavaScript文件。这包含将用户注册令牌信息发送到后端服务器的所有操作。 RESTful或ServerSide URL Subscribe创建一个简单的服务端插入操作来存储用户注册令牌。 Unsubscribe以同样的方式创建删除操作以从数据库中删除用户注册令牌。 Get Notification此URL应以JSON数据格式返回通知数据。 CURL推送通知应用程序服务器端CURL项目,用于向订阅用户列表发送通知。 数据库You have to create a database for storing user registration ids/tokens. CREATE TABLE GMC { gid INT PRIMARY KEY AUTO_INCREMENT,rid TEXT } This will contain a push notification data. CREATE TABLE notifications{ nid INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(200),msg VARCHAR(200),logo VARCHAR(300),name VARCHAR(100),url VARCHAR(300)} Firebase入门 第1步为Google Cloud Messing创建Firebase项目。 适用于GCM FCM ID的Firebase应用程序 步骤2登录Google Developer Console并转到您的信息中心 ...

June 25, 2019 · 6 min · jiezi

使用Jquery和CSS折叠图像

如何使用Jquery和CSS进行折叠图像。Orkut.com在更新图像碎片时实现了这个概念,碎片以折叠样式显示图像以减少网页高度。这是使用mouseover,mouseout和css Jquery函数的非常简单的脚本。 Javascript 代码包含javascipt和HTML代码。$(“。imagebox”)。mouseover(function(){})。mouseout(function {}) - imagebox是div标签的类名。$(“。showlink”)。click(function(){}) - .showlink是show anchor tag的类名。$(“。hidelink”)。click(function(){}) - .hidelink是隐藏锚标记的类名。使用Jquery CSS函数chaning max-height:100px <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script><script type="text/javascript">$(document).ready(function(){// Image Area Mouseover and Mouseout$(".imagebox").mouseover(function(){$(".showhide").show();}).mouseout(function(){ $(".showhide").hide();}); //Show link$(".showlink").click(function(){$(".imagebox").css('max-height','');$(".showlink").hide();$(".hidelink").show();}); //Hide link $(".hidelink").click(function(){$(".imagebox").css('max-height','100px');$(".hidelink").hide();$(".showlink").show();}); });</script>//HTML code<div class="imagebox" style="max-height:100px;"><img src="image.jpg"/><div class="showhide" >showhide</div></div> CSS 代码 .imagebox{display:block;position:relative;overflow:hidden}.hidelink{display:none;}.showhide{padding:5px;border-top:dashed 1px #333;border-bottom:dashed 1px #333;background:#F2f2f2 none repeat scroll 0 0;bottom:0;cursor:pointer;display:block;height:18px;left:0;line-height:18px;padding-left:5px;position:absolute;width:100%;}

June 25, 2019 · 1 min · jiezi

VueCSS3实现转盘抽奖

最近有个转盘抽奖的需求,搜了一下现有的轮子,有的是用jQuery的动画函数实现的,有的是用canvas绘图然后再用高频率的setTimeout调用旋转方法,前者太老了没法简单移植到vue项目,后者感觉性能表现可能不会太好。也有一些用CSS动画的方案,设计了加速-匀速-减速三个动画,再计算偏转角度让三个动画尽可能无缝衔接,但我感觉绕了大远路,应该有更简单轻量的实现方案。个人更倾向于用transition来实现,不过网上的例子感觉还不够好,有的倾斜文字都没有对齐,最后还是自己手写了一个。无需jQuery,不用js脚本实现动画细节,动画效果完全连续无需衔接,支持动态设置2个以上任意数量的奖项。核心思路是用transition以及rotate实现旋转动画,使用transition-origin和rotate绘制出定位较为精确的轮盘奖项。 代码及实例展示 <script src="//unpkg.com/vue/dist/vue.js"></script><span id="app"> <span>Prize number: {{ prizeNumber }}</span> <button type="button" @click="!rolling && prizeNumber < 8 && (prizeNumber++)" :disabled="rolling || prizeNumber === 8">Add</button> <button type="button" @click="!rolling && prizeNumber > 2 && (prizeNumber--)" :disabled="rolling || prizeNumber === 2">Remove</button> <div class="wheel-wrapper"> <div class="wheel-pointer" @click="onClickRotate" > Start </div> <div class="wheel-bg" :class="{freeze: freeze}" :style="`transform: rotate(${wheelDeg}deg)`" > <div class="prize-list"> <div class="prize-item-wrapper" v-for="(item,index) in prizeList" :key="index" > <div class="prize-item" :style="`transform: rotate(${(360/ prizeList.length) * index}deg)`" > <div class="prize-name"> {{ item.name }} </div> <div class="prize-icon"> <img :src="item.icon"> </div> </div> </div> </div> </div> </div></div>html { background: #DD7C7D;}.wheel-wrapper { width: 300px; height: 300px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .wheel-pointer { width: 60px; height: 60px; border-radius: 1000px; background: yellow; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); text-align: center; line-height: 60px; z-index: 10; } .wheel-bg { width: 100%; height: 100%; border-radius: 1000px; overflow: hidden; transition: transform 4s ease-in-out; background: #7EEF97; &.freeze { transition: none; background: red; } } .prize-list { width: 100%; height: 100%; position: relative; text-align: center; } .prize-item-wrapper { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 150px; height: 150px; } .prize-item { width: 100%; height: 100%; transform-origin: bottom; .prize-name { padding: 16px 0; } .prize-icon {} }var Main = { data() { return { freeze: false, rolling: false, wheelDeg: 0, prizeNumber: 8, prizeListOrigin: [ { icon: "https://picsum.photos/40?random=1", name: "$10000" }, { icon: "https://picsum.photos/40?random=6", name: "Thank you!" }, { icon: "https://picsum.photos/40?random=2", name: "$500" }, { icon: "https://picsum.photos/40?random=3", name: "$100" }, { icon: "https://picsum.photos/40?random=6", name: "Thank you!" }, { icon: "https://picsum.photos/40?random=4", name: "$50" }, { icon: "https://picsum.photos/40?random=5", name: "$10" }, { icon: "https://picsum.photos/40?random=6", name: "Thank you!" } ] }; }, computed: { prizeList () { return this.prizeListOrigin.slice(0, this.prizeNumber) } }, methods: { onClickRotate() { if (this.rolling) { return; } this.rolling = true; const { wheelDeg, prizeList } = this; const random = Math.floor(Math.random() * (prizeList.length )); console.log(random); this.wheelDeg = wheelDeg - wheelDeg % 360 + 6 * 360 + (360 - 360 / prizeList.length * random); setTimeout(() => { this.rolling = false; alert("Result:" + prizeList[random].name); }, 4500); } }, watch: { prizeNumber () { this.freeze = true this.wheelDeg = 0 setTimeout(() => { this.freeze = false }, 0) } }};var App = Vue.extend(Main);new App().$mount("#app");

June 25, 2019 · 2 min · jiezi

Flex详解

flex 之前是怎么布局的normal flow (文档流)floatpositiondisplay inline-block负maringflex 介绍特点: 块级布局侧重垂直方向、行内布局侧重水平方向,flex布局是与方向无关的flex 布局可以实现空间自动分配、自动对齐(flexible:弹性、灵活)flex 适用于简单的线性布局,更复杂的布局要交给grid的布局(还没发布)用法在父元素上加一个 display:flex 就可以了 // CSS.parent{ display: flex; background: #ccc;}.parent div{ width: 100px; height: 50px; background: palevioletred; margin: 15px;}<!-- HTML --><div class="parent"> <div></div> <div></div></div>flex 父元素的属性以下属性都写父元素里以下属性都写父元素里以下属性都写父元素里 flex-direction 排列方向 (写父级元素里)里面的子元素默认从左向右排列 从右向左排列flex-direction:row-reverse 从上往下垂直排列flex-direction:column 从下往上垂直排列flex-direction:column-reverse flex-wrap 换行不换行flex-wrap:nowrap 换行flex-wrap:wrap (flex-wrap 一般配合 flex-direction 使用) flex-flow 上面两个的简写flex-flow:row nowrap justify-content 主轴方向对齐方式所有子元素的盒子放在 在空间内居中justify-content:space-between 所有子元素盒子放在中间justify-content:center 所有子元素盒子都在周围(都在周围)justify-content:space-around 所有子元素盒子都居左(都居起点)justify-content:space-start 所有子元素盒子都居右(都居终点)justify-content:space-end align-items 侧轴对齐方式(控制子元素对齐方式 父级子级都不要有宽高)所有子元素 以最高的高度为准(默认)align-items:stretch 所有子元素 全都向起点靠 -- 顶对齐align-items:flex-start 所有子元素 全都向终点靠 -- 底对齐align-items:flex-end ...

June 25, 2019 · 1 min · jiezi

CSSSassScss

1、描述CSS 指层叠样式表 (Cascading Style Sheets)Sass (Syntactically Awesome StyleSheets), Sass 是一款强化 CSS 的辅助工具,是对 CSS 的扩展,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、继承(extend)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。SCSS (Sassy CSS),SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件。SCSS 需要使用分号和花括号而不是换行和缩进。SCSS 对空白符号不敏感,其实就和css3语法一样。2、css主要知识点: 1、CSS的书写方式 行内式:将CSS代码书写在HTML标签的style属性中。style是一个通用属性,每一个标签里面都拥有这个属性,规则: <标签名 style=”属性:值;属性:值;”></标签名> 嵌入式:将CSS代码嵌入到HTML文件中,嵌入式是通过HTML中的<style>标签将CSS代码嵌入到HTML网页中,规则: <style type=”text/css”> /*书写CSS代码*/ 选择器{属性:值;属性:值;} </style> 外链式:写以.css扩展名的文件,然后在<head></head>标签中使用<link />标签,将css文件链接到html文件中,规则: <标签名 style=”属性:值;属性:值;”></标签名>2、选择器 元素选择器、id选择器、类选择器、 属性选择器(如为带有 title 属性的所有元素设置样式 [title] {somestyles} )、 属性和值选择器(如为带有 title="W3School" 的所有元素设置样式 [title=W3School] {somestyles} )、 派生选择器(通过依据元素在其位置的上下文关系来定义样式),有三种 后代选择器: 空格隔开; 子元素选择器: >隔开,只能选择作为某元素子元素的元素; 相邻兄弟选择器:选择紧接在一元素后的元素,且二者有相同父元素, 如设置紧接 h1 后出现的 p 的字体颜色:h1 + p {color: red;}; 注1:.a,.b该逗号表示存在其中一个类的元素就设置,多元选择; 注1:.a.b没有空格表示同时拥有两个类的元素。 3、盒子模型 所有HTML元素可以看作盒子,CSS盒模型本质上是一个盒子,封装周围的HTML元素, 它包括:margin(外边距)、border(边框)、padding(内边距)、content(内容) 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。4、定位 Position属性:规定元素的定位类型。即元素脱离文档流的布局,在页面的任意位置显示 absolute: 绝对定位;脱离文档流的布局,遗留下来的空间由后面的元素填充。 定位的起始位置为最近的父元素(postion不为static),否则为Body文档本身。 relative :相对定位;不脱离文档流的布局,只改变自身的位置,在文档流原先的位置遗留空白区域。 定位的起始位置为此元素原先在文档流的位置。 fixed :固定定位;类似于absolute,但不随着滚动条的移动而改变位置。 static :默认值;默认布局. 辅助属性:position属性只是使元素脱离文档流,要想此元素能按照希望的位置显示, 需要使用下面的属性(position:static不支持这些): ①left : 表示向元素的左边插入多少像素,使元素向右移动多少像素。 ②right :表示向元素的右边插入多少像素,使元素向左移动多少像素。 ③top :表示向元素的上方插入多少像素,使元素向下移动多少像素。 ④bottom :表示向元素的下方插入多少像素,使元素向上移动多少像素。 注:上面属性的值可以为负,单位:px 。 5、布局(省略)3、sass4、scss

June 25, 2019 · 1 min · jiezi

css布局如何实现垂直居中

css布局:如何实现垂直居中?1.利用line-height实现居中,这种方法适合纯文字类的; <!-- css --><style>.parents { height: 400px; line-height: 400px; width: 400px; border: 1px solid red; text-align: center;}.child { background-color: blue; color: #fff;} </style></head><body><!-- html --><div class="parents"> <span class="child">css布局,实现垂直居中</span></div></body>2.通过设置父容器相对定位,子级设置绝对定位,标签通过margin实现自适应居中; <!-- css --><style>.parents { height: 400px; width: 400px; border: 1px solid red; position: relative;}.child { width: 200px; height: 100px; line-height: 100px; text-align: center; color: #fff; background-color: blue; /* 四个方向设置为0, 然后通过margin为auto自适应居中 */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto;} </style></head><body><!-- html --><div class="parents"> <span class="child">css布局,实现垂直居中</span></div></body>3.弹性布局flex 父级设置display: flex; 子级设置margin为auto实现自适应居中; ...

June 25, 2019 · 2 min · jiezi

开源vue2和thinkphp搭建的前后端分离项目

大学生论坛采用vue2和thinkphp搭建的前后端分离项目github地址:https://github.com/lll618xxx/... 项目说明本项目为前后端分离项目: 前端采用vue2全家桶(包括vue-router/vuex)搭建,http请求采用axios,组件UI采用element-ui,对象存储采用七牛云(需要自己配置),实现客户端上传图片,目前已完成功能(用户登录注册、用户中心、基于wangeditor 的富文本发布)。 后端采用tninkphp3.2搭建,使用jwt签发token,搭配mysql数据库和Apache服务器 项目使用前端:需要配置后端接口地址 client/src/http/PathConfig.js 安装npm模块 npm install 运行项目 npm run dev后端:我自己采用的是Apache,将整个server目录放到服务器下,我采用的是虚拟域名指向配置API请求地址,至于数据库,可以将vues.sql导入到数据库中,就可以在本地将项目跑起来.

June 24, 2019 · 1 min · jiezi

Linux云端面板旗鱼云梯的优势

很多运维服务器的站长和运维工程师,在管理自己网站的时候遇到很多问题,首先是服务器批量化的管理,做SEO的站长都知道独立IP的好处,所以最好一个网站一个独立IP,这样利于优化,百度搜索引擎也认可一个网站一个IP.我在管理自己网站的时候,最大的问题就是我的SEO配置设置了没有,那些CMS做的优化有没有生效,设置会不会干扰我排名,这些隐患和担忧,都在网站运作中存在.一直到我使用了旗鱼云梯平台,我的这几台服务器建设的网站才找到了最简单最有效的运维方式,服务器管理简单便捷,安全方面防护得当,建站基本是一键化,seo运用简单实用.这些优点让我觉得,我该和迷茫中的站长说几点,首先服务器选择上最好用linux centos7.6以上系统,然后使用旗鱼云梯平台,不用再用第三方工具,直接登录网站就可以管理自己的服务器,而且是批量化云端化,不需要再一台台登陆配置设置安装,只需要登陆旗鱼云梯平台,其他都通过云端浏览器就解决了.对于SEO的优化和帮助,旗鱼云梯是我看到最先进的,国内其他linux面板都是单机化,管理需要一台台登陆,不方便最关键就是这些面板类似一个网站形式,耗用我服务器的资源,我在管理自己网站时,还要防护这个网站安全上别出问题,一旦被入侵就是被黑中毒,然而云端化的旗鱼云梯没有这样的后果,所有连接都是加密探针,页面和服务都在云端不在自己的服务器里.我说的不是很直观,但这是一个站长真的感觉,抛弃传统的单机版linux面板,使用云端化linux面板旗鱼云梯,只有这样你的服务器才会安全和简单,最重要建设的网站符合SEO优化.

June 24, 2019 · 1 min · jiezi

原来没有网络也能扫码支付都是因为它啊

现在网络越来越发达,一般人平时出门也就带个手机,就可以满足日常所需。支付宝和微信是目前主流的移动支付方式,付款时,我们只需要出示我们的付款二维码,商家扫一扫即可完成收款了,非常方便。 是大家有没有发现,当我们的手机没有网络的情况下,手机竟然也能完成支付,这是怎么实现的呢? 无网络情况下,生成离线码 其实,在我们的手机没有网络的时候,手机里生成的这个付款二维码叫做离线码。支付软件会给每个用户分配一个独一无二的身份识别, 叫做种子数据。 当我们手机没有网络的时候,支付软件的程序会根据算法、种子数据、时间等生成一个特别的二维码。商家的扫码枪轻轻一扫,就把这个码的数据返回给支付软件核对,一旦双方数据核对一致,这个支付就成功啦~ 但是在这种情况下,有一点需要注意,用户手机可以没有网络,但是商家的扫码枪、系统以及支付软件的系统必须是在线的,也就是必须连接到网络上,否则就无法核对数据,支付就会失败。 这个离线码会被盗用吗 有机友担心,既然是离线码,那别人是不是可以直接截图使用?万一被别人恶意拍到了,是不是就会被别人随意刷用金额了? 这个是完全不用担心的,因为这个离线码是包含了用户识别、身份识别、令牌等信息,是有唯一性的,而且这个离线码是每60秒就自动更新一次,当我们自己付款成功之后,这个离线码也就失效了,别人拍了也是不能用的,不必担忧会给自己造成经济损失。 什么情况下手机必须有网络 一般在大超市或者规模比较大的商店,商家才会有扫码枪,如果是小店甚至小摊,一般是需要我们扫商家的二维码来付款的。在这个过程,我们的手机扫到二维码之后,还需要填写金额、输入密码、点击确认等一系列操作才能完成支付。 此时,我们的手机就相当于扫码枪,商家的二维码就相当于离线码,就如前面说的,扫码枪是必须在线的,所以我们的手机必须有网络,不然就无法完成支付。 为什么不需要输入密码就能支付 有细心的机友还发现了一个问题,为什么商家的扫码枪一扫,我们手机里的钱就被扣走了,难道不需要我们来输入密码吗?这安全吗? 其实,这个也不用特别担心,这里有3点可以保证我们的资金安全! 01扫码枪资质 扫码枪是要有专门的商店资质才能获取的权利,商家需要递交正规的资料才会申请通过,所以一些不良商家是没有这个功能的。 02金额上限 一般数额不大的情况下,付款是不需要密码的。但是如果付款的金额比较大,付款时会提示需要输入密码才会正常进行交易。另外,超市售货员会在屏幕上面打出金额,我们可以留意一下金额是否正确。 03自定义免密支付 扫码枪能完成免输入密码支付,一方面是因为我们自己开通了免密支付,授权给支付宝和微信,然后支付宝或微信再授权给商家,都是正规的渠道,安全性上完全可以放心。如果担心资金安全,可以取消免密支付协议,这样以后付款就需要手动输入密码了。 在日常生活中,大家有没有遇到因为没有网络而支付失败的糗事呢?欢迎评论区分享你的故事。

June 24, 2019 · 1 min · jiezi

如何快速去除抖音视频水印

说起抖音短视频,近两年来很多产品都火爆起来,像火山小视频、快手等等,而最火的非抖音短视频莫属了。但是在下载到喜欢的视频后发现每个视频都有水印会让人感觉不舒服,不禁会想如何做到抖音去水印呢?今天小编就告诉你怎么用迅捷视频转换器快速去除抖音短视频视频水印,方便快捷又简单。 操作步骤 1、首先打开抖音短视频在里面找到自己喜欢的视频,在抖音短视频找到“保存本地”并点击“保存本地”按钮把视频保存到本地文件中(抖音短视频的默认保存格式为mp4格式)。 2、找到迅捷视频转换器(分为手机版和电脑版,小编习惯使用电脑版去水印)并打开软件选择软件中的“视频去水印”按钮跳转到去水印的界面。 3、点击“添加文件”按钮把抖音短视频下载好的文件放入到迅捷视频转换器中(支持上传mp4、rmvb、avi、mkv等多种视频格式。),然后选择好要保存的视频输出格式和将要输出的文件输出路径后点击“编辑去水印”按钮准备去除水印。 4、点击“添加去水印区域”将蓝色的矩形框移动到有水印的区域并且调整蓝色矩形框的大小把水印调整至蓝色矩形框内点击“确定”按钮,当不小心选错区域时还可以点击“删除选中区域”重新选则去水印区域去除抖音短视频水印。 5、在完成以上步骤后等待大致10秒的时间迅捷视频转换器就会自动把抖音短视频的水印去除。最后在自己之前设置好的输出路径找到去水印后的文件就可以看到没有水印的视频文件啦。 迅捷视频转换器不仅支持可以用去除抖音短视频的水印,有需要的话还可以去除各大短视频和播放器所带来的视频水印。同时还支持手机APP去除视频水印。 看完上述完整的迅捷视频转换器去水印步骤你是否还在纠结如何做到抖音去水印呢?其实抖音短视频去除水印是很简单的呢,赶紧去抖音短视频下载短视频试试如何去除视频水印呀!

June 24, 2019 · 1 min · jiezi

如何从零开始定义一个类似websocket的即时通讯协议

深南大道镇楼定义一个自己的通讯协议并不难,关键在于这个协议的可用性,可拓展性,复杂业务场景的实用性即时通讯应用中,客户端和服务器端都可以看成一个服务器一起复习一下websocketWebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。说说ws协议的优点:说到优点,这里的对比参照物是 HTTP 协议,概括地说就是:支持双向通信,更灵活,更高效,可扩展性更好。支持双向通信,实时性更强。更好的二进制支持。较少的控制开销。连接创建后,ws 客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不* 包含头部的情况下,服务端到客户端的包头只有 2~10 字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的 4 字节的掩码。而 HTTP 协议每次通信都需要携带完整的头部。支持扩展。ws 协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议。(比如支持自定义压缩算法等)我们先看看web socket协议的实现具体过程,再用代码抽象,定义自己的即时通讯协议:连接握手过程 关于WebSocket有一句很常见的话: Websocket复用了HTTP的握手通道, 它具体指的是:客户端通过HTTP请求与WebSocket服务器协商升级协议, 协议升级完成后, 后续的数据交换则遵照WebSocket协议客户端: 申请协议升级首先由客户端换发起协议升级请求, 根据WebSocket协议规范, 请求头必须包含如下的内容 GET / HTTP/1.1 Host: localhost:8080 Origin: http://127.0.0.1:3000 Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw请求头详解 请求行: 请求方法必须是GET, HTTP版本至少是1.1请求必须含有Host如果请求来自浏览器客户端, 必须包含Origin请求必须含有Connection, 其值必须含有"Upgrade"记号请求必须含有Upgrade, 其值必须含有"websocket"关键字请求必须含有Sec-Websocket-Version, 其值必须是13请求必须含有Sec-Websocket-Key, 用于提供基本的防护, 比如无意的连接1.2 服务器: 响应协议升级服务器返回的响应头必须包含如下的内容 HTTP/1.1 101 Switching ProtocolsConnection:UpgradeUpgrade: websocketSec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=响应行: HTTP/1.1 101 Switching Protocols响应必须含有Upgrade, 其值为"weboscket"响应必须含有Connection, 其值为"Upgrade"响应必须含有Sec-Websocket-Accept, 根据请求首部的Sec-Websocket-key计算出来Sec-WebSocket-Key/Accept的计算规范提到:Sec-WebSocket-Key值由一个随机生成的16字节的随机数通过base64编码得到的Key可以避免服务器收到非法的WebSocket连接, 比如http请求连接到websocket, 此时服务端可以直接拒绝Key可以用来初步确保服务器认识ws协议, 但也不能排除有的http服务器只处理Sec-WebSocket-Key, 并不实现ws协议Key可以避免反向代理缓存在浏览器中发起ajax请求, Sec-Websocket-Key以及相关header是被禁止的, 这样可以避免客户端发送ajax请求时, 意外请求协议升级最终需要强调的是: Sec-WebSocket-Key/Accept并不是用来保证数据的安全性, 因为其计算/转换公式都是公开的, 而且非常简单, 最主要的作用是预防一些意外的情况WebSocket通信的最小单位是帧, 由一个或多个帧组成一条完整的消息, 交换数据的过程中, 发送端和接收端需要做的事情如下:发送端: 将消息切割成多个帧, 并发送给服务端接收端: 接受消息帧, 并将关联的帧重新组装成完整的消息数据帧格式详解 ...

June 23, 2019 · 7 min · jiezi

CSS布局如何实现居中布局

1. 父级容器设置成表格,子级设为行内元素。适合子级内容为文本展示。 <!-- css --><style> #parent { height: 200px; width: 200px; border: 1px solid red; display: table-cell; /* 转变成表格 */ text-align: center; /* 水平 */ vertical-align: middle; /* 垂直 */ } #child { background-color: blue; color: white; display: inline; /* 子元素设置为行内或行内块 */ }</style><!-- html --><div id="parent"> <div id="child">内容</div></div>2. 父级容器设置相对定位,子级设置绝对定位后通过外边距居中。 <!-- css --><style> #parent { height: 200px; width: 200px; border: 1px solid red; position: relative; /* 设置相对定位 */ } #child { height: 50px; width: 50px; color: white; background-color: blue; /* 绝对定位,4 个方向设置为 0 后,margin 设为 auto */ position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: auto; }</style><!-- html --><div id="parent"> <div id="child"></div></div>3. 父级容器设置为弹性盒,子级设置外边距。 ...

June 23, 2019 · 2 min · jiezi

我所了解的CSS包含块

写在前面,本文将同步发布于Blog、掘金、segmentfault、知乎等处,如果本文对你有帮助,记得为我得到我的个人技术博客项目给个star哦。 指出错误观念许多开发者认为一个元素的包含块就是他的父元素的内容区,其实这是错误的(至少不完全正确)!一个元素的尺寸和位置经常受其包含块的影响。大多数情况下,包含块就是这个元素最近的祖先块元素的内容区,但也不是总是这样。下面我们看看盒模型:当浏览器展示一个文档的时候,对于每一个元素,它都产生了一个盒子。每一个盒子都被划分为四个区域: 内容区内边距区边框区外边距区 什么是包含块?包含块有分为根元素包含块和其他元素的包含块。 根元素包含块根元素html的包含块是一个矩形,叫做初始化包含块(initial containing block)。可以看到html外面还有空间,这个包含html的块就被称为初始包含块(initial containing block),它是作为元素绝对定位和固定定位的参照物。对于连续媒体设备(continuous media),初始包含块的大小等于视口viewpor的大小,基点在画布的原点(视口左上角);对于分页媒体(paged media),初始包含块是页面区域(page area)。初始包含块的direction属性与根元素的相同。 其他元素的包含块大多数情况下,包含块就是这个元素最近的祖先块元素的内容区,但也不是总是这样,下面就来学习如何确定这些元素的包含块。 如何确定元素的包含块?确定包含块的过程完全依赖于这个包含块的 position 属性,大致分为下列场景: 如果 position 属性是 static 或 relative 的话,包含块就是由它的最近的祖先块元素(比如说inline-block, block 或 list-item元素)或格式化上下文BFC(比如说 a table container, flex container, grid container, or the block container itself)的<span style="color: red">内容区的边缘</span>组成的。如果 position 属性是 absolute 的话,包含块就是由它的最近的 position 的值不是 static (fixed, absolute, relative, or sticky)的祖先元素的<span style="color: red">内边距区的边缘</span>组成的。如果 position 属性是 fixed 的话,包含块就是由 viewport (in the case of continuous media) or the page area (in the case of paged media) 组成的。如果 position 属性是 absolute 或 fixed,包含块也可能是由满足以下条件的最近父级元素的<span style="color: red">内边距区的边缘</span>组成的:A transform or perspective value other than noneA will-change value of transform or perspectiveA filter value other than none or a will-change value of filter (only works on Firefox). ...

June 23, 2019 · 3 min · jiezi

css实现水平垂直居中效果

一、如果是已知宽高的元素做水平/垂直居中效果的话,可以直接用具体的数值指定定位布局或偏移布局,这个就不过多讨论。这里主要介绍在不知宽高或需要弹性布局下的几种实现方式。 二、1.table表格法 思路:显示设置父元素为:table,子元素为:cell-table,vertical-align: center 优点:父元素(parent)可以动态的改变高度(table元素的特性) 缺点:IE8以下不支持 代码实现: .parent1{ display: table; height:300px; width: 300px; background-color: red;}.parent1 .child{ display: table-cell; vertical-align: middle; text-align: center; color: #fff; font-size: 16px;}</style><body> <div class="parent1"> <div class="child">hello world-1</div> </div></body>效果: 2.空元素法思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0缺点:多了一个没用的空标签,display:inline-blockIE 6 7是不支持的(添加上:_zoom1;*display:inline)。当然也可以使用伪元素来代替span标签,不过IE支持也不好 <style>.parent2{ height:300px; width: 300px; text-align: center; background: red;}.parent2 span{ display: inline-block;; width: 0; height: 100%; vertical-align: middle; zoom: 1;/*BFC*/ *display: inline;}.parent2 .child{ display: inline-block; color: #fff; zoom: 1;/*BFC*/ *display: inline;}</style><body> <div class="parent2"> <span></span> <div class="child">hello world-2</div> </div></body>效果: ...

June 22, 2019 · 1 min · jiezi

原生JS快速实现拖放drag-and-drop效果

拖放是很常见的一种交互效果,很多时候我们都会借助于第三方的控件来实现,其实用原生js实现起来也非常的方便。接下来我们就用原生js和css快速实现这样的拖放效果: HTMLHTML的内容很简单,就是五个空的容器和一个可以被拖拽的元素: html: <body> <div class="droppable"> <div class="draggable" draggable="true"></div> </div> <div class="droppable"></div> <div class="droppable"></div> <div class="droppable"></div> <div class="droppable"></div></body>注意点:1. 容器的的class为droppable,用于接收被拖拽的元素,可被拖拽的元素class为draggable,同时设置draggable属性为true,表示该元素可以被拖拽。2. 默认情况下,只有图片、链接还有被选中的文字能被拖拽,其他元素需要设置draggable为true才能被拖拽。所以为了凸显draggable的用法,这里使用<div>而不是<image>来作为被拖拽的元素。CSS在实现样式的时候,除了实现静态的样式,一些过渡状态也需要增加样式以提升视觉体验:1. 元素被拖动的过程中增加边框等效果;2. 当元素被拖动到容器上方时,容器也应增加样式表明容器可以接收一个被拖拽的元素。 css: body { background-color: darksalmon;}.draggable { background-image: url('http://source.unsplash.com/random/150x150'); position: relative; height: 150px; width: 150px; top: 5px; left: 5px; cursor: pointer;}.droppable { display: inline-block; height: 160px; width: 160px; margin: 10px; border: 3px salmon solid; background-color: white;}.dragging { border: 4px yellow solid;}.drag-over { background-color: #f4f4f4; border-style: dashed;}.invisible { display: none;}注意点:1. 图片来源于https://source.unsplash.com/的随机图片;2. .dragging为draggable元素正在被拖动的状态,增加黄色border;3. .drag-over为draggable元素被拖动到容器上方时容器的状态,增加灰色虚线border。JS最后,我们需要通过js监听draggable和droppable的相关的事件。 ...

June 22, 2019 · 1 min · jiezi

关于ECharts折线图非节点的点击事件

ECharts官网教程 详情请看官网教程 前言:相信很多人有这种需求,在点击折线图非节点的时候不能触发点击事件,而官网又没有这方面的教程,只能自己默默的研究了 解决方案如下: // 基于准备好的dom,初始化echarts实例 var mychart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 var option = { title: { text: 'ECharts 入门示例' }, tooltip: {}, legend: { data:['销量'] }, xAxis: { data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"] }, yAxis: {}, series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] }; // 使用刚指定的配置项和数据显示图表。 mychart.setOption(option); //绑定点击事件 mychart.getZr().on("click", function(params) { const pointInPixel = [params.offsetX, params.offsetY]; if (mychart.containPixel("grid", pointInPixel)) { let xIndex = mychart.convertFromPixel({ seriesIndex: 0 }, [ params.offsetX, params.offsetY ])[0]; /*事件处理代码书写位置*/ } });实现的代码解释如下: ...

June 21, 2019 · 1 min · jiezi

移动端禁止保存图片

老板要求禁止用户保存图片防止有人拿去恶意使用。。。但 ios 的图片 像素质量要求都很高老板说 那就虚着吧 虚着也不能让人盗图。。。 呃。。。 禁止图片保存img{ pointer-events: none; -webkit-user-select: none; -moz-user-select: none; -webkit-user-select:none; -o-user-select:none; user-select:none; }禁止保存文字p { -webkit-user-select: none; -moz-user-select: none; -webkit-user-select:none; -o-user-select:none; user-select:none; }

June 21, 2019 · 1 min · jiezi

CSS改变鼠标样式图片

如果你想让你的网站看起来更酷炫,可以改变鼠标样式,用你喜欢的图片来代替。下面就来介绍下步骤方法: 首页把鼠标图标格式转换成.ico格式,大小为32*32转换格式网址为:https://www.easyicon.net/covert/ 然后在CSS样式中增加代码: *{ cursor:url(../images/shubiao.ico),auto;}大功告成啦~~~ 说明: 图片大小最好是32*32的大小Css中的cursor属性不仅仅需要将url()书写正确,还需要填写一个备用样式。 cursor:url('图片地址'),备用选项;。 缺一不可。

June 21, 2019 · 1 min · jiezi

BFC块级格式化上下文的特点和应用场景

BFC(Block Formatting Context)的特点是元素拥有独立的渲染区域,元素内部的内容(边距,浮动元素等)不会影响到外部元素。哪些情况下会触发BFC设置overflow属性,值不为visible设置float属性,值不为none设置position属性,值为absolute或fixed设置display属性,值为inline-block, table-cell, table-caption, flex, inline-flex, grid,或者inline-gridBFC的典型应用场景: 解决块级元素的塌陷问题(Collapsing)块级元素的垂直塌陷: 当两个相邻的块级元素拥有上下方向相邻的边距时(例如:上面的元素拥有margin-bottom值,下面的元素拥有margin-top值),此时上下元素之间的间隙不是两者边距之和,而是两者之中的值较大的一个块级元素的包含塌陷: 当块级父元素没有boder,padding值,块级子元素有margin-top值时,子元素的margin-top值会在父元素的外部生效,也就是整个父元素区域会向下偏移,这个偏移值由子元素的margin-top值决定此外,BFC还可以用于清除浮动带来的影响等

June 21, 2019 · 1 min · jiezi

整理20个让你效率更高的CSS代码技巧

在本文中,我们想与您分享一个由各大CSS网站总结推荐的20个有用的规则和实践经验集合。有一些是面向CSS初学者的,有一些知识点是进阶型的。希望每个人通过这篇文章都能学到对自己有用的知识。 好了,我们开始。 1.注意外边距折叠与其他大多数属性不同,上下的垂直外边距margin在同时存在时会发生外边距折叠。这意味着当一个元素的下边缘接触到另一个元素的上边缘时,只会保留两个margin值中较大的那个。例如: HTML <div class="square red"></div><div class="square blue"></div>CSS .square { width: 80px; height: 80px;}.red { background-color: #F44336; margin-bottom: 40px;}.blue { background-color: #2196F3; margin-top: 30px;} 红色方块与蓝色方块的上下间距是40px,而不是70px。解决外边距折叠的方法有很多种,对于初学者来说最简单的就是所有元素只使用一个方向上的margin,比如上下的外边距我们统统使用margin-bottom。 2.使用flex进行布局flex弹性布局的出现是有原因的。浮动和inline-block虽然也能实现很多的布局效果,但它们本质上是文本和块元素布局的工具,而不是面向整个网页的。flex可以很容易的按照我们预期的方式创建布局。 flex拥有一组面向“弹性容器”的属性和一组面向“弹性项目”的属性,一旦你学会了它们,做任何响应式布局都是小菜一碟。目前各类浏览器的最新版本对flex的支持性也是没有任何问题的,所以你应该多多使用flex布局。 .container { display: flex;}3.重置元素的CSS样式尽管这些年来有了很大的改善,但是不同浏览器对于各种元素的默认样式仍然存在很大的差异。解决这个问题的最佳办法是在CSS开头为所有的元素设置通用的CSS Reset重置代码,这样你是在没有任何默认内外边距的基础上进行布局,于是所产生的效果也就是统一的。 网络上已经有成熟的CSS代码库为我们解决浏览器不一致问题,例如normalize.css、minireset和ress,你可以在你的项目中引用它们。如果你不想使用第三方代码库,你可以使用下面的样式来进行一个非常基本的CSS reset: * { margin: 0; padding: 0; box-sizing: border-box;}上面的代码看起来有些霸道,将所有元素的内外边距都设置为0了,而正是没有了这些默认内外边距的影响,使得我们后面的CSS设置会更加的容易。同时box-sizing: border-box也是一个很棒的设置,我们紧接着就会介绍它。 4.所有元素设置为Border-box大多数初学者都不知道box-sizing这个属性,但实际上它非常重要。box-sizing属性有两个值: content-box(默认) - 当我们设置一个元素的宽度或高度时,就是设置它的内容的大小。所有的padding和边框值都不包含。例如,一个div的宽度设置为100,padding为10,于是这个元素将占用120像素(100+2*10)。border-box - padding与边框包含在元素的宽度或高度中,一个设置为width: 100px和box-sizing: border-box的div元素,他的总宽度就是100px,无论它的内边距和边框有多少。将所有元素都设置为border-box,可以更轻松的改变元素的大小,而不必担心padding或者border值会将元素撑开变形或者换行显示。 5.将图片作为背景当给页面添加图片时,尤其需要图片是响应式的时候,最好使用background属性来引入图片,而不是<img>标签。 这看起来使用图片会更复杂,但实际上它会使设置图片的样式变得更加容易。有了background-size, background-position和其它的属性,保持或改变图片原始尺寸和宽高比会更方便。 举个例子HTML <section> <p>Img element</p> <img src="https://tutorialzine.com/media/2016/08/bicycle.jpg" alt="bicycle"></section><section> <p>Div with background image</p> <div></div></section>CSS img { width: 300px; height: 200px;}div { width: 300px; height: 200px; background: url('https://tutorialzine.com/media/2016/08/bicycle.jpg'); background-position: center center; background-size: cover;}section{ float: left; margin: 15px;} ...

June 21, 2019 · 2 min · jiezi

华为手机中5个典型实用的隐藏功能

现在为什么越来越多人用华为手机呢?这当然是和它有很多实用的功能分不开的!关于华为手机中的实用功能,小编之前和大家也分享了不少,今天小编又来分享一波,还不知道的朋友赶紧收藏起来。 1.手机盾 手机盾的使用可以更好的保证自身的财产安全,手机盾安装在手机的独立安全芯片中,不过在使用它的时候需需要在第三方开通相关业务,目前可以安装且支持手机盾的应用还是比较少的,在华为手机中目前就支持中国建设银行、南京银行、徽商银行、晋城银行以及晋商银行可用。 方法:打开手机中的【设置】-【安全和隐私】-【手机盾】。 2.AI智能翻译 翻译是在生活中比较普遍的应用,在华为手机中有一个比较实用的翻译功能,它隐藏于自带的相机中,只需要拍照就能识别翻译出文字。 方法:打开手机中的【相机】-【左上角】-【AI功能】-【翻译】,然后可以根据自己需要的语言进行拍照翻译。其是对于翻译来说,手机中自带的软件并没有那么好用,而且翻译的文本也不是十分精确,若是想要是翻译的文本更加准确,那你可以试试迅捷PDF转换,这个里面有更好的翻译功能,同时还有其他的实用功能,文件的转换、压缩,都很受用的。翻译效果如下:3.速记 记笔记是很多人都有讨厌的一件事,若是能够直接记录,不用自己输入,相信这个是很多人的心声吧,不过呀,那在华为手机中就有这样的一个功能,那就是速记功能。 方法:打开手机中自带的【备忘录】-【左上角功能按钮】-【设置】-【速记】,然后将按钮进行开启就好,想要的模式自己选择。4.语音唤醒 在华为手机中的语音唤醒功能是很不错的,小编的记性就是很差劲的那种,经常忘东忘西的,偶然间发现了这个功能,让我从此以后在也不用担心手机找不到了! 方法:【设置】-【智能辅助】-【语音控制】-【语音唤醒】-【开启按钮】5.万能钱包 为了方便大家的出行,华为手机就特别人性化的为大家准备了一个钱包功能,只需要将你经常需要用到的卡直接进行添加就可直接使用,各类常用卡都是可以用的,如公交卡、门禁卡。 方法:打开手机桌面中自带的【钱包】软件,然后点击进去,刷卡、付款码、扫一扫、默认卡都可以进行操作,最后点击立即添加,选择添加类型即可。关于华为的手机实用技巧就分享到这里了,若你用的是华为手机,看你的手机是华为品牌,那就拿起你的手机去看看这些功能都有吗?

June 20, 2019 · 1 min · jiezi

CSS-Modules

CSS Modules为什么引入CSS Modules(1)全局样式冲突 webpack进行打包时,将所有js文件导入到入口App.js文件中,样式也会统一加载到入口中,根据css的layout规则,后面的样式会覆盖掉前面的样式声明,造成全局样式的覆盖问题。(2)嵌套层次过深的选择器 为了解决全局样式的冲突问题,不得不引入一些特地命名namespace来区分,但是往往有些namespace命名得不够清晰,就会造成要想下一个样式不会覆盖,就要再加一个新的命名空间来进行区分,最终可能一个元素的显示样式嵌套特别深。 嵌套特别深会造成的问题:- 根据CSS选择器的解析规则可以知道,层级越深,比较的次数也就越多,影响整个页面的渲染- 增加了不必要的字节开销- 语义混乱 可扩展性不好,约束越多,扩展性越差一些解决方案(1)css预处理器(less/sass) 支持模块引入 存在问题:不能解决全局样式冲突问题(2)BEM(Block Element Modifier)解决命名冲突以及更好的语义化 Block:逻辑和页面功能都独立的页面组件,是一个可复用单元,特点如下: 可以随意嵌套组合可以放在任意页面的任何位置,不影响功能和外观可复用,界面可以有任意多个相同Block的实例Element:Block的组成部分,依赖Block存在(出了Block就不能用)[可选]定义Block和Element的外观及行为,就像HTML属性一样,能让同一种Block看起来不一样 存在问题:对于嵌套过深的层次在命名上会给需要语义化体现的元素造成很大的困难 对于多人协作上,需要统一命名规范,这同样也会造成额外的effort CSS Modules(1)什么是css modules 通过构建工具来使指定class达到scope的过程 (2)css modules优势 解决全局命名冲突问题 css modules只关心组件本身 命名唯一模块化 可以使用composes

June 20, 2019 · 1 min · jiezi

APP与小程序的优劣分析

小程序出现并非新的面孔,在去年百度轻应用程序,它也是类似于外部APP形式,更多的是用各种移动浏览器的html应用,手机的浏览器制造商详实之普及,作为浏览器上的应用软件,市场运营需要一个浏览器,有多种功能,在vivo app中开发最广泛的就是html和CS s JavaScript,小程序外包APP有它的优点,由于缺乏后台操作能力,被孤立访问网页等问题一直到限制它的调用功能,对ui设计和使用体验产生了影响。从发展趋势来看,国内大型的互联网企业推出的开放源码的跨平台的开放项目,有效降低了应用开发和普及成本,为互联网创业者带来了新的机遇,例如外部chat开发者提供完整的设计手册,在外部设计和小程序可以使用sketch以及ps的控制库和开发者调用的资源库的同时,应用程序的开发框架风格传播,对,与开发者也有很多的限制,安全风险分析及企业的责任风险,同样需要引起关注,开发门槛现在大幅降低很多创业的公司和个人,由于APP普及的成本高 所以要转向于这些平台,当使用小程序之后,它的开发门槛将大幅度下降,由于APP在使用过程中存在风险问题,小程序一度受到青睐,在小程序商店搜集程序的qr码,分类为网页展示用户扫描进入主程序要从企业层面制定完善安全责任规定。

June 20, 2019 · 1 min · jiezi

IphoneX底部适配

1.判断是否是IPhoneX手机let isIphone = /iphone/gi.test(window.navigator.userAgent) let windowW = window.screen.width let windowH = window.screen.height let pixelRatio = window.devicePixelRatio let isIPhoneX = isIphone && pixelRatio && pixelRatio === 3 && windowW === 375 && windowH === 812 let isIPhoneXSMax = isIphone && pixelRatio && pixelRatio === 3 && windowW === 414 && windowH === 896 let isIPhoneXR = isIphone && pixelRatio && pixelRatio === 2 && windowW === 414 && windowH === 896 if (isIPhoneX || isIPhoneXSMax || isIPhoneXR) { // 底部增加fix-iphonex-bottm 样式 $(".contact-box").addClass('fix-iphonex-bottom') // 底部增加iphone-footer-bg样式 初始none,条件满足block $(".iphone-footer-bg").addClass('iphonexshow') }2.增加fix-iphonex-bottom样式.fix-iphonex-bottom { bottom: 34px !important;}如果想更改IPhoneX底部34像素的背景颜色怎么办呢?3.增加iphone-footer-bg样式.iphone-footer-bg { height: 34px; background: #6D6D6D; width: 100%; position: absolute; bottom: -33px; display: none;}.iphonexshow { display: block !important;}

June 20, 2019 · 1 min · jiezi

CSS-属性选择器的深入挖掘

CSS 属性选择器,可以通过已经存在的属性名或属性值匹配元素。 属性选择器是在 CSS2 中引入的并且在 CSS3 中得到了很好拓展。本文将会比较全面的介绍属性选择器,尽可能的去挖掘这个选择器在不同场景下的不同用法。 简单的语法介绍[attr]:该选择器选择包含 attr 属性的所有元素,不论 attr 的值为何。[attr=val]:该选择器仅选择 attr 属性被赋值为 val 的所有元素。[attr~=val]:该选择器仅选择具有 attr 属性的元素,而且要求 val 值是 attr 值包含的被空格分隔的取值列表里中的一个。子串值(Substring value)属性选择器,下面几个属于 CSS3 新增语法,也被称为“伪正则选择器”,因为它们提供类似 regular expression 的灵活匹配方式。 [attr|=val] : 选择attr属性的值是 val 或值以 val- 开头的元素(注意,这里的 “-” 不是一个错误,这是用来处理语言编码的)。[attr^=val] : 选择attr属性的值以 val 开头(包括 val)的元素。[attr$=val] : 选择attr属性的值以 val 结尾(包括 val)的元素。[attr*=val] : 选择attr属性的值中包含子字符串 val 的元素(一个子字符串就是一个字符串的一部分而已,例如,”cat“ 是 字符串 ”caterpillar“ 的子字符串CSS 属性选择器的最基本用法属性选择器最基本的用法,就是通过元素的属性值去选择 DOM 元素。像这样,将选中所有带 href 属性的DOM 元素: [href] { color: red;}CodePen Demo -- 属性选择器基本用法 ...

June 20, 2019 · 3 min · jiezi

Vue-Cannot-read-property-upgrade-of-undefined

最近启动vue-cli3.0项目报了个错误,如下原因是在vue.config.js 中使用了 process.env.target 而在.env中 target已被删除了

June 20, 2019 · 1 min · jiezi

一行css代码搞定响应式布局

原文地址: https://medium.com/free-code-...原文作者: Per Harald Borgen 翻译作者: hanxiansen 在这篇文章中,我将教你如何使用 CSS Grid 来创建一个超酷的图像网格图,它将根据屏幕的宽度来改变列的数量。最精彩的地方在于:所有的响应特性被添加到了一行 css 代码中。这意味着我们不必将 HTML 与丑陋的类名(如col-sm-4, col-md-8)混杂在一起,也不必为每个屏幕创建媒体查询。ok,让我们发车吧。 设置在本文中,我将继续使用我在第一篇 CSS Grid 布局教程文章中的网格布局。然后,我们将在文章末尾添加图片。下面是我们初始化网格的外观: HTML 代码: <div class="container"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div></div>CSS 代码: .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 50px 50px;}注意: 示例中有一些基础的样式,但我在这里没有写出来,因为这对 CSS 网格布局没有任何影响如果这段代码让你感到困惑,我建议你去好好读下我的这篇文章Learn CSS Grid in 5 minutes ,其中就详细的解释了布局的基础知识。 让我们让列开始具有自适应特性吧。 基础响应单位: fractionCSS 栅格布局带来了一个全新的值:fraction单位,fraction单位通常简写为fr,它允许你根据需要将容器拆分为多个块。 让我们将每一列更改为一个 fraction 单位宽: .container { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 50px 50px;}结果是栅格布局将会把整个宽度分成三个 fraction,每列占据一个 fraction 单位,效果如下: ...

June 19, 2019 · 1 min · jiezi

前端工作中所遇到的需要加空格的方式

一. " "键盘中的按键space键,在HTML、字符串中都会被压缩成一个 二. &nbsp;w3cschool描述为 HTML中的常用字符实体是不间断空格(&nbsp;).在HTML中直接按space敲出多个空格只会保留一个,&nbsp;用于与添加多个空格,也能用它的实体编号&#160;.(类似的还有半角空格&ensp;(英文空格)、全角空格&rdquo;(中文空格)、窄空格&thinsp;、零宽不连字&zwnj;、零宽连字&zwj;) 三. 在HTML中可以有一些样式来改变,比如padding,margin,white-space:pre 四. unicode(\u00A0,\u0020,\u3000)不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,半角空格(英文符号)\u0020,代码中常用的;全角空格(中文符号)\u3000,中文文章中使用; 五.\xa0 是不间断空白符 &nbsp; 我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表空白符nbsp(non-breaking space)。latin1 字符集向下兼容 ASCII ( 0x20~0x7e )

June 19, 2019 · 1 min · jiezi

flex布局的温故学习

flex的简介在flex的容器中默认存在两条轴,水平主轴main axis和垂直交叉轴cross axis,这是默认的设置,不过我们可以通过设置将主轴的方向变成垂直方向,交叉轴变成水平方向。 在一个被设置为flex的容器中,每个直接子元素都被称之为flex item,每个flex item占据着主轴空间是main size,占据交叉轴上的空间叫做corss size; 需要注意的是:主轴和交叉轴的方向是可以设置的,默认的是主轴为水平方向、交叉轴为垂直方向;当然RN的表现和浏览器相反,默认主轴是垂直方向 flex容器为了实践一个flex布局,我们首先需要一个容器,也就是父元素,并指定为flex布局,这样,容器就具备了上述的flex的特性,其直接子元素也将成为flex item;设置为flex容器也很简单: .root{ display: flex | inline-flex; // 两个值都可以使用}上述的两个值可以分别生成一个块级flex容器盒子、一个行内flex容器盒子,简单说来,如果你使用块元素如 div,你就可以使用 flex,而如果你使用行内元素,你可以使用 inline-flex。需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。 设置为flex的容器,有以下六种可以设置的属性: flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-content这里会对这几个属性进行分别的解释 flex-direction 设置flex容器的主轴方向flex-direction 决定主轴的方向(即项目的排列方向), .root{ display: flex | inline-flex; // 两个值都可以使用 flex-direction: row | row-reverse | column | column-reverse; // 四个值可选}row:主轴与行内轴方向作为默认的书写模式。即横向从左到右排列(左对齐)。row-reverse:对齐方式与row相反。[右对齐]column:主轴与块轴方向作为默认的书写模式。即纵向从上往下排列(顶对齐)。column-reverse:对齐方式与column相反。【底对齐】伪代码和伪展示分别对应如下的方式: <div class="root"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div><div>// flex-direction: row 水平靠左排列 第一个元素在左边【1,2,3 】// flex-direction: row-reverse 水平靠右排列 第一个元素在右边【 3,2,1】// flex-direction: column 垂直靠顶部排列 第一个元素在最顶部【 1, 2, 3, 】// flex-direction: column-reverse 垂直靠底部排列 第一个元素在最底部【 3, 2, 1, 】注意:该属性通过定义flex容器的主轴方向来决定felx子项在flex容器中的位置。这将决定flex需要如何进行排列,不仅是对齐方向,还有是子元素的排列顺序,第一个元素或者order靠前的将会出现在对齐方向的第一个位置处 ...

June 19, 2019 · 2 min · jiezi

翻译逐步替换Sass

本文来自心谭博客·「译文」逐步替换Sass,最新文章请见导航页,欢迎交流✿✿ヽ(°▽°)ノ✿翻译说明这是一篇介绍现代 css 核心特性的文章,并且借助 sass 进行横向对比,充分体现了 css 作为一门设计语言的快速发展以及新特性为我们开发者带来的强大生产力。 第一次尝试翻译技术文,为了让文章更通俗易懂,很多地方结合了文章本意和自己的说话风格。另外,时间有限水平有限,难免有些失误或者翻译不恰当的地方,欢迎指出讨论。 英文原文地址:https://cathydutton.co.uk/posts/why-i-stopped-using-sass/ 正文开始我每年都要重新搭建和设计我的网站,这是一个非常不错的方式去跟进 HTML/CSS 的最新进展、开发模式和网站生成器。在上个月,我发布了新版本:从 Jekyll 和 GithubPages 迁移到 Eleventy 和 Netlify。 一开始,我并没有移除代码中所有的 sass 代码。这本不是我计划中的事情,但随着我不断查看 sass 代码,我一直在思考:它们是否给网站带来了价值,还是仅仅增加了复杂度和依赖性(特指对:scss)?随着这年 css 的发展,曾经让我使用 sass 的原因似乎不那么重要了。 其中一个例子就是我已经移除了媒体查询。当我了解到 CSS 的一些新的特性,那些针对特定屏幕大小的代码(媒体查询)没有必要,因此被移除了。 Sass 解决了什么问题?大概 5、6 年前,我第一次了解到 sass 的时候,我是有些换衣的。随着我搭建越来越多的响应式 web 应用,我才意识到借助 sass 的  functions  和  mixins  可以大大提高代码复用。显而易见的是,随着设备、视图窗口和主题等场景的变化,使用(sass 的)变量让代码迁移的成本更低。 下面是我用 sass 做的事情: 布局变量Typography1) 布局布局一直是 css 中让人困惑的地方。而响应式布局正是我最初决定使用 Sass 去创建 css 布局的重要原因。 使用 sass我一直记得我第一次尝试用 css 创建一个响应式网格布局的时候,那要为每列创建一个对应的类名,然后再用语义化不强的类名(比如  col-span-1  和  col-span-4 )来标记它。 .col-span-3 { float: left; width: 24%; margin-left: 1%;}.col-span-4 { float: left; width: 32.3%; margin-left: 1%;}.col-span-5 { float: left; width: 40.6%; margin-left: 1%;}借助 sass 的  mixin  和变量,能够不再编写像上面那样的类名。并且能够通过改变  $gridColumns  变量,来创造更灵活的布局。 ...

June 19, 2019 · 2 min · jiezi

译-前端项目中常见的-CSS-问题

原文地址:Common CSS Issues For Front-End Projects原文作者:Ahmad Shadeed译者:Chor快速摘要:近年来,跨浏览器的渲染和交互已经愈加一致。不过,它仍然没有达到完全一致,有很多小问题会让你出错。除了这些问题之外,还有不同的屏幕尺寸、语言偏好和明显的人为错误等不确定因素,我们从中发现了许多会让开发者出错的小问题。 在浏览器中实现用户界面时,最好是尽可能地减小这些差异和问题,以便 UI 呈现出预测的样子。记住所有的这些差异是很困难的,所以我列举了一系列常见问题以及解决方案。当你在做一个新项目的时候,可以将其作为一份方便的参考指南。 我们开始吧。 1. 重置 button 和 input 元素的背景添加按钮时,重置它的背景,否则在跨浏览器时它的呈现会有所不同。下面的例子分别展示了 Chrome 和 Safari 中的同一个按钮,后者默认会有一个灰色背景。 (大图预览) 重置背景可以解决这个问题: button { appearance: none; background: transparent; /* 其它样式 */}https://codepen.io/shadeed/pe... 查看 Ahmad Shadeed(@shadeed)在 Codepen 上的代码 按钮和输入框。 2. Overflow: scroll 和 auto为了限制一个元素的高度并允许用户在其中滚动,添加 overflow: scroll-y。在 macOS 下的 Chrome 中,这看起来不错,但是在 Windows 下的 Chrome 中,滚动条始终存在(即使内容很短)。这是因为 scroll-y 会无视内容,一直显示滚动条。而 overflow: auto 只在需要的时候才会显示滚动条。 左边:macOS 下的 Chrome。右边:Windows 下的 Chrome (大图预览) ...

June 19, 2019 · 3 min · jiezi

基于Nodejs的大文件分片上传

基于Node.js的大文件分片上传我们在做文件上传的时候,如果文件过大,可能会导致请求超时的情况。所以,在遇到需要对大文件进行上传的时候,就需要对文件进行分片上传的操作。同时如果文件过大,在网络不佳的情况下,如何做到断点续传?也是需要记录当前上传文件,然后在下一次进行上传请求的时候去做判断。 先上代码:代码仓库地址 前端1. index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>文件上传</title> <script src="https://cdn.bootcss.com/axios/0.18.0/axios.min.js"></script> <script src="https://code.jquery.com/jquery-3.4.1.js"></script> <script src="./spark-md5.min.js"></script> <script> $(document).ready(() => { const chunkSize = 1 * 1024 * 1024; // 每个chunk的大小,设置为1兆 // 使用Blob.slice方法来对文件进行分割。 // 同时该方法在不同的浏览器使用方式不同。 const blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; const hashFile = (file) => { return new Promise((resolve, reject) => { const chunks = Math.ceil(file.size / chunkSize); let currentChunk = 0; const spark = new SparkMD5.ArrayBuffer(); const fileReader = new FileReader(); function loadNext() { const start = currentChunk * chunkSize; const end = start + chunkSize >= file.size ? file.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } fileReader.onload = e => { spark.append(e.target.result); // Append array buffer currentChunk += 1; if (currentChunk < chunks) { loadNext(); } else { console.log('finished loading'); const result = spark.end(); // 如果单纯的使用result 作为hash值的时候, 如果文件内容相同,而名称不同的时候 // 想保留两个文件无法保留。所以把文件名称加上。 const sparkMd5 = new SparkMD5(); sparkMd5.append(result); sparkMd5.append(file.name); const hexHash = sparkMd5.end(); resolve(hexHash); } }; fileReader.onerror = () => { console.warn('文件读取失败!'); }; loadNext(); }).catch(err => { console.log(err); }); } const submitBtn = $('#submitBtn'); submitBtn.on('click', async () => { const fileDom = $('#file')[0]; // 获取到的files为一个File对象数组,如果允许多选的时候,文件为多个 const files = fileDom.files; const file = files[0]; if (!file) { alert('没有获取文件'); return; } const blockCount = Math.ceil(file.size / chunkSize); // 分片总数 const axiosPromiseArray = []; // axiosPromise数组 const hash = await hashFile(file); //文件 hash // 获取文件hash之后,如果需要做断点续传,可以根据hash值去后台进行校验。 // 看看是否已经上传过该文件,并且是否已经传送完成以及已经上传的切片。 console.log(hash); for (let i = 0; i < blockCount; i++) { const start = i * chunkSize; const end = Math.min(file.size, start + chunkSize); // 构建表单 const form = new FormData(); form.append('file', blobSlice.call(file, start, end)); form.append('name', file.name); form.append('total', blockCount); form.append('index', i); form.append('size', file.size); form.append('hash', hash); // ajax提交 分片,此时 content-type 为 multipart/form-data const axiosOptions = { onUploadProgress: e => { // 处理上传的进度 console.log(blockCount, i, e, file); }, }; // 加入到 Promise 数组中 axiosPromiseArray.push(axios.post('/file/upload', form, axiosOptions)); } // 所有分片上传后,请求合并分片文件 await axios.all(axiosPromiseArray).then(() => { // 合并chunks const data = { size: file.size, name: file.name, total: blockCount, hash }; axios .post('/file/merge_chunks', data) .then(res => { console.log('上传成功'); console.log(res.data, file); alert('上传成功'); }) .catch(err => { console.log(err); }); }); }); }) window.onload = () => { } </script></head><body> <h1>大文件上传测试</h1> <section> <h3>自定义上传文件</h3> <input id="file" type="file" name="avatar"/> <div> <input id="submitBtn" type="button" value="提交"> </div> </section></body></html>2. 依赖的文件axios.jsjqueryspark-md5.js ...

June 19, 2019 · 4 min · jiezi

SEER主网网页钱包API节点列表更新-加入以获得更快的连接速度

SEER主网网页钱包API节点列表更新 加入以获得更快的连接速度 前段时间,因为网络原因,导致SEER主网网页钱包部分区域的API节点无法正常连接,当时就有小伙伴问了,为什么去中心化的区块链网络,还会被中心化的问题搞的无法访问呢? 在回答这个问题之前需要先向大家说明,API的问题目前已经解决了,爱好者们提供了大陆节点、新加坡节点、台湾节点和英国节点,可以满足各个区域SEER用户的访问需求,这些节点已加入列表中,连接时会自动选择。但由于浏览器缓存之类的原因,获取列表可能失败,大家可以手动添加节点: 大陆节点 wss://seernode.gedoumi.com 新加坡节点 wss://sg1.seerchain.org 台湾节点 wss://tw1.seerchain.org 英国节点 wss://uk2.seerchain.org 添加方式:菜单-设置-接入点-添加 API 服务器节点:ADDRESS中填入wss://sg1.seerchain.org 等API地址,然后确认。若处于连接错误页,则直接“添加 API 服务器节点”后点击RETRY重试。 回答之前那个问题,“为什么去中心化的区块链网络,还会被中心化的问题搞的无法访问呢? ”,作为一个多中心化架构的公有区块链平台,SEER由无数个全节点组成。其中根据分工,就有见证人节点、网关附属节点和API节点等,例如DAPP、网页钱包等应用,都是通过连接到API节点,向区块链广播交易,再由见证人签名,被全网确认,产生不可逆块。 虽然区块链网络是多中心化的,但节点的API服务本身却只是多中心化网络上的一个中心,如果出现问题,用户便不能通过这个API来使用区块链网络。 当然,用户还可以通过其它中心来和区块链进行交互,所以,前几天部分API节点出问题的时候,用户还可以通过英国节点使用网页钱包。 那么小伙伴们可能还是不放心,如果所有的API节点全挂了,那么用户怎么使用区块链网络呢。 如果有这样的极端情况,用户可以在自己的PC电脑上跑一个节点,用桌面钱包进行连接就可以了。 方法可以参考这篇文章:不依赖远程API启动命令行钱包和网页/桌面钱包的方法 https://docs.seerchain.org/#/...

June 18, 2019 · 1 min · jiezi

rgb转hsl

使用的公式: 使用的公式是如上三个比如: rgb(54, 163, 247) 首先我们需要把rgb中的数字转为[0,1]区间,各个值除以255,得值(0.21,0.64,0.97)计算h,将1中计算的值代入,max=247,min=54,r=0.21,g=0.64,b=0.97,计算得出h=206计算l,得出结果是0.59计算s,使用左边的公式计算较为简单,得出值为0.927最后计算得出hsl为hsl(206,92.7%,59.0%)

June 18, 2019 · 1 min · jiezi

页面渲染性能控制重绘与回流

浏览器解析代码过程页面的显示过程分为以下几个阶段: 生成DOM树(包括display:none的节点)在DOM树的基础上根据节点的集合属性(margin,padding,width,height等)生成render树(不包括display:none,head节点,但是包括visibility:hidden的节点)在render树的基础上继续渲染颜色背景色等样式reflow:当render树的一部分或者全部因为大小边距等问题发生改变而需要重建的过程,叫做回流repaint:当诸如颜色背景等不会引起页面布局变化,而只需要重新渲染的过程叫做重绘 通过上述定义,可以很明显看出,重绘的代价要比回流小。重绘只涉及样式的改变,不涉及到布局。重绘就好像给人染了一个头发,而回流相当于给人做了一次整形手术 什么会引起回流页面渲染初始化DOM结构变化,脸上整得亲妈都认不出来了,所以会引发回流render树变化,比如减少了padding,增加border等等,改变页面布局了窗口resize事件触发最复杂的一种:获取某些属性,引发回流 很多浏览器会对回流做优化,他会等到足够数量的变化发生,在做一次批处理回流。 但是除了render树的直接变化。 当获取一些属性时,浏览器为了获得正确的值也会触发回流。这样就使得浏览器的优化失效了 这些属性包括 offsetTop, offsetLeft, offsetWidth, offsetHeight scrollTop/Left/Width/Height, clientTop/Left/Width/Height, width,height 调用了getComputedStyle(), 或者 IE的 currentStyle这段儿代码是抄的,哈哈,大概解释一下样式改变引起的重绘和回流 var s = document.body.style;s.padding = "2px"; // 回流+重绘s.border = "1px solid red"; // 再一次 回流+重绘s.color = "blue"; // 再一次重绘s.backgroundColor = "#ccc"; // 再一次 重绘s.fontSize = "14px"; // 再一次 回流+重绘, 没想到吧,改变字体大小也会回流document.body.appendChild(document.createTextNode('abc!')); // 添加node,再一次 回流+重绘可以看出,回流一定伴随着重绘,而重绘却可以单独出现 回流对性能产生了一定的影响,尽管浏览器机智地帮我们进行了批处理,但是仍然存在着上述诸多阔怕的属性,一获取就回流。怎么解决? 减少回流避免逐项更改样式。最好一次性更改style属性,或者将样式列表定义为class并一次性更改class属性。避免循环操作DOM。创建一个documentFragment或div,在它上面应用所有DOM操作,最后再把它添加到window.document。避免多次读取offsetLeft等属性。无法避免则将它们缓存到变量。将复杂的元素绝对定位或固定定位,使它脱离文档流。否则回流代价十分高display:none和visibility:hidden会产生回流与重绘 display:none指的是元素完全不陈列出来,不占据空间,涉及到了DOM结构,故产生reflow与repaintvisibility:hidden指的是元素不可见但存在,保留空间,不影响结构,故只产生repaint

June 18, 2019 · 1 min · jiezi

浏览器是如何工作的How-browser-work

浏览器是如何工作的(How browser work)1. 介绍 1.1 本文涉及到的浏览器1.2 浏览器的主要功能1.3 浏览器的主要结构1.4 组件之前的通信2. 渲染引擎 2.1 渲染引擎2.2 主要的流程2.3 流程示例2.4 解析以及DOM树的结构2.5 渲染树(Render tree)的结构2.6 布局2.7 绘制(Painting)2.8 动态改变2.9 渲染引擎的线程2.10 css2 虚拟模型2.11 资源1. 介绍浏览器可谓是使用最广泛的软件. 这篇文章我将要解释浏览器在底层是如何工作的. 我们将会了解当你在浏览器地址栏里输入'google.com'直到页面呈现出来这一过程都发生了什么。 1.1 本文涉及到的浏览器目前市面上主要有5款浏览器: Internet Explorer, Firefox, Safari, Chrome 以及 Opera。我将使用开源的浏览器中进行举例,包含Firefox, Chrome 以及 部分开源的Fafari。根据W3C browser statistics, 当前时间是2009年10月,使用Firefox, Safari 以及 Chrome 的比例占据将近60%。所以目前开源浏览器占据的浏览器市场很大的份额。 1.2 浏览器的主要功能浏览器的主要功能是把你从服务器请求到的网络资源呈现在浏览器窗口上。资源通常包含了HTML,PDF, 图片等等。资源通常是由用户指定的URI(Unifor resource Identifier 统一资源定位符)来定位的。稍后的章节会介绍。 浏览器解释和呈现HTML文件的方式是通过HTML和CSS规范来实现的。 这些规范是由W3C组织进行维护的,该组织是互联网的标准制定者。长久以来各个浏览器厂商只实现了一部分规范,并且开发自己的扩展程序。这导致了在不同的浏览器当中很严重的兼容性问题。到目前为止,大部分的浏览器都大多实现了规范。不同的浏览器UI有很多相同的部分: 输入URI的地址栏前进和后退按钮书签操作操作当前加载文档的刷新和停止按钮返回主页的主页按钮但是比较奇怪的是, 浏览器的UI并没有一个通用的规范,它只是不同的浏览器厂商从长期的使用习惯中积累的经验。HTML5规范并没有规定浏览器的UI必须包含哪些元素,只是列出了一些通用的元素。地址栏、状态栏、工具栏以及各个浏览器指定的特定,例如Firefox的下载管理。更多参见用户界面章节。 1.3 浏览器的主要结构浏览器的主要组成部分: 用户界面(The user interface) - 包含地址栏、前进/后退按钮、书签等等。除了主要的窗口之外你所看到的就是请求的页面。浏览器引擎 - 查询和操作渲染引擎的入口。渲染引擎 - 负责呈现请求内容。例如请求内容是HTML, 渲染引擎负责解析HTML以及CSS,并且渲染解析后的内容到屏幕上。网络链接 - 处理形如HTTP的网络请求。它有针对不同平台的实现接口。用户界面的后台处理程序(UI Backend) - 用于绘制类似于 bombo 盒子的小部件以及一些窗口。它抛出了各个平台通用的接口。它的底层是使用了操作系统的用户界面方法。Javascript 解释器。 用于解析和执行Javascrip代码。数据存储。 这是一个持久层。浏览器需要在硬盘上保存各种各样的数据,比如coocies。HTNL5规范定义了'web database',针对浏览器的完整的数据库(尽管比较轻量) ...

June 17, 2019 · 5 min · jiezi

详细-offsetWidthHeightTopLeft-以及偏移基准-offsetParent

offsetWidth、Height、Top、Left 、offsetParent前者计算元素的大小, 后者两者返回元素相对 offsetParent 元素的偏移量. offsetWidth返回一个元素的布局宽度; 计算方式: content width(CSS设定的width) + padding + border + scrollBarWidth 如果存在垂直滚动条(scrollbar)offsetHeight返回一个元素的布局高度; 计算方式: content height(CSS设定的height) + padding + border + scrollbarHeight 如果存在水平滚动条(scrollbar) 大家看到 content + padding + border 是否很熟悉, 在盒子模型中提及, 在IE盒模型中,其盒子大小的计算方式也是一样. 下面我们来看看 offsetTop、offsetLeft 在了解它们两之前,先来了解下 offsetParent offsetParent可以理解为偏移的基准, 这有点类似定位属性中(absolute以最近的祖先元素容器且设置了定位属性的元素来进行位置偏移.) 什么样的元素为 offsetParent ? 拥有定位属性的元素dispaly 为 table 或 table cell默认情况下根元素依次从内往外找, 如果没有, 默认就是已根元素作为 offsetParent 也就是偏移的基准. 当元素设置属性 display: none, 则它相应的 offsetParent属性返回值为 null. 注意: 如果元素为隐藏的(该元素或其祖先元素的 style.display 为 "none"),或者该元素的 style.position 被设为 "fixed", 则该 offsetParent 属性返回 null。在 IE 9 中 display:none 无影响. ...

June 17, 2019 · 2 min · jiezi

自定义占位文本placeholder的样式

自定义占位文本(placeholder)的样式当我们对input元素或者textarea元素写CSS样式的时候, 如果需要自定义占位文本(也就是placeholder)的样式的时候怎么办?CSS有一个伪元素选择器::placeholder可以解决我们的问题.用法HTML <input placeholder="我是红色的!">CSS input::placeholder { color: red; font-size: 1.2em; font-style: italic;}结果 但要注意, 这个伪元素选择器是一个实验性的特性, 还需要一些时日待浏览器兼容.因此, 我们要添加一些前缀来使用它, 如下所示. input::-webkit-input-placeholder { color: #999;}/* IE10+ */input:-ms-input-placeholder { color: #999;}/* Firefox4-18 */input:-moz-placeholder { color: #999;}/* Firefox19+ */input::-moz-placeholder { color: #999;}input::placeholder { color: #999;}textarea::-webkit-input-placeholder { color: #999;}/* IE10+ */textarea:-ms-input-placeholder { color: #999;}/* Firefox4-18 */textarea:-moz-placeholder { color: #999;}/* Firefox19+ */textarea::-moz-placeholder { color: #999;}textarea::placeholder { color: #999;}参考链接:MDN - ::placeholderCan I Use - ::placeholder ...

June 17, 2019 · 1 min · jiezi

近阶段前端面试问题汇总css篇

经历了各种选择与被选择之后(其实就是被坑了),最终又离开了平静乃至颓废的划水岗位,重新跳入前端求职的大锅,继续翻腾。在此记录一下被提问的问题吧(论水平也就是初级前端,所以很多问题也是挺简单的)。 css篇:(一)如何实现未知宽高块级元素在父元素中上下左右居中:(普通问题就记录一下了)1.绝对定位: div{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;}2.table布局:父级元素: .parent{ display:table;}子级元素: .child{ display:table-cell;vertical-align:middle }3.flex布局:父级元素: .parent{display:flex;flex-direction:row;justify-content:center;align-items:center;}子级元素: .child{flex:1}(二)用css画一块三角形(这个问题有点刁钻,但是挺有趣,也算是对盒子模型和对border有了更深入的理解):问题到手的时候我是懵逼的,三角形?回家后然后就度了一下得到了最简单的答案(此答案到处都有,我也是自己又写了一个就不贴出处了) 首先贴上代码html: <body> <div class="sjx"></div></body>css: .sjx{ width: 0; height: 0; border-width:0 30px 30px; border-style:solid; border-color:transparent transparent green; }效果 !!!∑(゚゚ノ)ノ这是个啥???拿到了答案依旧是没有思路,好吧,那我们先来看看些代码都做了什么。 现在我们来看 width:0;height:0;由此可以看出其实三角形部分不是由content部分组成的,主要是由border部分组成。但是为什么要把content的宽高设置为0,我们先放一放。 来看border这几个属性: border-width:0 30px 30px;/*设置了上边框为0,左右下边框为30px*/border-style:solid;/*边框的风格是solid实线*/border-color:transparent transparent green;/*上左右边框的颜色设为透明,下边框设置为绿色*/看到这里依旧是有点摸不着头脑,先这样然后这样然后那样就可以这样了? 那就从头开始一点点分析吧,先看三个属性的官方解释:border-width 简写属性为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。border-color 属性是一个简写属性,可设置一个元素的所有边框中可见部分的颜色,或者为 4 个边分别设置不同的颜色。border-style 属性用于设置元素所有边框的样式,或者单独地为各边设置边框样式。 可以看出这三个属性其实都是分别设置其属性的简写,可以分别设置每个边框的属性。为了直观和调试的方便,我们把属性这么写: .sjx{ width: 0; height: 0; border-top-width: 0; border-right-width: 30px; border-bottom-width: 30px; border-left-width: 30px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: transparent; border-right-color: transparent; border-bottom-color: green; border-left-color: transparent; }其实对于作三角形这一目的,边框的风格并不重要,所以在这里不多做研究。主要来看边框宽度border-width和边框颜色border-color;这里我们分别尝试把border-right-width和border-left-width设置成0看一下效果: ...

June 17, 2019 · 1 min · jiezi

CSS盒模型以及与之相关的知识点

CSS盒模型以及与之相关的知识点盒模型分为哪几种- 标准盒模型- IE盒模型两者区别在于 width 和 height 计算方式上的不同: 标准盒模型 width = content width;IE核模型 width = content width + padding + borderCSS 如何来设置这两种模型 box-sizing: border-box box-sizing: content-box用实例来验证下: <div class="box"> </div> .box { width: 100px; height: 100px; padding: 10px; margin: 10px; border: 5px solid #ccc; background-color: #ccc; } 蓝色 - 区域表示为 content 部分紫色 - 区域表示为 padding 部分灰色 - 区域表示为 border 部分米色 - 区域表示为 margin 部分细心读者可以看到,从上图来看不设置 box-sizing 情况下, 默认值 content-box, 也就是表示为标准盒模型. ...

June 17, 2019 · 3 min · jiezi

练习1

一:页面性能优化:1,减少http请求,资源的合并与压缩,恰当的缓存,不滥用float,雪碧图代替图片,异步加载。减少dom节点,二: 数组的深浅拷贝1,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,。如果B没变,那就是深拷贝。2,基本数据类型有哪些,number,string,boolean,null,undefined五类。引用数据类型:对象,数组,函数。3,如何深拷贝?借用JSON对象的parse和stringify。借用JQ的extend方法。$.extend( [deep ], target, object1 [, objectN ] );let a=[0,1,[2,3],4], b=$.extend(true,[],a);a[0]=1;a2=1;console.log(a,b);4,使用场景?但多人开发情况下,你是没办法明确这堆数据是否有其它功能也需要使用, 直接修改可能会造成隐性问题,深拷贝能帮你更安全安心的去操作数据,根据实际情况来使用深拷贝, 三: 前后端分离的原理1,原始人时代:发布,需要用eclipse把代码打成一个war包,然后把这个war包发布到生产环境下的web容器里。这时候前后端代码都在这个war包里,html,js,css,各种第三方库等。这样服务器压力会很大,页面中的所有请求都要通过这个服务器,如果同时很多人访问这个网站速度就会很慢。一旦服务器出现状况,前后端一起玩完,用户体验级差。。2, 前后端分离的优势1,可以实现正真的前后端解耦,前端服务器放 css,js,图片等一系列资源,前端服务器负责控制页面引用,跳转,路由。前端页面异步调用后端的接口。加快整体响应速度。3,减少后端服务器的开发/负载压力。除了接口外的http请求全部转到 前端nginx上。前端大量的组件化代码 可以抽出来复用,组件化开发提升效率。前端与后端是两个项目。放在两个不同的服务器,需要独立部署。 四:同步和异步的区别1,javascript语言是一门“单线程”的语言,其实同步和异步,无论如何,做事情的时候都是只有一条流水线(单线程),同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。最基础的异步是setTimeout和setInterval函数, 五:异步promise1,自己身上有all、reject、resolve这几个眼熟的方法,原型上有then、catch等同样很眼熟的方法。2,一: 优点和缺点可以将异步操作以同步操作流程的方式表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。3,使用新建new一个promise,传入resove和reject两个参数分别代表成功失败的方法。 六:常用的ES61,let和const 只在声明指令的块级作用域内有效。 let所声明的变量可以改变,const声明常量,不能改变2,Object.assign()方法用于对象的合并const target = { a: 1 };const source1 = { b: 2 };const source2 = { c: 3 };Object.assign(target, source1, source2);target // {a:1, b:2, c:3}3,promise对象4,import 导入模块5,字符串拼接Es6的这种新的“字符串拼接”方法比较简单,没有繁琐的加号和引号,只需要在所需要的字符串“边界”加上``即可。 var name = 'Datura';var age = 18;var sex = 'nü';var hobby = '敲代码';var str1 = `我是${name},今年${age}岁,性别${sex}的了,爱好${hobby}`; //注意此处有两个“ `` ”var str2 = '我是'+name+',今年'+age+'岁,性别'+sex+',爱好'+hobby+''; //这个是原来的写法alert(st1r);6,map对象let map = new Map();map.set('a','apple');map.set('b','banana');console.log(map); // Map {"a" => "apple", "b" => "banana"}7,for in循环, for of循环(不能循环json数据)8,箭头函数 ...

June 17, 2019 · 1 min · jiezi

大三下学期实训录制的视频虽然感觉没什么用吧

第1天上午:第1天下午:第2天上午:第2天下午:第3天上午:第3天下午:第4天上午:第4天下午:第5天上午:第5天下午:

June 17, 2019 · 1 min · jiezi

flex布局被子元素撑开如何保持内容不超出容器

移动端里面,flex 布局很好用,它能够根据设备宽度来自动调整容器的宽度,但是最近在做项目的时候发现一个问题: 一个li里面设置了flex,flex: 0 0 33.333%,然后想让子元素里面的文字超出flex定义宽度后自动省略。 <li> <a href=""> <img src="https://img30.360buyimg.com/focus/s140x140_jfs/t13411/188/926813276/3945/a4f47292/5a1692eeN105a64b4.png" alt=""> <p>小米小米小米小米小米小米小米小米小米小米小米小米</p> </a></li>ul{ display: flex;}li{ -webkit-box-flex: 0; -ms-flex: 0 0 33.333%; flex: 0 0 33.333%; text-align: center; padding: 0 1.333vw; -webkit-box-sizing: border-box; box-sizing: border-box; margin-bottom: 2.667vw;}li p{ font-size: 3.2vw; color: #8F8E94; text-overflow: ellipsis; white-space: nowrap;}这时候会发现,p的文字可能会非常长,一些设备下需要隐藏显示,即不换行,并留下省略符…作标记。 这里会发现text-overflow: ellipsis不生效,省略符根本没有出现。而且因为设置了 nowrap 会发现文字会将 content 撑开,导致内容超出了屏幕。所以必须要解决这个问题。 尝试取消父元素.li的flex: 0 0 33.33%,无效。 尝试取消ul容器的display: flex,省略号出现。因此猜测是flex布局的问题,进一步猜测省略符需要对父元素限定宽度。 尝试对父元素li设置width: 100%无效,但是设置width: 0可行。即: li{ flex: 0 0 33.333%; width: 0}如果不设置宽度,li可以被子节点无限撑开;因此p总有足够的宽度在一行内显示所有文本,也就不能触发截断省略的效果。测试还有一种方法可以达到效果: li{ flex: 0 0 33.333%; overflow: hidden;}上面的二种方法都可以达到我们需要的效果,即给 li 设置了 flex 的值 的时候,它会动态的获得父容器的剩余宽度,且不会被自己的子元素把内容撑开。 ...

June 17, 2019 · 1 min · jiezi

mpvue微信小程序vedio视频全屏状态下不能遮挡textarea

mpvue微信小程序:vedio视频全屏状态下不能遮挡textarea 我们项目中有一个编辑资料页,使用了textarea和vedio,在使用IOS测试的时候发现视频全屏状态下textarea会穿透vedio显示在最前面。经过不断的摸索找到了解决方案。 因为textarea是原生组件,所以层级是最高的,其余组件设置z-index也是不起作用的。 <template> <textarea maxlength="200" placeholder="请输入个人简介" v-model="designData.introduction" v-show="isShowTextarea" /> <video id="myVideo" :src="视频路径" @fullscreenchange="screenChange" ></video></template><script> export default { data() { return { isShowTextarea: true } }, methods: { screenChange(e) { // 监听视频是否全屏 console.log(e) let fullScreen = e.target.fullScreen //值true为进入全屏,false为退出全屏 if (!fullScreen ) { //退出全屏 console.log('退出全屏') this.isShowTextarea = true } else { //进入全屏 console.log('进入全屏') this.isShowTextarea = false } }, } }</script>也可以使用富文本编辑器,但是需要引入一个文件,所以我选择了这种方式。 虽然这个不是一个完美的解决方案,但是简单的使用还是没有任何问题的。希望对大家有所帮助,有什么问题可以进行交流。

June 17, 2019 · 1 min · jiezi