关于css:CSS总结学习二

1. 盒子模型(Box Model)所谓盒子模型: 就是把HTML页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。盒子模型有元素的内容、边框(border)、内边距(padding)、和外边距(margin)组成。盒子外面的文字和图片等元素是 内容区域盒子的厚度 咱们成为 盒子的边框盒子内容与边框的间隔是内边距(相似单元格的 cellpadding)盒子与盒子之间的间隔是外边距(相似单元格的 cellspacing)规范盒子模型 2. 盒子边框(border) 语法:border : border-width || border-style || border-color 属性作用border-width定义边框粗细,单位是pxborder-style边框的款式border-color边框色彩边框的款式: none:没有边框即疏忽所有边框的宽度(默认值)solid:边框为单实线(最为罕用的)dashed:边框为虚线dotted:边框为点线2.1 边框综合设置border : border-width || border-style || border-color 例如: border: 1px solid red; 没有程序 2.2 盒子边框写法总结表很多状况下,咱们不须要指定4个边框,咱们是能够独自给4个边框别离指定的。 上边框下边框左边框左边框border-top-style:款式;border-bottom-style:款式;border-left-style:款式;border-right-style:款式;border-top-width:宽度;border- bottom-width:宽度;border-left-width:宽度;border-right-width:宽度;border-top-color:色彩;border- bottom-color:色彩;border-left-color:色彩;border-right-color:色彩;border-top:宽度 款式 色彩;border-bottom:宽度 款式 色彩;border-left:宽度 款式 色彩;border-right:宽度 款式 色彩;2.3 表格的细线边框 通过表格的cellspacing="0",将单元格与单元格之间的间隔设置为0,然而两个单元格之间的边框会呈现重叠,从而使边框变粗通过css属性: table{ border-collapse:collapse; } collapse 单词是合并的意思border-collapse:collapse; 示意相邻边框合并在一起。<style> table { width: 500px; height: 300px; border: 1px solid red; } td { border: 1px solid red; text-align: center; } table, td { border-collapse: collapse; /*合并相邻边框*/ }</style> ...

April 29, 2021 · 5 min · jiezi

关于css:CSS总结学习一

1. 引入CSS样式表要书写css款式,那css款式书写的地位在哪呢?1.1 行内式(内联款式)概念: 称行内款式、行间款式. 是通过标签的style属性来设置元素的款式 其根本语法格局如下:<标签名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;"> 内容 </标签名>实际上任何HTML标签都领有style属性,用来设置行内式。 案例:<div style="color: red; font-size: 12px;">青春不常在,放松谈恋爱</div>留神: style其实就是标签的属性款式属性和值两头是:多组属性值之间用;隔开。只能管制以后的标签和以及嵌套在其中的字标签,造成代码冗余毛病: 没有实现款式和构造相拆散1.2 外部样式表(内嵌样式表)概念: 称内嵌式 是将CSS代码集中写在HTML文档的head头部标签中,并且用style标签定义 其根本语法格局如下:<head><style type="text/CSS"> 选择器(抉择的标签) { 属性1: 属性值1; 属性2: 属性值2; 属性3: 属性值3; }</style></head><style> div { color: red; font-size: 12px; }</style>留神: style标签个别位于head标签中,当然实践上他能够放在HTML文档的任何中央。type="text/css" 在html5中能够省略。只能管制以后的页面毛病: 没有彻底拆散 1.3 内部样式表(外链式)概念: 称链入式 是将所有的款式放在一个或多个以.CSS为扩展名的内部样式表文件中, 通过link标签将内部样式表文件链接到HTML文档中 其根本语法格局如下:<head> <link rel="stylesheet" type="text/css" href="css文件门路"></head>留神: link 是个单标签link标签须要放在head头部标签中,并且指定link标签的三个属性属性作用rel定义以后文档与被链接文档之间的关系,在这里须要指定为“stylesheet”,示意被链接的文档是一个样式表文件。type定义所链接文档的类型,在这里须要指定为“text/CSS”,示意链接的内部文件为CSS样式表。咱们都能够省略href定义所链接内部样式表文件的URL,能够是相对路径,也能够是绝对路径。1.4 三种样式表总结(地位)样式表长处毛病应用状况管制范畴行内样式表书写不便,权重高没有实现款式和构造相拆散较少管制一个标签(少)外部样式表局部构造和款式相拆散没有彻底拆散较多管制一个页面(中)内部样式表齐全实现构造和款式相拆散须要引入最多,强烈推荐管制整个站点(多)2. CSS根底选择器2.1 标签选择器概念: 标签选择器(元素选择器)是指用HTML标签名称作为选择器,按标签名称分类,为页面中某一类标签指定对立的CSS款式。 语法:标签名{属性1:属性值1; 属性2:属性值2; 属性3:属性值3; } 作用: 标签选择器 能够把某一类标签全副抉择进去 比方所有的div标签 和 所有的 span标签 ...

April 28, 2021 · 4 min · jiezi

关于css:CSS实现聊天布局

<template><!-- 内部容器 --> <div class="chatContainer"> <!-- 聊天窗口 --> <div class="chat"> <!-- 左侧导航 --> <div class="nav"> <div class="btn"> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> <div class="menu"> <div class="menu-top"> <ul> <li class="avatar"><img src="https://pic.cnblogs.com/avatar/2354315/20210416231335.png" alt=""></li> <li @click="nohave"><span class="iconfont icon-chat">&#xe622;</span></li> <li @click="nohave"><span class="iconfont icon-renqun">&#xe718;</span></li> <li @click="nohave"><span class="iconfont icon-wenjian">&#xe621;</span></li> </ul> </div> <div @click="nohave" class="menu-bot"> <span class="iconfont icon-caidan">&#xe61f;</span> </div> </div> </div> <!-- 对话列表模块 --> <div class="chatlist"> <!-- 搜寻框 --> <div contenteditable="true" class="search"> <span class="iconfont icon-search">&#xe624;</span> </div> <!-- 对话列表 --> <div class="list-con"> <ul> <li v-for="(item,index) in [1,2,3,4,5,6,7,8,9]" :key="index"> <!-- 对话 --> <div class="list-item"> <!-- 对话者的头像 --> <div class="list-avatar"> <img src="https://pic.cnblogs.com/avatar/2354315/20210416231335.png" alt=""> </div> <!-- 对话者的信息 --> <div class="list-info"> <h3 class="list-nickname">hmy66</h3> <div class="list-brief">吃饭了么吗吃饭了吗</div> </div> </div> </li> </ul> </div> </div> <!-- 聊天内容 --> <div class="Content"> <div class="Content_top"> <p class="nickname">hmy666</p> <span @click="nohave" class="iconfont">&#xe626;</span> </div> <div class="chatContent"> <div class="chatItem" v-for="(item,index) in chatContent" :key="index" :class="item.fromUser=='me' ? 'reverse' : ''"> <div class="avatar"> <!-- 头像 --> <img style="width:100%;" :src="item.avatar" alt=""> </div> <div class="chatItemContent"> {{item.contentWord}} </div> </div> </div> <div class="input"> <div class="input-icon"> <span @click="nohave" class="iconfont icon-biaoqin">&#xe7df;</span> <span @click="nohave" class="iconfont icon-shipin">&#xe638;</span> <span @click="nohave" class="iconfont icon-wenjian">&#xe66f;</span> </div> <div class="send">Send</div> <textarea placeholder="input your words" name="chatTextarea" id="chatTextarea" > </textarea> </div> </div> </div> </div></template><script> export default { name:'chat', data() { return { chatContent: [ { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'吃饭了么?' }, { fromUser:'nome', from_nickname:'大可恶', avatar:'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1275343176,638979170&fm=26&gp=0.jpg', contentWord:'没有啊!' }, { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'那要去哪里吃啊?' }, { fromUser:'nome', from_nickname:'大可恶', avatar:'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1275343176,638979170&fm=26&gp=0.jpg', contentWord:'吃屎啊!' }, { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'666666666666666666666666666666666666666666666!' }, { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'失常文字的换行(亚洲文字和非亚洲文字)元素领有默认的white-space:normal,当定义的宽度之后主动换行' }, { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'abababababababababababababababababababababaab' }, { fromUser:'me', from_nickname:'小仙女', avatar:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.zhimg.com%2F50%2Fv2-6f1c492cbdfe3c24aae44e935a796d5a_hd.jpg&refer=http%3A%2F%2Fpic3.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1622200020&t=a8f31f8ed10a7d1e6bddbf8402f71590', contentWord:'ab ab ab ab ababa bababab abababa babababa babababaab' }, ] } }, methods: { nohave(){ innerWidth > 768 ? this.$message({ message: "功 能 未 开 放 !", duration: 1500, type: 'warning' }) : this.$toast.show("功 能 未 开 放 !", 1500); } }, }</script><style lang="less" scoped>*{ margin: 0; padding: 0; box-sizing: border-box; list-style: none;}ul{ margin-block-start: 0em; margin-block-end: 0em; margin-inline-start: 0px; margin-inline-end: 0px; padding-inline-start: 0px;}// 容器.chatContainer{ width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background: url("https://ncdn.camarts.cn/c9ed9ea1.jpg") center; background-size: cover;}// 聊天窗口// 左侧导航.chat{ width: 95%; height: 90%; border-radius: 10px; background-color: rgba(255, 255, 255, 0.1); box-shadow: 0 25px 45px rgba(0, 0, 0, 0.1); backdrop-filter: blur(4px); display: grid; grid-template-columns: 70px 1fr 2fr; justify-content: center; align-items: center; overflow: hidden; .nav{ width: 70px; height: 100%; background-color: rgba(0, 0, 0, 0.7); display: grid; grid-template-rows: 30px 1fr; .btn{ width: 100%; height: 30px; display: grid; grid-template-columns: repeat(3,1fr); align-items: center; padding: 0 4px; .item{ width: 12px; height: 12px; border-radius: 50%; margin: auto; } .item:nth-child(1){ background-color: #eb5a56; } .item:nth-child(2){ background-color: #f8bc33; } .item:nth-child(3){ background-color: #62cb44; } } .menu{ display: grid; grid-template-rows: 1fr 50px; justify-content: center; .menu-top{ width: 100%; display: flex; .avatar img{ width: 1rem; border-radius: 5%; } ul li{ padding: 10px 0 20px; text-align: center; } ul li .iconfont{ font-size: 0.8rem; color: rgba(255, 255, 255, 0.9); } } } } .chatlist::-webkit-scrollbar { /*滚动条整体款式*/ width : 10px; /*高宽别离对应横竖滚动条的尺寸*/ height: 1px; } .chatlist::-webkit-scrollbar-thumb { /*滚动条外面小方块*/ border-radius : 10px; background-color: skyblue; background-image: -webkit-linear-gradient( 45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent ); } .chatlist::-webkit-scrollbar-track { /*滚动条外面轨道*/ box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); background : #ededed; border-radius: 10px; } .chatlist{ position: relative; overflow-y: scroll; overflow-x: hidden; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.5); display: grid; grid-template-rows: 70px 1fr; justify-content: center; align-items: center; .search{ position: relative; overflow: hidden; width: 6rem; height: 1rem; border-radius: 5px; background-color: rgba(255, 255, 255, 0.7); display: flex; align-items: center; // justify-content: flex-end; font-size: 0.5rem; padding-right: 14px; .icon-search{ font-size: 0.5rem; position: absolute; right: 3%; } } .list-con{ user-select: none; width: 100%; height:100%; .list-item{ border-top: 1px solid rgba(0, 0, 0, 0.1); position: relative; cursor: pointer; width: 100%; height: 1.2rem; display: grid; grid-template-columns: 1.2rem 1fr; align-items: center; justify-content: center; box-sizing: content-box; padding-bottom: 10px; padding-top: 10px; .list-avatar{ width: 1.2rem; height: 1.2rem; img{ width: 100%; border-radius: 4px; } } .list-info{ // overflow: hidden; } .list-info .list-nickname{ font-size: 14px; font-weight: 600; padding-left:10px; line-height: 1.8; } .list-info .list-brief{ font-size: 14px; font-weight: 400; padding-left: 10px; width: 80%; overflow: hidden; text-overflow:ellipsis; white-space: nowrap; } } .list-item:hover{ background-color: rgba(0, 0, 0, 0.1); } } } .Content{ position: relative; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.2); display: grid; grid-template-rows: 70px 1fr 160px; align-items: center; .Content_top{ color: #303030; display: flex; justify-content: space-between; padding-left: 20px; padding-right: 20px; border-bottom: solid 1px rgba(255, 255, 255, 0.1); .nickname{ line-height:2rem; } span{ line-height: 2rem; } } .chatContent::-webkit-scrollbar{ width: 0px; } .chatContent{ position: absolute; top: 2rem; width: 100%; height: calc(100% - 6rem); overflow-x: hidden; overflow-y: scroll; .reverse{ flex-direction: row-reverse; .chatItemContent{ margin-right: 8px; border-bottom-left-radius: 5px ; border-bottom-right-radius: 5px ; border-top-left-radius: 5px ; border-top-right-radius: 0px ; } .chatItemContent::after{ content: ''; position: absolute; top: 10%; right: -5px; height: 0px; width: 0px; border-left:5px solid rgba(0, 0, 0, 0.5); border-top:5px solid transparent ; border-bottom:5px solid transparent; } .chatItemContent::before{ display: none; } } .chatItem{ margin: 10px; display: flex; .avatar{ width: 1.1rem; height: 1.1rem; border-radius: 50%; overflow: hidden; } .chatItemContent{ font-size: 0.6rem; padding: 5px; border-bottom-left-radius: 5px ; border-bottom-right-radius: 5px ; border-top-right-radius: 5px ; max-width: 50%; overflow-wrap: break-word; position: relative; margin-left: 8px ; color: #ffffff; background-color: rgba(0, 0, 0, 0.5); } .chatItemContent::before{ content: ''; position: absolute; top: 10%; left: -5px; height: 0px; width: 0px; border-right:5px solid rgba(0, 0, 0, 0.5); border-top:5px solid transparent ; border-bottom:5px solid transparent; } } } .input{ position: absolute; bottom: 0%; background-color: #ffffff; width: 100%; height: 4rem; font-size: 0.6rem; .send{ cursor: pointer; border-radius: 5px; bottom: 5%; z-index: 2; right: 3%; box-sizing: content-box; color: #ffffff; background-color: skyblue; font-size: 0.5rem; padding: 3px 6px; line-height: 0.5rem; text-align: center; position: absolute; } .send:hover{ background-color: rgb(63, 163, 230); } .input-icon{ margin-left: 10px; color: #666666; .iconfont{ margin-right: 8px; font-size: 0.8rem; } } #chatTextarea::-webkit-scrollbar { /*滚动条整体款式*/ width : 10px; /*高宽别离对应横竖滚动条的尺寸*/ height: 1px; } #chatTextarea::-webkit-scrollbar-thumb { /*滚动条外面小方块*/ border-radius : 10px; background-color: skyblue; background-image: -webkit-linear-gradient( 45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent ); } #chatTextarea::-webkit-scrollbar-track { /*滚动条外面轨道*/ box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); background : #ededed; border-radius: 10px; } #chatTextarea{ position: relative; border: 0px; overflow-y: scroll; resize: none; width: 100%; height: 3rem; outline:none; padding-top: 8px; padding-left: 10px; } } }}</style> ...

April 28, 2021 · 5 min · jiezi

关于css:滚动条样式

1.蓝色主题 .test-5::-webkit-scrollbar { /*滚动条整体款式*/ width : 10px; /*高宽别离对应横竖滚动条的尺寸*/ height: 1px; } .test-5::-webkit-scrollbar-thumb { /*滚动条外面小方块*/ border-radius : 10px; background-color: skyblue; background-image: -webkit-linear-gradient( 45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent ); } .test-5::-webkit-scrollbar-track { /*滚动条外面轨道*/ box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); background : #ededed; border-radius: 10px; }

April 28, 2021 · 1 min · jiezi

关于css:CSS基础三

11、界面款式常见的界面款式: 更改用户的鼠标款式表单轮廓避免表单域的拖拽解决图片或表单问题溢出操作11.1 鼠标款式 cursorli { /* 小手款式 */ cursor: pointer;}设置在对象上挪动时的鼠标款式: default:小白(默认)pointer:小手`move::挪动text:文本not-allowed:禁止11.2 轮廓线 outline给表单增加 outline:0 或 outline:onne 款式后,就能够去掉默认的蓝色边框 input 文本框就会这个默认的蓝色边框款式,可用 outline:0 去除掉 input { outline: 0;}11.3 避免拖拽文本域 resize文本域 textarea 默认是能够拖拽的,然而理论开发中,是不容许的,可增加 resize: none; textarea { resize:none; }11.4 vertical-align 属性利用1、设置图片或表单域文字垂直对齐vertical-align 翻译过去就是垂直对齐,常常用于设置图片表单(行内块元素)与文字垂直对齐 vertical-align: baseline | top | middle | bottombaseline:元素搁置在父元素的基线上,默认top:把元素的顶端与行中最高元素的顶端对齐middle:把次元素搁置在父元素的中部bottom:把元素的底端与最低元素的底端对齐<style> img { /* 两头对齐 */ vertical-align: middle; }</style><body> <img src="..." alt=""> 我失去过</body>2、解决图片底部默认空白间隙问题Bug:图片底部会有一个空白间隙,起因是行内块元素会和文字的底部基线对齐 解决办法: 给图片img增加:vertical-align: top | middle | bottom(提倡应用)把图片转换为块级元素 display: block;11.5 溢出文字处理1、单行文本溢出强制在一行内显示:white-space: nowrap; (默认是normal,主动换行)超出的局部暗藏:overflow: hidden;用省略号代替超出的局部:text-overflow: ellipsis;2、多行文本溢出1. 超出的局部暗藏:overflow: hidden;2. 用省略号代替超出的局部:text-overflow: ellipsis;3. 弹性伸缩盒子模型显示:display: -webkit-box;4. 限度在一个块级元素显示的文本行数: -webkit-line-clamp: 25. 设置或检索伸缩盒子的对象的子元素的排序形式: -webkit-box-orient: vertical多行文本溢出显示省略号,有较大的兼容性问题,适宜 webKit 浏览器或挪动端更举荐让后盾人员来做这个12、精灵图在网页中,往往都会有一些图片来作为润饰,然而有些网站图片过多时(如 电商网页),服务器会频繁地接管和发送图片,造成服务器压力过大,升高页面的加载速度 ...

April 27, 2021 · 1 min · jiezi

关于css:CSS基础一

1、CSS 是什么即层叠样式表,HTML负责构造,而CSS则丑化HTML,增加各种款式如:宽高距离、大小色彩、动画及其他装璜成果 2、引入形式引入形式共有三种: 行内款式:写在标签元素外面,以 style="" 模式,优先级最高(不举荐,显得太过于简单)内联款式:写在 <style></style> 这对标签中,款式少的话间接写在这里外联款式:写在.css文件中,而后用 <link src=""> 引入款式(举荐,不过还有@import)link 与 @import 移入办法的区别: 1、加载子资源的限度 link是XHTML的标签,解决加载CSS文件外,还能够加载RSS等其余事物,如加载模板而 @import 只能加载css文件2、加载形式 link 引入css文件,在页面载入时同时加载,即同步加载@import 援用css文件,须要等到页面齐全载入后,再加载css文件,即异步加载3、兼容性 link 是XTHML 的标签,没有兼容问题@import 是在css2.1 中提出来的,不反对低版本的浏览器4、扭转款式 link标签是DOM元素,反对应用JS管制DOM和批改款式@import 是办法,不反对管制DOM和批改款式3、CSS选择器CSS选择器分为简略选择器和复合选择器 简略选择器简略选择器个别蕴含: 标签选择器、类选择器、id选择器、通配符选择器 标签选择器:就是以 div、span、p等标签作为选择器类选择器:.colorRed {},为标签增加该类就能够增加该款式id选择器:#colorRed {} ,领有该id款式的那个标签就领有该款式(惟一)通配符选择器:* {},作用范畴是整个页面,个别用作CSS初始化留神: 类选择器能够用在不同的标签上;类名就像人的名字,能够多人应用同一个名字,所以类选择器能够用在多个标签id选择器个别用在唯一性的标签;id 就像人的身份证号,每一个人都有一个惟一的身份证号,所以每一个标签的id也是惟一的,所以一个id选择器只用在一个标签所以,类选择器和id选择器最大的区别是应用次数 复合选择器复合选择器是建设在简略选择器的根底之上的,它是由两个或两个以上的选择器组合而成的 1、后辈选择器ul li { ... }两个元素以空格隔开,意思是ul标签中的所有li标签第二个能够是儿子元素,也能够是孙子元素,只有是在ul中的就行能够层层嵌套,多个简略选择器2、子选择器div > p { ... }抉择离div最近的一级子元素p,孙子元素p 甚至更远的都不选中留神:p 必须是亲儿子3、并集选择器p, a { ... }所谓并集就是两个并列的,即p 和 a 都增加该款式两个标签之间用逗号(,)隔开,能够了解为 和4、伪类选择器伪类选择器就是向某个选择器增加非凡的成果,其格局就是选择器前面加上冒号(:) 链接伪类选择器 a:link { ... } /* 抉择所有未被拜访的链接 */a:visited { ... } /* 抉择所有已被拜访的链接 */a:hover { ... } /* 抉择鼠标指针位于其上的链接 */a:active { ... } /* 抉择流动链接(鼠标按下未弹起的链接) */focus 伪类选择器 ...

April 27, 2021 · 2 min · jiezi

关于css:纯CSS实现动画手风琴

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><style> .collapse-toggle{ display: none; } .content{ max-height: 0px; overflow: hidden; transition: all .3s; } .collapse-toggle:checked~.content{ max-height: 250px; } .collapse-toggle:checked ~label .show{ display: none } .collapse-toggle:not(:checked) ~label .not-show{ display: none } .collapse-item{ margin: 10px; border-radius: 10px }</style><body> <div class="collapse-item"> <input type="checkbox" id="collapse1" checked name="collapse" class="collapse-toggle"></input> <label style="display: flex;" for="collapse1"> <div>第一个collapse</div> <img class="not-show" style="width: 20px;height: 20px;" src="http://csdnimg.cn/cdn/content-toolbar/csdn-sou.png?v=1587021042"> <img class="show" style="width: 20px;height: 20px;" src="https://img-blog.csdnimg.cn/2019091813595558.png"> </label> <div class="content"> 这个是切换内容<br/> 这个是切换内容<br/> 这个是切换内容<br/> </div> </div></body></html>

April 27, 2021 · 1 min · jiezi

关于css:css3线性渐变

css3线性突变定义与用法linear-gradient() 函数用于创立一个线性突变的 "图像"。 为了创立一个线性突变,你须要设置一个起始点和一个方向(指定为一个角度)的突变成果。你还要定义终止色。终止色就是你想让Gecko去平滑的过渡,并且你必须指定至多两种,当然也会能够指定更多的色彩去创立更简单的突变成果。 语法linear-gradient([ <angle> | to <side-or-corner> ,]? <color-stop-list> ) <angle> 用角度值指定突变的方向(或角度)。角度顺时针减少。 0度示意突变方向从下向上,90度示意突变从左向右。其角度依照顺时针方向减少。单位为deg。 <side-or-corner>通过关键字定义突变的方向。具备两个关键字,一个示意程度地位( left或right),一个示意垂直地位( top或bottom)。关键字的先后顺序无影响,井且都是可选的。 <linear-color-stop> 由一个<color>值组成,并且跟随着一个可选的起点地位(能够是一个百分比值或者是沿着突变轴的<lenght>)。CSS突变的色彩渲染采取了与SVG雷同的规定。 <color-hint> 色彩直达点是一个插值提醒,它定义了在相邻色彩之间突变如何进行。长度定义了在两种色彩之间的哪个点进行突变色彩应该达到色彩过渡的中点。如果省略,色彩转换的中点是两个色彩进行之间的中点。 实例根底线性突变要创立最根本的突变类型,您只需指定两种色彩即可。 这些被称为色标。 至多指定两个色标,也能够指定任意数量。 .container>div:nth-child(1){ background: linear-gradient(red , yellow); }成果 突变提醒默认状况下,突变会平滑地从一种色彩过渡到另一种色彩。你能够通过设置一个值来将突变的中心点挪动到指定地位。 在如下示例中, 咱们将突变的中心点由50%设为10%。 .container>div:nth-child(2){ background: linear-gradient( red , 10%,yellow); }成果 扭转突变方向默认状况下,线性突变的方向是从上到下, 你能够指定一个值来扭转突变的方向。 .container>div:nth-child(4){ /* * background: linear-gradient(side-or-corner, color-stop1, color-stop2, ...); * side-or-corner -通过关键字形式定义线性突变的基准线的方向 *color-stop 一示意线性突变的色彩以及地位 */ background: linear-gradient(to right, red, yellow); }成果 设置突变角度如果你想要更准确地管制突变的方向,你能够给突变设置一个具体的角度。 .container>div:nth-child(4){ /* * background: linear-gradient(angle, color-stop1, color-stop2, ...); * angle -示意线性渐殳的基准线的角度 单位为deg *color-stop 一示意线性突变的色彩以及地位 */ background: linear-gradient(0deg, red , yellow); }成果 ...

April 27, 2021 · 1 min · jiezi

关于css:文字过长显示省略号css控制

给元素退出以下款式:white-space:nowrap; overflow:hidden; text-overflow:ellipsis;此外,还要留神给元素加上宽度:width:100px;这样,元素中的文字在超过100px时,就会主动显示省略号

April 26, 2021 · 1 min · jiezi

关于css3:好看的loading

1.大小不一的小圆形加载 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <div style="width:100%;height:100vh;display: flex;justify-content: center;background-color: rgb(195, 191, 191);"> <div class="d1"> <p></p> <p></p> <p></p> <p></p> </div> <div class="d1"> <p></p> <p></p> <p></p> <p></p> </div> </div></body><style> *{ margin: 0; padding: 0; } .d1{ width: 50px; height: 50px; position: absolute; margin: 100px; } .d1 p{ width: 14px; height: 14px; border-radius: 50%; background: rgba(31, 165, 242, 1); position: absolute; animation: dong 1.5s linear infinite; } .d1 p:nth-child(1){ top: 0; left: 0; } .d1 p:nth-child(2){ top: 0; right: 0; } .d1 p:nth-child(3){ right: 0; bottom: 0; } .d1 p:nth-child(4){ bottom: 0; left: 0; } .d1:nth-of-type(2){ transform: rotate(45deg); } @keyframes dong{ 0%{ transform: scale(0); } 50%{ transform: scale(1); } 100%{ transform: scale(0); } } .d1:nth-of-type(1) p:nth-of-type(1){ /*负值:动画间接开始,但跳过前...秒动画*/ animation-delay: -0.1s; } .d1:nth-of-type(2) p:nth-of-type(1){ animation-delay: -0.3s; } .d1:nth-of-type(1) p:nth-of-type(2){ animation-delay: -0.5s; } .d1:nth-of-type(2) p:nth-of-type(2){ animation-delay: -0.7s; } .d1:nth-of-type(1) p:nth-of-type(3){ animation-delay: -0.9s; } .d1:nth-of-type(2) p:nth-of-type(3){ animation-delay: -1.1s; } .d1:nth-of-type(1) p:nth-of-type(4){ animation-delay: -1.3s; } .d1:nth-of-type(2) p:nth-of-type(4){ animation-delay: -1.5s; }</style></html>成果: ...

April 25, 2021 · 3 min · jiezi

关于前端:极光字体

代码来自头条号"前端小智", 侵权删 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } body{ min-height: 100vh; background: radial-gradient(#111, #000); display: flex; justify-content: center; align-items: center; } h2{ position: relative; color: transparent; text-transform: uppercase; font-size: 10em; background: linear-gradient(to bottom, #222 0%, #222 50%, #111 50%, #111 100%); -webkit-background-clip: text;/*指定绘图区的背景:*/ } h2::before{ /*伪元素的内容设为字体内容 背景设为黑白 层级再低一层*/ content: attr(data-text); position: absolute; top: 4px; left: 4px; z-index: -1; background: linear-gradient(45deg, #ff0, #0f0, #f00, #00f, #0f0); -webkit-background-clip: text; color: transparent; } h2::after{ /*做含糊成果*/ content: attr(data-text); position: absolute; top: 30px; left: 20px; z-index: -2; background: linear-gradient(45deg, #ff0, #0f0, #f00, #00f, #0f0); -webkit-background-clip: text; color: transparent; filter: blur(20px); } </style></head><body> <h2 data-text="glowing">glowing</h2></body></html>

April 24, 2021 · 1 min · jiezi

关于前端:火箭上天效果

代码来自头条号"前端小智",侵权删 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><style> *{ margin: 0; padding: 0; box-sizing: border-box; } body{ min-height: 100vh; display: flex; justify-content: center; align-items: center; background-color: #ffeb3b; overflow: hidden; } .pulse{ position: relative; width: 200px; height: 200px; background-color: red; border-radius: 50%; } span{ display: inline-block; width: 200px; height: 200px; border-radius: 50%; background-color: red; position: absolute; left: 0; top: 0; animation: bg 1.5s linear infinite; } @keyframes bg { 0%{ transform: scale(1); opacity: 0.5; } 90%{ transform: scale(3); } 100%{ transform: scale(3); opacity: 0; } } .rocket{ width: 100px; height: 100px; position: relative; top: 50px; left: 50px; animation: fly 0.1s ease infinite; } @keyframes fly{ 0%, 100%{ transform: translateY(-1px); } 50% { transform: translateY(1px); } } img{ width: 100px; height: 100px; } .rocket::before{ /* 火箭尾部的火焰 */ content: ''; position: absolute; bottom: -250px; left: 50%; transform: translateX(-50%); width: 20px; height: 250px; background: linear-gradient(#ffc107, transparent); } .rocket::after{ /* 火箭尾部的火焰,应用blur做了暗影的成果 */ content: ''; position: absolute; bottom: -250px; left: 50%; transform: translateX(-50%); width: 20px; height: 250px; background: linear-gradient(#ffc107, transparent); filter: blur(20px); }</style><body> <div class="pulse"> <span style="--i:1"></span> <span style="--i:2"></span> <span style="--i:3"></span> <span style="--i:4"></span> <span style="--i:5"></span> <div class="rocket"> <img src=" https://img01.jituwang.com/200310/173754-2003101R95361.jpg" alt=""> </div> </div></body></html>

April 24, 2021 · 1 min · jiezi

关于前端:浅析BFC及其作用

一、什么是BFCBFC(block formatting context):简略来说,BFC 就是一种属性,这种属性会影响着元素的定位以及与其兄弟元素之间的相互作用。中文常译为块级格式化上下文。是 W3C CSS 2.1 标准中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关系和相互作用。 在进行盒子元素布局的时候,BFC提供了一个环境,在这个环境中依照肯定规定进行布局不会影响到其它环境中的布局。比方浮动元素会造成BFC,浮动元素外部子元素的次要受该浮动元素影响,两个浮动元素之间是互不影响的。 也就是说,如果一个元素合乎了成为BFC的条件,该元素外部元素的布局和定位就和内部元素互不影响(除非外部的盒子建设了新的 BFC),是一个隔离了的独立容器。(在 CSS3 中,BFC 叫做 Flow Root) 二、 造成 BFC 的条件 1、浮动元素,float 除 none 以外的值;2、相对定位元素,position(absolute,fixed);3、display 为以下其中之一的值 inline-blocks,table-cells,table-captions;4、overflow 除了 visible 以外的值(hidden,auto,scroll) 三、BFC常见作用 1、蕴含浮动元素 问题案例:高度塌陷问题:在通常状况下父元素的高度会被子元素撑开,而在这里因为其子元素为浮动元素所以父元素产生了高度坍塌,高低边界重合。这时就能够用bfc来革除浮动了。 2、不被浮动元素笼罩问题案例: div浮动兄弟遮蔽问题:因为左侧块级元素产生了浮动,所以和右侧未产生浮动的块级元素不在同一层内,所以会产生div遮挡问题。能够给蓝色块加 overflow: hidden,触发bfc来解决遮挡问题。 3、 BFC 会阻止外边距折叠问题案例:margin塌陷问题:在规范文档流中,块级标签之间竖直方向的margin会以大的为准,这就是margin的塌陷景象。能够用overflow:hidden产生bfc来解决。

April 23, 2021 · 1 min · jiezi

关于前端:从渲染原理谈前端性能优化

前言合格的开发者晓得怎么做,而优良的开发者晓得为什么这么做。 这句话来自《web性能权威指南》,我始终很喜爱,而本文尝试从浏览器渲染原理探讨如何进行性能晋升。 全文将从网络通信以及页面渲染两个过程去探讨浏览器的行为及在此过程中咱们能够针对那些点进行优化,有些的不足之处还请各位不吝雅正。 一、对于浏览器渲染的容易误会点总结对于浏览器渲染机制曾经是陈词滥调,而且网上现有材料中有十分多的优良材料对此进行论述。遗憾的是网上的材料参差不齐,常常在不同的文档中对同一件事的形容呈现了极大的差别。怀着谨严求学的态度通过大量材料的查阅和求教,将会在后文总结出一个残缺的流程。 1、DOM树的构建是文档加载实现开始的?DOM树的构建是从承受到文档开始的,先将字节转化为字符,而后字符转化为标记,接着标记构建dom树。这个过程被分为标记化和树构建而这是一个渐进的过程。为达到更好的用户体验,出现引擎会力求尽快将内容显示在屏幕上。它不用等到整个 HTML 文档解析结束之后,就会开始构建出现树和设置布局。在一直接管和解决来自网络的其余内容的同时,出现引擎会将局部内容解析并显示进去。参考文档:http://taligarsiel.com/Projec... 2、渲染树是在DOM树和CSS款式树构建结束才开始构建的吗?这三个过程在理论进行的时候又不是齐全独立,而是会有穿插。会造成一边加载,一边解析,一边渲染的工作景象。参考文档:http://www.jianshu.com/p/2d52... 3、css的标签嵌套越多,越容易定位到元素css的解析是自右至左逆向解析的,嵌套越多越减少浏览器的工作量,而不会越快。因为如果正向解析,例如「div div p em」,咱们首先就要查看以后元素到 html 的整条门路,找到最上层的 div,再往下找,如果遇到不匹配就必须回到最上层那个 div,往下再去匹配选择器中的第一个 div,回溯若干次能力确定匹配与否,效率很低。逆向匹配则不同,如果以后的 DOM 元素是 div,而不是 selector 最初的 em,那只有一步就能排除。只有在匹配时,才会一直向上找父节点进行验证。打个比方 p span.showing你认为从一个p元素上面找到所有的span元素并判断是否有class showing快,还是找到所有的span元素判断是否有class showing并且包含一个p父元素快参考文档:http://www.imooc.com/code/4570 二、页面渲染的残缺流程当浏览器拿到HTTP报文时出现引擎将开始解析 HTML 文档,并将各标记一一转化成“内容树”上的 DOM 节点。同时也会解析内部 CSS 文件以及款式元素中的款式数据。HTML 中这些带有视觉指令的款式信息将用于创立另一个树结构:出现树。浏览器将依据出现树进行布局绘制。 以上就是页面渲染的大抵流程。那么浏览器从用户输出网址之后到底做了什么呢?以下将会进行一个残缺的梳理。鉴于本文是前端向的所以梳理内容会有所并重。而从输出到出现能够分为两个局部:网络通信和页面渲染 咱们首先来看网络通信局部: 1、用户输出url并敲击回车。2、进行DNS解析。如果用户输出的是ip地址则间接进入第三条。但去记录毫无法则且简短的ip地址显然不是易事,所以通常都是输出的域名,此时就会进行dns解析。所谓DNS(Domain Name System)指域名零碎。因特网上作为域名和IP地址互相映射的一个分布式数据库,可能使用户更不便的拜访互联网,而不必去记住可能被机器间接读取的IP数串。<font color='#39495c' size='3'>通过主机名,最终失去该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。</font>这个过程如下所示: 浏览器会首先搜寻浏览器本身的DNS缓存(缓存工夫比拟短,大略只有2分钟左右,且只能包容1000条缓存)。 如果浏览器本身缓存找不到则会查看零碎的DNS缓存,如果找到且没有过期则进行搜寻解析到此结束.而如果本机没有找到DNS缓存,则浏览器会发动一个DNS的零碎调用,就会向本地配置的首选DNS服务器发动域名解析申请(通过的是UDP协定向DNS的53端口发动申请,这个申请是递归的申请,也就是运营商的DNS服务器必须得提供给咱们该域名的IP地址),运营商的DNS服务器首先查找本身的缓存,找到对应的条目,且没有过期,则解析胜利。如果没有找到对应的条目,则有运营商的DNS代咱们的浏览器发动迭代DNS解析申请,它首先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找打根域的DNS地址,就会向其发动申请(请问www.xxxx.com这个域名的IP地址是多少啊?)根域发现这是一个顶级域com域的一个域名,于是就通知运营商的DNS我不晓得这个域名的IP地址,然而我晓得com域的IP地址,你去找它去,于是运营商的DNS就失去了com域的IP地址,又向com域的IP地址发动了申请(请问www.xxxx.com这个域名的IP地址是多少?),com域这台服务器通知运营商的DNS我不晓得www.xxxx.com这个域名的IP地址,然而我晓得xxxx.com这个域的DNS地址,你去找它去,于是运营商的DNS又向linux178.com这个域名的DNS地址(这个个别就是由域名注册商提供的,像万网,新网等)发动申请(请问www.xxxx.com这个域名的IP地址是多少?),这个时候xxxx.com域的DNS服务器一查,诶,果然在我这里,于是就把找到的后果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了www.xxxx.com这个域名对应的IP地址,并返回给Windows零碎内核,内核又把后果返回给浏览器,终于浏览器拿到了www.xxxx.com对应的IP地址,这次dns解析圆满成功。3、建设tcp连贯 拿到域名对应的IP地址之后,User-Agent(个别是指浏览器)会以一个随机端口(1024< 端口 < 65535)向服务器的WEB程序(罕用的有httpd,nginx等)80端口发动TCP的连贯申请。这个连贯申请(原始的http申请通过TCP/IP4层模型的层层封包)达到服务器端后(这两头通过各种路由设施,局域网内除外),进入到网卡,而后是进入到内核的TCP/IP协定栈(用于辨认该连贯申请,解封包,一层一层的剥开),还有可能要通过Netfilter防火墙(属于内核的模块)的过滤,最终达到WEB程序,最终建设了TCP/IP的连贯。 tcp建设连贯和敞开连贯均须要一个欠缺的确认机制,咱们个别将连贯称为三次握手,而连贯敞开称为四次挥手。而不论是三次握手还是四次挥手都须要数据从客户端到服务器的一次残缺传输。将数据从客户端到服务端经验的一个残缺时延包含: 发送时延:把音讯中的所有比特转移到链路中须要的工夫,是音讯长度和链路速度的函数流传时延:音讯从发送端到承受端须要的工夫,是信号流传间隔和速度的函数解决时延:解决分组首部,查看位谬误及确定分组指标所需的工夫 排队时延:到来的分组排队期待解决的工夫以上的提早总和就是客户端到服务器的总延迟时间以上的提早总和就是客户端到服务器的总延迟时间。因而每一次的连贯建设和断开都是有微小代价的。因而去掉不必要的资源和资源合并(包含js及css资源合并、雪碧图等)才会成为性能优化绕不开的计划。然而好消息是随着协定的倒退咱们将对性能优化这个主题有着新的认识和思考。尽管还未到来,但也不远了。如果你感到好奇那就接着往下看。 以下简述下tcp建设连贯的过程:第一次握手:客户端发送syn包(syn=x,x为客户端随机序列号)的数据包到服务器,并进入SYN_SEND状态,期待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时本人也发送一个SYN包(syn=y,y为服务端生成的随机序列号),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1)此包发送结束,客户端和服务器进入ESTABLISHED状态,实现三次握手。握手过程中传送的包里不蕴含数据,三次握手结束后,客户端与服务器才正式开始传送数据。现实状态下,TCP连贯一旦建设,在通信单方中的任何一方被动敞开连贯之前,TCP连贯都将被始终放弃上来 这里留神, 三次握手是不携带数据的,而是在握手结束才开始数据传输。因而如果每次数据申请都须要从新进行残缺的tcp连贯建设,通信时延的耗时是难以估计的!这也就是为什么咱们总是能听到资源合并缩小申请次数的起因。 上面来看看HTTP如何在协定层面帮咱们进行优化的: HTTP1.0在http1.0时代,每个TCP连贯只能发送一个申请。发送数据结束,连贯就敞开,如果还要申请其余资源,就必须再新建一个连贯。 TCP连贯的新建老本很高,因为须要客户端和服务器三次握手,并且开始时发送速率较慢(TCP的拥塞管制开始时会启动慢启动算法)。在数据传输的开始只能发送大量包,并随着网络状态良好(无拥塞)指数增长。但遇到拥塞又要从新从1个包开始进行传输。 以下图为例,慢启动时第一次数据传输只能传输一组数据,失去确认后传输2组,每次翻倍,直到达到阈值16时开始启用拥塞防止算法,既每次失去确认后数据包只减少一个。当产生网络拥塞后,阈值减半从新开始慢启动算法。因而为防止tcp连贯的三次握手耗时及慢启动引起的发送速度慢的状况,应尽量减少tcp连贯的次数。 而HTTP1.0每个数据申请都须要从新建设连贯的特点使得HTTP 1.0版本的性能比拟差。随着网页加载的内部资源越来越多,这个问题就愈发突出了。 为了解决这个问题,有些浏览器在申请时,用了一个非标准的Connection字段。 Kepp-alive 一个能够复用的TCP连贯就建设了,直到客户端或服务器被动敞开连贯。然而,这不是规范字段,不同实现的行为可能不统一,因而不是基本的解决办法。 HTTP1.1http1.1(以下简称h1.1) 版的最大变动,就是引入了长久连贯(persistent connection),即TCP连贯默认不敞开,能够被多个申请复用,不必申明Connection: keep-alive。 客户端和服务器发现对方一段时间没有流动,就能够被动敞开连贯。不过,标准的做法是,客户端在最初一个申请时,发送Connection: close,明确要求服务器敞开TCP连贯。 目前,对于同一个域名,大多数浏览器容许同时建设6个长久连贯。相比与http1.0,1.1的页面性能有了微小晋升,因为省去了很多tcp的握手挥手工夫。下图第一种是tcp建设后只能发一个申请的http1.0的通信状态,而领有了长久连贯的h1.1则防止了tcp握手及慢启动带来的漫长时延。从图中能够看到相比h1.0,h1.1的性能有所晋升。然而尽管1.1版容许复用TCP连贯,然而同一个TCP连贯外面,所有的数据通信是按秩序进行的。服务器只有解决完一个回应,才会进行下一个回应。要是后面的回应特地慢,前面就会有许多申请排队等着。这称为"队头梗塞"(Head-of-line blocking)。 为了防止这个问题,只有三种办法:一是缩小申请数,二是同时多开长久连贯。这导致了很多的网页优化技巧,比方合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协定能持续优化,这些额定的工作是能够防止的。三是开启pipelining,不过pipelining并不是救世主,它也存在不少缺点: ...

April 23, 2021 · 4 min · jiezi

关于前端优化:前端进阶1Web前端性能优化

前端进阶(1)Web前端性能优化Web前端性能优化, 不仅可能改善站点的用户体验,并且可能节俭相当的资源利用。上面将从1)服务器、2)html内容、3)css、 4)javascript、 5)图片等几方面介绍具体的优化操作。 1. 服务器优化1.1. 应用内容散发网络(CDN)把网站内容扩散到多个、处于不同地区地位的服务器上能够放慢下载速度。 1.2. 服务器应用http2.0协定Http2.0的长处 二进制分帧首部压缩流量管制多路复用申请优先级服务器推送e.g 应用nginx, 要求 1)v1.9.5以上, 2)应用https; 1.3. GZIP压缩1.4. 应用浏览器缓存CSS、javascript、logo、图标这些动态资源文件更新的频率都比拟低,而这些文件又简直是每次http申请都须要的,如果将这些文件缓存在浏览器中,能够极好的改善性能。 通过设置http头中的cache-control和expires的属性,可设定浏览器缓存,缩小网络申请次数。 1.5. 设置ETagETags(Entity tags,实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制。 2. HTML内容优化2.1. 缩小HTTP申请数这条策略是最重要最无效的,因为一个残缺的申请要通过DNS寻址,与服务器建设连贯,发送数据,期待服务器响应,接收数据这样一个耗费工夫老本和资源老本的简单的过程。 常见办法: 合并多个CSS文件和js文件, 并进行最小化解决。利用CSS Sprites整合图像,行内图片Base64编码,应用 data:URL scheme在理论的页面嵌入图像数据正当设置HTTP缓存2.2. 缩小DNS查找为了缩小DNS的询次数,最好的解决办法就是在页面中缩小不同的域名申请的机会。 2.3. 防止重定向 301/30x如果重定向的话,就须要在拜访过程中反复发动一连串的动作,会耗费很多工夫,因而避免出现屡次重定向地址或资源的拜访。 2.4. 防止在html标签中写style属性js,css 写到独自的文件中,便于浏览器缓存。 2.5. 异步加载组件,预加载组件 (ansyc, defer)ansyc, defer不会阻塞浏览器的文档解析。 ansyc用于异步加载defer用于预加载 2.6. 提早、分页加载图片对于图片而言,在页面刚加载的时候能够只加载第一屏,当用户持续往后滚屏的时候才加载后续的图片。这样一来,如果用户只对第一屏的内容感兴趣时,那残余的图片申请就都节俭了。 2.7. 缩小DOM元素数量页面中存在大量DOM元素,会导致javascript遍历DOM的效率变慢。 2.8. 最小化iframe的数量iframes 提供了一个简略的形式把一个网站的内容嵌入到另一个网站中。但其创立速度比其余包含JavaScript和CSS的DOM元素的创立慢了1-2个数量级。 2.9. 防止404HTTP申请工夫耗费是很大的,因而应用HTTP申请来取得一个没有用途的响应(例如404没有找到页面)是齐全没有必要的,它只会升高用户体验而不会有一点益处。 2.10. 对Ajax申请应用GET办法2.11. 防止空的图像src3. CSS优化3.1. 将CSS代码放在HTML页面的顶部3.2. 合并、压缩CSS3.3. CSS选择符优化浏览器对选择符的解析是从右往左进行的依照ID查问效率最高3.4. 防止应用CSS表达式3.5. 应用<link>来代替@import3.6. 防止应用Filters4. javascript优化4.1. 将JavaScript脚本放在页面的底部4.2. 将JavaScript和CSS作为内部文件来援用在理论利用中应用内部文件能够进步页面速度,因为JavaScript和CSS文件都能在浏览器中产生缓存。 4.3. 合并、压缩JavaScript4.4. 删除无用、反复的脚本4.5. 最小化DOM的拜访应用JavaScript拜访DOM元素比较慢 ...

April 23, 2021 · 1 min · jiezi

关于即时通讯:即时通讯是怎么做到的

即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通信的,TCP/IP和UDP都是建设在更低层的IP协定上的两种通信传输协定。 TCP/IP是以数据流的模式,将传输数据经宰割、打包后,通过两台机器之间建设起的虚电路,进行间断的、双向的、严格保证数据正确性的文件传输协定。而UDP是以数据报的模式,对拆分后的数据的先后达到程序不做要求的文件传输协定。 QQ就是应用UDP协定进行发送和接管音讯的。当你的机器装置了OICQ当前,实际上,你既是服务端(Server),又是客户端(Client)。 当你登录OICQ时,你的OICQ作为Client连贯到腾讯公司的主服务器上,当你看谁在线时,你的OICQ又一次作为Client从QQ Server上读取在线网友名单。 当你和你的OICQ搭档进行聊天时,如果你和对方的连贯比较稳定,你和他的聊天内容都是以UDP的模式,在计算机之间传送。如果你和对方的连贯不是很稳固,QQ服务器将为你们的聊天内容进行直达。其余的即时通信软件原理与此大同小异。 个别的步骤:首先,用户A输出本人的用户名和明码登录即时通讯服务器,服务器通过读取用户数据库来验证用户身份,如果用户名、明码都正确,就注销用户A的IP地址、IM客户端软件的版本号及应用的TCP/UDP端口号, 而后返回用户A登录胜利的标记,此时用户A在IM零碎中的状态为在线(Online Presence)。 其次,依据用户A存储在IM服务器上的好友列表 (Buddy List),服务器将用户A在线的相干信息发送到也同时在线的即时通讯好友的PC机,这些信息包含在线状态、IP地址、IM客户端应用的TCP端口(Port)号等,即时通讯好友PC机上的即时通讯软件收到此信息后将在PC桌面上弹出一个小窗口予以提醒。 第三步,即时通讯服务器把用户A存储在服务器上的好友列表及相干信息回送到他的PC机,这些信息包含也在线状态、IP地址、IM客户端应用的TCP端口(Port)号等信息,用户A的PC机上的IM客户端收到后将显示这些好友列表及其在线状态。 接下来,如果用户A想与他的在线好友用户B聊天,他将间接通过服务器发送过去的用户B的IP地址、TCP端口号等信息,间接向用户B的PC机收回聊天信息。 用户B的IM客户端软件收到后显示在屏幕上,而后用户B再间接回复到用户A的PC机,这样单方的即时文字音讯就不通过IM服务器直达,而是通过网络进行点对点的间接通信, 这称为对等通信形式(Peer To Peer)。 在商用即时通讯零碎中,如果用户A与用户B的点对点通信因为防火墙、网络速度等起因难以建设或者速度很慢,IM服务器还提供音讯直达服务,即用户A和用户B的即时消息全副先发送到IM服务器,再由服务器转发给对方。 晚期的IM零碎,在IM客户端和IM服务器之间通信采纳采纳UDP协定,UDP协定是不牢靠的传输协定,而在IM客户端之间的间接通信中,采纳具备牢靠传输能力的TCP协定。 随着用户需要和技术环境的倒退,目前支流的即时通讯零碎偏向于在即时通讯客户端之间、即时通讯客户端和即时通讯服务器之间都采纳TCP协定。 作者/ luluhulian 起源/ APICloud官方论坛

April 23, 2021 · 1 min · jiezi

关于css:记录一个使用backgroundimage方式展示图片实现Hover平滑缩放效果的技巧

开发时候除了间接用img标签搁置图片外,也常常会用到在div中间接应用background-image的形式将图片作为背景图片搁置,通常会是这个样子: .cover{ display: block; background-position: 50%; background-size: cover;}如果这时候须要做一个鼠标Hover下来时平滑放大一点,移开又平滑恢复原状的成果,就须要借助backgound-size来实现。 .cover:hover{ background-size: 110%;}同时还须要在原有款式中加上transition的设置 .cover{ ... transition: all .3s ease-in-out; background-size: cover;}然而这个时候发现尽管鼠标hover时背景图片曾经有放大成果,然而平滑适度动画并没有起成果,仍然是僵硬的变动,所以可能的起因是transition并不知道要怎么执行对应的CSS参数平滑适度。看了下Hover的前后差异,是background-size: cover变成了background-size: 110%,这个。。。仿佛它并不知道怎么进行线性变动呢,于是把原有CSS成果中的background-size改成100%试一下: .cover{ transition: all .3s ease-in-out; background-size: 100%;}.cover:hover{ background-size: 110%;}试一下,Bingo!动画适度很天然,所以transition还是须要比拟明确的数值变动差别,才可能执行动画成果的

April 23, 2021 · 1 min · jiezi

关于css:CSS复习笔记二规则和布局

CSS(让块元素依照想法显示) 实体:&nbsp&lt&gt 单位相对单位10px 绝对单位1em em绝对于元素的字体大小1rem rem绝对于html元素选择器中设定的字体大小 色彩关键字 pink 十六进制 #ffffff #000 #f4f4f4函数 rgb( , ,) rgba( , , ,)a示意透明度 标签文字化:1.定义网络字体 @font-face{ font-family:"iconfont"; src:"";}2.应用根底款式 .iconfont{ font-family:"iconfont" !important; font-size:16px; font-style:normal;}非凡款式 .icon-aixin:before{ content:"\e8ab"; }援用<span class:"icon-aixin"> 一、规定文本规定:(针对盒子内容润饰,可继承)text-align:center 盒子居中:margin: 0 auto盒子外面的内容程度居中:text-align:center盒子外面的内容垂直居中:heigjt:50px;;line-height:50px;vertical-align(行内元素垂直排列) middletext-decoration underline(下划线)overline(上划线)line-through(删除线)text-decoration-color(速写模式)overflow:hidden/visable/initial/scroll(滚动) overflow-x(左右)overflow-y(高低)字体规定:(针对盒子内容润饰,可继承)字体: font-family:'Microdoft YaHei';字体色彩 color:字体粗细 font-weight:bold/light字体款式 font-style:italic/normal字体速写 font:font-weight font-size/line-height font-family(font:)Microdoft YaHei12px/1.5背景色background-image:url("")background-repeat:no-repeat裁切终点background-clip:padding-box铺设终点background-orgin:content-boxbackground-size:cover/containbackground-position:50px 100px/centerbackground-color:列表规定list-style:none 表格规定border-collapse: collapse(td增加边框时,加在table上能够合并隔壁的边框)opacity(透明度)二、浮动布局(块元素一行当中排列的问题)盒子模型(块元素)外边距margin边框border:1px solid #ccc border-top border-top-styleborder-top-widthborder-top-colorborder-rightborder-bottomborder-leftboder是border-top,border-right,border-bottom,border-left的速写模式 内边距padding padding-toppadding-rightpadding-bottompadding-left速写: 0 5px 高低0 左右5 0 5px 10px 上0 左右5 下10 0 5px 10px 20px 上右下左宽width高height1)怪异盒模型(ie) jquery ...

April 23, 2021 · 1 min · jiezi

关于vue.js:Fower-一个可在-Vue-和-React-方便使用的-CSS-in-JS-库

一年多没写过文章了,明天给大家介绍一个我断断续续花了半年开发的 CSS 我的项目: Fower. Fower 是什么?Fower 是一个让你高效开发 UI 的款式工具库,指标是让你写 CSS 不再苦楚。Fower 的外围特点是原子化(Atomic/utility-first)、类型平安(Type Safe)、CSS in JS,它十分重视开发体验,让你疾速且开心的开发界面。 Fower 是框架无关的,你能够在 React、Vue、React native、小程序等任何 JavaScript 我的项目中应用。 我的项目背景一年前,我所在的团队同时在开发 Web、React native、小程序我的项目。在这三类我的项目中,咱们应用了各不相同的款式计划: 在 Web 我的项目中,咱们应用的是 Styed-component;在 React native 我的项目中,咱们应用 React native 自带的 StyleSheet.create;在小程序我的项目中,咱们应用 Taro 开发,款式计划是 Sass;三种款式的计划写法各不相同,导致咱们编写款式时特地苦楚: 开发体验差,开发同样的界面,却要不同的写法,须要一直切换习惯和思维工具链太广太简单,Styled-component、Sass、StyleSheet.create...开发效率低下,反复代码特地多CSS 天生毛病多,可维护性差前面,我发现了 Tailwindcss,一个 utility 优先(utility-first) 的 CSS 框架,在我的推动下,咱们团队开始在 Web 我的项目中应用 Tailwindcss。一段时间后,咱们发现开发体验很不错,开发效率也很高,特地适宜在咱们这种须要高度定制界面的我的项目应用。惋惜的是,Tailwindcss 无奈间接在 React native、小程序等非 Web 我的项目应用。 咱们团队的成员都喜爱 Tailwindcss 这种款式写法。所以我创立了 Fower,心愿能对立了所有我的项目的款式编写形式。 和 Tailwindcss 相似,咱们也应用了 utility-first 的理念,但有 Fower 又有点不同,Fower 应用 Atomic style props 的形式编写款式,代码如下: ...

April 23, 2021 · 2 min · jiezi

关于css:项目引入阿里图标库

我的项目引入阿里图标库一. Symbol形式(多色)反对多色图标了,不再受单色限度通过一些技巧,反对像字体那样,通过font-size,color来调整款式兼容性较差,反对 ie9+,及古代浏览器浏览器渲染svg的性能个别,不如png前端引入js链接<script src="http://at.alicdn.com/t/font_2326420_a5e2tkgk7u9.js"></script>2.因为我的项目中常常会用到icon,所以封装成了组件,而后全局注册组件,不便团队应用.<template> <svg class="svg-icon" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg></template><script>export default { name: 'IconSvg', props: { iconClass: { type: String, required: true } }, computed: { iconName () { return `#${this.iconClass}` } }}</script><style scoped>.svg-icon { width: 1em; height: 1em; font-size: 18px; vertical-align: -0.15em; fill: currentColor; overflow: hidden;}</style>二. font-class形式(单色) 兼容性良好,反对ie8+,及所有古代浏览器因为应用class来定义图标,所以当要替换图标时,只须要批改class外面的unicode援用相比于unicode语意明确,书写更直观。能够很容易分辨这个icon是什么不过因为实质上还是应用的字体,所以多色图标还是不反对的 在线引入1.在html中应用link<link rel="stylesheet" href="http://at.alicdn.com/t/font_1957918_fj77cbthvj.css">2.而后筛选相应的类名退出页面 本地引入

April 23, 2021 · 1 min · jiezi

关于html:视频背景文字特效

代码来自头条号'前端小智',侵权删 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } section{ width: 100%; height: 100vh; position: absolute; overflow: hidden; } h2{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; display: flex; justify-content: center; flex-direction: column; text-transform: uppercase; text-align: center; font-size: 20vw; font-weight: 800; line-height: 0.85em; color: #fff; background-color: #000; mix-blend-mode: multiply; } span{ font-size: 0.4em; line-height: 0.85em; } video{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; object-fit: cover; } </style></head><body> <section> <video autoplay muted loop src="https://vd2.bdstatic.com/mda-mbcx89u69bqqfkcx/sc/cae_h264_clips/1613226363/mda-mbcx89u69bqqfkcx.mp4?auth_key=1619102707-0-0-2645fd52c7e75eccc27ad5df8658ad24&amp;bcevod_channel=searchbox_feed&amp;pd=1&amp;pt=3&amp;abtest=" style="position: absolute; top: 0px; left: 0px;"></video> <h2>video in text <span>background</span></h2> </section></body></html>

April 22, 2021 · 1 min · jiezi

关于css:好用的css3特性过渡和2D变换

css3中有很多十分好用的个性,明天来总结一下与动画相干,包含过渡、2D变换。 首先来介绍一下过渡,过渡是在进行变动的时候进行的一个缓冲,如果没有过渡,当变更了元素的地位、大小的数据时,会一瞬间实现变动,减少了过渡之后,变动的过程会展示进去。比方以下gif,咱们想要在鼠标移入盒子的时候,将盒子的宽和高增大一倍,并且更改色彩,没有过渡和过渡显著在用户体验上就不一样。 过渡的写法也简略,只须要在变动的根底上减少一个 transition 就行 transition: 过渡属性 过渡工夫 过渡曲线 延迟时间(1) 过渡属性,能够设置 宽度、高度、transform等,当有多个过渡成果时,能够用逗号隔开,或者用all来代表所有成果 (必写)(2) 过渡工夫,单位是s,示意花多久的工夫达到变动后的成果 (必写)(3) 过渡曲线,默认 ease,即逐步慢,还有以下选项能够抉择 linear 匀速 ease-in 减速 ease-out 加速 ease-in-out 先减速后加速(4) 延迟时间,示意推延多久执行过渡成果,默认0s,即不提早,能够自定义过渡曲线不是很好了解,这里演示一下 ease、ease-in、ease-out、ease-in-out的区别 理解完过渡的语法之后,如上图的过渡成果,就能够这样来定义,创立一个空的div标签,而后为它定义宽高背景色 .box {   width: 100px;   height: 100px;   background-color: pink;        // 此处用来定义过渡, 默认的内容能够省略, 理论为 transition: all 1s ease 0s   transition: all 1s;}.box:hover {  width: 200px;  height: 200px;  background-color: skyblue}除了扭转宽高,如果咱们须要挪动元素的地位,这时候该怎么做呢?有两种形式帮咱们实现这一成果,以下示例1s后向别离在x和y轴挪动100px 形式一, 间接批改top/left的值 // css代码.box {   position: relative;   top: 0;   left: 0;   background-color: pink;   height: 100px;   width: 100px;   transition: all 1s; // 减少过渡, 使变动不那么突兀}// html代码<div class="box"></div>// js代码const box = document.getElementsByClassName('box')[0]setTimeout(()=>{   box.style.left = "100px"   box.style.top = "100px"},1000)形式二,通过css3提供的2D变换属性,transform,挪动元素通过 translate来实现 ...

April 21, 2021 · 2 min · jiezi

关于javascript:基于-Flutter-的-Web-渲染引擎北海正式开源

阿里巴巴历时 3 年自研开发的 Web 渲染引擎 北海(英文名:Kraken)正式开源,致力打造易扩大,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中应用。 官网:https://openkraken.com Github:https://github.com/openkraken/kraken 背景互联网业务热火朝天地倒退离不开跨平台技术,而最成熟的跨平台技术就是大家相熟的浏览器了,它与生俱来的跨平台能力、凋谢的规范以及弱小的生态使它成为煊赫一时的容器之一。而因为其自身不是为了性能而设计的,并且历史包袱重、兼容性、厂商更新慢等问题,浏览器在挪动端的体现并不突出。只管网络以及硬件的倒退带来了足够多的性能红利,然而日益简单的业务总能把已有的性能吃透。 过来也有很多对跨平台计划的摸索与实际,新的技术计划也随着历史的浪潮一直地倒退。从最早的 H5 计划到 Hybrid 计划,以及起初的 Weex/React Native 计划,到当初热火朝天的 Flutter。 Flutter 因为其精简的渲染管线,高效的布局渲染能力,以及自绘渲染的个性,一跃成为这两年跨端届的新宠。而在 Flutter 呈现之前,支流的计划还是用 React Native(Weex)的,这套计划的底层调用了原生的 View。正是因为如此,导致这套计划很难保障齐全的多端一致性,因为原生 View 自身就存在一些限度,无限的能力不能满足开发者所有的需要,所以在实现 W3C 规范时有些牵强。而 Flutter 基于更底层的 Skia 做自绘渲染,能够很好地保障多端一致性。 相熟 Flutter 的同学必定晓得 Flutter 是用 Dart 语言以及 Widget 来开发的,虽说 Dart 语言对相熟 JavaScript 的前端同学来说上手老本并不是很高,对于 Widget 这种基于状态驱动的开发模式也曾经是十分相熟,然而整体上与已有基建与前端生态割裂的矛盾是无奈承受的。再者,动态化能力对于互联网业务来说几乎就是刚需,而目前来看 Flutter for Web 并不现实。 毕竟,引入一项新技术的第一步是解决引入这项新技术的老本问题。所以咱们积极探索一种向上对接前端生态,向下应用自绘渲染的跨平台计划。 于是诞生了这款基于 W3C 规范的高性能跨终端渲染引擎——北海(Kraken)。 基于 W3C 规范Kraken 最终要服务的用户还是前端开发者,那么如何升高前端开发者的学习相熟老本以及如何将老我的项目疾速地迁徙到 Kraken 之上呢?咱们并不想从新发明一套新的 DSL 作为研发框架来给开发者用,如果需要的话,那 Flutter 自身的 Widget + Dart 曾经做得很不错了。前端开发者可能是用 Rax,也有可能是用 Vue 或是 React 的,咱们都冀望 Kraken 的用户可能做到“零老本”的疾速接入。那么,就须要依赖一套开发者十分相熟的规范来实现 Kraken。 ...

April 21, 2021 · 2 min · jiezi

关于css:你可能不知道的-CSS-容器查询

背景明天PM过去问我: 蛋总,有些用户反馈他们屏幕太小了,须要滑动, 操作不不便。 咱们的零碎能不能改成自适应布局啊? 我登时虎躯一震:woc, 要把一个迭代了一年多的固定设计的产品,改成自适应布局? 真让人胆怯。 而后我就去查了一些自适应布局的材料,尝试找出一种革新老本最小的计划。 过程中发现了一个比拟好玩的货色:CSS 容器查问。 容器查问容许开发者依据容器元素的大小来设置元素的款式。 它相似于 @media查问,不同之处在于它依据容器的大小而不是视口的大小进行判断。 对此,我做了一下简略的整顿和总结,在此分享给大家,心愿对大家有所启发。 注释咱们应用创立响应式设计时,通常应用媒体查问依据视口的大小来更改文档布局。 然而,许多设计都有一些通用组件,这些组件会依据其容器的可用宽度来更改布局。 这可能并不总是与视口的大小无关,而是与组件在布局中的搁置地位无关。 例如,以下组件可能显示在网站布局的窄或宽列中。 如果有空间,它将显示为两列,否则,咱们心愿将其重叠显示。 上图中的左右两个组件,是同一个组件,性能上是齐全一样的,只是要展现不同的布局。 目前来说, 咱们能够通过以某种形式辨认该组件,比方通过增加一个类或应用其余选择器来定位元素,该选择器能够查看它在文档构造中的地位。 然而,这并不能齐全实现媒体查问在整个布局中的作用。 媒体查问使咱们可能依据视口的范畴来扭转元素的大小。 当咱们增加一个类或指标元素时,咱们决定当对象在侧边栏中时,它必须应用重叠布局。 然而,就可用空间而言,很可能是在大屏幕上,侧边栏中的对象将具备足够的空间来以并排布局显示。 容器查问将解决这种状况。 除了查看视口的大小,咱们还能够查看容器的大小,并依据容器中的空间进行布局调整。 CSS 容器查提案容器查问, 将成为css containment标准的一部分,并向contain属性增加新值。 该contain属性最后是为了性能优化而设计的。 它为Web开发人员提供了一种办法来隔离DOM的各个局部,并向浏览器申明这些局部与文档的其余部分无关。 应用contain: size;示意浏览器在两个维度上都晓得该区域的大小。 晓得它有多大的容器,正是咱们进行容器查问所须要的。 然而,通常咱们并不常常晓得这两个维度有多大。 当咱们应用媒体查问时,大多数时候咱们都会指定可用的宽度(或内联大小)。 咱们将列定义为: 该维度中,空间的百分比或分数。 因而,容器查问仅容许通过在一维中批示大小来扩大蕴含属性,这被形容为单轴遏制。 以下CSS将创立一个仅在嵌入式轴上蕴含容器的容器,内容能够增长到在块轴上所需的大小: .sidebar { contain: layout inline-size;}申明contain属性,并且把layout和size的值叠加, 浏览器便会在该元素上创立一个containment上下文。 申明了这个属性,就意味着浏览器晓得: 我当前可能要查问此容器。 而后,能够编写一个查问来查找此蕴含上下文而不是视口大小,以便为组件制订布局决策。 应用创立容器查@container。 这将查问最近的蕴含上下文。 为了使卡仅在边栏宽于700px时才显示为两列,咱们应用以下CSS: @container (min-width: 700px) { .card { display: grid; grid-template-columns: 2fr 1fr; }}如果布局的其余区域也是containment,那么咱们能够将组件放到那些区域中,它将主动响应相干的容器。这使得咱们能够在模式库中创立的各种组件真正可重用,而无需晓得它们所处的上下文。 ...

April 21, 2021 · 1 min · jiezi

关于css:小米LOGO使用Vue微调

小米 LOGO那天看了发布会,被一个小日本骗了。有一种童年的故事《国王的新衣》200W轻松拿回家!日本汇率 200万 = 3320万 9900 话不多说,上Vue这里通知咱们 v-model 本来没什么价值。然而现在v-model调一下好几万啊你的胜利只能本人把握了。 <img src="./assets/a.png" :style="{'border-radius': num+'px'}"><input type='range' class='tip fill' v-model="num" /><h1>{{num}}</h1><script> export default { data() { return { num:0, } } }</script>前面还css款式,这个爱要不要。反正是从JQ那边扒的<style> input[type='range'] { display: block; margin: 2.5em auto; padding: 0; /* inconsistent */ opacity: .75; background: transparent; /* inconsistent */ /* font-size inconsistent */ font: 1em trebuchet ms, verdana, arial, sans-serif; cursor: pointer; } input[type='range'], input[type='range']::-webkit-slider-runnable-track, input[type='range']::-webkit-slider-thumb { -webkit-appearance: none; } input[type='range']::-webkit-slider-runnable-track { position: relative; /* prep for creating rulers */ } input[type='range']::-webkit-slider-runnable-track:before, input[type='range']::-webkit-slider-runnable-track:after, input[type='range'] /deep/ #track:before, input[type='range'] /deep/ #track:after { position: absolute; } input[type='range']::-ms-track { border: none; /* remove default border */ color: transparent; /* remove dfault tick marks */ } input[type='range']::-webkit-slider-thumb { box-sizing: border-box; border: solid 0 transparent; border-radius: 50%; cursor: ew-resize; } input[type='range']::-moz-range-thumb { box-sizing: border-box; border: solid 0 transparent; border-radius: 50%; cursor: ew-resize; } input[type='range']::-ms-thumb { box-sizing: border-box; border: solid 0 transparent; border-radius: 50%; cursor: ew-resize; } input[type='range']:nth-of-type(1) { border: solid 1px transparent; padding: 0 0.7em; width: 27em; height: 4.875em; border-radius: .25em; box-shadow: inset 0 1px 1px #c0ed78, 0 1px 1px #5f8f2f, 0 1em 2.25em -2.25em #000, 0 1.125em 2.315em -2.315em #000, 0 1.25em 2.375em -2.375em #000, 0 1.375em 2.5em -2.5em #000; background: -webkit-linear-gradient(0deg, #eeeeee 1px, rgba(238, 238, 238, 0) 1px) repeat-x 1.5em 50% content-box, -webkit-linear-gradient(#98cb4c, #74a22f) padding-box, -webkit-linear-gradient(#7da142, #5c8022) border-box; background: linear-gradient(90deg, #eeeeee 1px, rgba(238, 238, 238, 0) 1px) repeat-x 1.5em 50% content-box, linear-gradient(#98cb4c, #74a22f) padding-box, linear-gradient(#7da142, #5c8022) border-box; background-size: 2em 1.25em, 100% 100%, 100% 100%; /* ------- the track ------- */ /* ------- the fill ------- */ /* ------- the ruler ------- */ /* ------- the thumb ------- */ /* ------- the tip ------- */ } input[type='range']:nth-of-type(1)::-webkit-slider-runnable-track { width: 27em; height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 0.125em -0.125em #5c8520; background: -webkit-linear-gradient(#e8f0f3, #c7f183); background: linear-gradient(#e8f0f3, #c7f183); -webkit-transform: translateY(-0.5em); transform: translateY(-0.5em); } input[type='range']:nth-of-type(1)::-moz-range-track { width: 27em; height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 0.125em -0.125em #5c8520; background: linear-gradient(#e8f0f3, #c7f183); } input[type='range']:nth-of-type(1)::-ms-track { width: 27em; height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 1px #5c8520; background: linear-gradient(#e8f0f3, #c7f183); } .js input[type='range']:nth-of-type(1)::-webkit-slider-runnable-track:after, .js input[type='range']:nth-of-type(1) /deep/ #track:after { top: 0; left: 0; width: 13.5em; height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 0.25em -0.125em #5c8520; background: -webkit-linear-gradient(#ffffff, #bbbbbb); background: linear-gradient(#ffffff, #bbbbbb); -webkit-clip-path: inset(0 0.5em 0 0); clip-path: inset(0 0.5em 0 0); content: ''; } .js input[type='range']:nth-of-type(1)::-moz-range-track { background: linear-gradient(#ffffff, #bbbbbb) no-repeat, linear-gradient(#e8f0f3, #c7f183); background-size: 13.5em 100%; } input[type='range']:nth-of-type(1)::-moz-range-progress { height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 0.25em -0.125em #5c8520; background: linear-gradient(#ffffff, #bbbbbb); } .js input[type='range']:nth-of-type(1)::-moz-range-progress { opacity: 0; } input[type='range']:nth-of-type(1)::-ms-fill-lower { height: 0.5em; border-radius: 0.25em; /* shadow not really visible in IE :( */ box-shadow: 0 0.25em 0.25em -0.125em #5c8520; background: linear-gradient(#ffffff, #bbbbbb); } input[type='range']:nth-of-type(1)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(1) /deep/ #track:before, input[type='range']:nth-of-type(1)::-webkit-slider-thumb:before, input[type='range']:nth-of-type(1) /deep/ #thumb:before { position: absolute; top: 175%; left: 0; right: 0; color: #eee; font: 0.75em/2 trebuchet ms, verdana, arial, sans-serif; } input[type='range']:nth-of-type(1)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(1) /deep/ #track:before { text-indent: 1.6875em; word-spacing: 1.81667em; content: '1 2 3 4 5 6 7 8 9'; } input[type='range']:nth-of-type(1)::-webkit-slider-thumb:before, input[type='range']:nth-of-type(1) /deep/ #thumb:before { text-indent: 25.5em; word-spacing: 1.29167em; content: '10 11 12 13'; } .js input[type='range']:nth-of-type(1)[value='1']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='1'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='1']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='1'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 1em 0, 1em 100%, 3em 100%, 3em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 1em 0, 1em 100%, 3em 100%, 3em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='2']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='2'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='2']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='2'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 3.66667em 0, 3.66667em 100%, 5.66667em 100%, 5.66667em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 3.66667em 0, 3.66667em 100%, 5.66667em 100%, 5.66667em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='3']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='3'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='3']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='3'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 6.33333em 0, 6.33333em 100%, 8.33333em 100%, 8.33333em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 6.33333em 0, 6.33333em 100%, 8.33333em 100%, 8.33333em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='4']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='4'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='4']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='4'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 9em 0, 9em 100%, 11em 100%, 11em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 9em 0, 9em 100%, 11em 100%, 11em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='5']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='5'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='5']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='5'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 11.66667em 0, 11.66667em 100%, 13.66667em 100%, 13.66667em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 11.66667em 0, 11.66667em 100%, 13.66667em 100%, 13.66667em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='6']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='6'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='6']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='6'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 14.33333em 0, 14.33333em 100%, 16.33333em 100%, 16.33333em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 14.33333em 0, 14.33333em 100%, 16.33333em 100%, 16.33333em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='7']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='7'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='7']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='7'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 17em 0, 17em 100%, 19em 100%, 19em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 17em 0, 17em 100%, 19em 100%, 19em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='8']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='8'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='8']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='8'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 19.66667em 0, 19.66667em 100%, 21.66667em 100%, 21.66667em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 19.66667em 0, 19.66667em 100%, 21.66667em 100%, 21.66667em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='9']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='9'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='9']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='9'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 22.33333em 0, 22.33333em 100%, 24.33333em 100%, 24.33333em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 22.33333em 0, 22.33333em 100%, 24.33333em 100%, 24.33333em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='10']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='10'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='10']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='10'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 25em 0, 25em 100%, 27em 100%, 27em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 25em 0, 25em 100%, 27em 100%, 27em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='11']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='11'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='11']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='11'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 27.66667em 0, 27.66667em 100%, 29.66667em 100%, 29.66667em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 27.66667em 0, 27.66667em 100%, 29.66667em 100%, 29.66667em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='12']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='12'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='12']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='12'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 30.33333em 0, 30.33333em 100%, 32.33333em 100%, 32.33333em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 30.33333em 0, 30.33333em 100%, 32.33333em 100%, 32.33333em 0, 100% 0, 100% 100%, 0 100%); } .js input[type='range']:nth-of-type(1)[value='13']::-webkit-slider-runnable-track:before, .js input[type='range']:nth-of-type(1)[value='13'] /deep/ #track:before, .js input[type='range']:nth-of-type(1)[value='13']::-webkit-slider-thumb:before, .js input[type='range']:nth-of-type(1)[value='13'] /deep/ #thumb:before { -webkit-clip-path: polygon(0 0, 33em 0, 33em 100%, 35em 100%, 35em 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 33em 0, 33em 100%, 35em 100%, 35em 0, 100% 0, 100% 100%, 0 100%); } input[type='range']:nth-of-type(1)::-webkit-slider-thumb { margin-top: -1.25em; border-width: 1em; padding: 0.3125em; width: 3em; height: 3em; background: -webkit-linear-gradient(#808080, #808080) content-box, -webkit-radial-gradient(25% 25%, circle, #fbfbf9, #bfccad) padding-box; background: linear-gradient(#808080, #808080) content-box, radial-gradient(circle at 25% 25%, #fbfbf9, #bfccad) padding-box; } input[type='range']:nth-of-type(1)::-moz-range-thumb { border-width: 1em; padding: 0.3125em; width: 3em; height: 3em; background: linear-gradient(#808080, #808080) content-box, radial-gradient(circle at 25% 25%, #fbfbf9, #bfccad) padding-box; } input[type='range']:nth-of-type(1)::-ms-thumb { border-width: 1em; padding: 0.3125em; width: 3em; height: 3em; background: linear-gradient(#808080, #808080) content-box, radial-gradient(circle at 25% 25%, #fbfbf9, #bfccad) padding-box; } input[type='range']:nth-of-type(1)::-webkit-slider-thumb:after, input[type='range']:nth-of-type(1) /deep/ #thumb:after { display: block; width: 2em; -webkit-transform: translate(-0.8125em, 0.5em); transform: translate(-0.8125em, 0.5em); color: #eee; font: 700 0.9375em/2.125 trebuchet ms, verdana, arial, sans-serif; text-align: center; } .js input[type='range']:nth-of-type(1)::-webkit-slider-thumb:after, .js input[type='range']:nth-of-type(1) /deep/ #thumb:after { content: "7"; } input[type='range']:nth-of-type(2) { padding: 0 1em; width: 20.5em; height: 4.75em; border-radius: .25em; box-shadow: inset 0 -1px #f1e4cc, 1px 0 rgba(219, 155, 51, 0.95), 0 0.125em 1px rgba(219, 155, 51, 0.95); background: -webkit-linear-gradient(#ffffff, #d7d7d7); background: linear-gradient(#ffffff, #d7d7d7); /* ------- the track ------- */ /* ------- the fill ------- */ /* ------- the ruler ------- */ /* ------- the thumb ------- */ /* ------- the tip ------- */ } input[type='range']:nth-of-type(2)::-webkit-slider-runnable-track { width: 20.5em; height: 0.4375em; border-radius: 0.21875em; box-shadow: inset 0 1px 1px #888; background: #c6c6c6; -webkit-transform: translateY(-0.4375em); transform: translateY(-0.4375em); } input[type='range']:nth-of-type(2)::-moz-range-track { width: 20.5em; height: 0.4375em; border-radius: 0.21875em; box-shadow: inset 0 1px 1px #888; background: #c6c6c6; } input[type='range']:nth-of-type(2)::-ms-track { width: 20.5em; height: 0.4375em; border-radius: 0.21875em; box-shadow: inset 0 1px 1px #888; background: #c6c6c6; } .js input[type='range']:nth-of-type(2)::-webkit-slider-runnable-track:after, .js input[type='range']:nth-of-type(2) /deep/ #track:after { top: 0; left: 0; width: 60%; height: 0.4375em; border-radius: 0.21875em; background: -webkit-linear-gradient(90deg, #4e7a0e 1px, #80b03a 1px, #98c751 90%, #c5df9c); background: linear-gradient(0deg, #4e7a0e 1px, #80b03a 1px, #98c751 90%, #c5df9c); content: ''; } input[type='range']:nth-of-type(2)::-moz-range-progress { height: 0.4375em; border-radius: 0.21875em; background: linear-gradient(0deg, #4e7a0e 1px, #80b03a 1px, #98c751 90%, #c5df9c); } input[type='range']:nth-of-type(2)::-ms-fill-lower { height: 0.4375em; border-radius: 0.21875em; background: linear-gradient(0deg, #4e7a0e 1px, #80b03a 1px, #98c751 90%, #c5df9c); } input[type='range']:nth-of-type(2)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(2) /deep/ #track:before { top: 100%; left: 50%; -webkit-transform: translate(-50%); transform: translate(-50%); color: #b0b0b0; font: 0.78em/1.5 trebuchet ms, verdana, arial, sans-serif; white-space: nowrap; word-spacing: 22.28205em; content: '0% 100%'; } input[type='range']:nth-of-type(2)::-webkit-slider-thumb { position: relative; z-index: 2; margin-top: -0.28125em; border-width: 0.125em; width: 1em; height: 1em; background: -webkit-radial-gradient(#b4dbaf, #0e5401, #559149 3px, #73af67, #bff0b4, #abe29a 65%) padding-box, -webkit-linear-gradient(135deg, #008000, #6db04f) border-box #fff; background: radial-gradient(#b4dbaf, #0e5401, #559149 3px, #73af67, #bff0b4, #abe29a 65%) padding-box, linear-gradient(-45deg, #008000, #6db04f) border-box #fff; -webkit-filter: drop-shadow(1px 0.125em 0.125em rgba(0, 0, 0, 0.4)); filter: drop-shadow(1px 0.125em 0.125em rgba(0, 0, 0, 0.4)); } input[type='range']:nth-of-type(2)::-moz-range-thumb { border-width: 0.125em; width: 1em; height: 1em; background: radial-gradient(#b4dbaf, #0e5401, #559149 3px, #73af67, #bff0b4, #abe29a 65%) padding-box, linear-gradient(-45deg, #008000, #6db04f) border-box #fff; filter: drop-shadow(1px 0.125em 0.125em rgba(0, 0, 0, 0.4)); } input[type='range']:nth-of-type(2)::-ms-thumb { border-width: 0.125em; width: 1em; height: 1em; background: radial-gradient(#b4dbaf, #0e5401, #559149 3px, #73af67, #bff0b4, #abe29a 65%) padding-box, linear-gradient(-45deg, #008000, #6db04f) border-box #fff; filter: drop-shadow(1px 0.125em 0.125em rgba(0, 0, 0, 0.4)); } input[type='range']:nth-of-type(2)::-webkit-slider-thumb:after, input[type='range']:nth-of-type(2) /deep/ #thumb:after { position: absolute; right: 50%; bottom: 150%; width: 2.54545em; height: 3.27273em; -webkit-transform: translate(25%); transform: translate(25%); background: rgba(255, 255, 255, 0.5); color: #222; font: 900 0.6875em/2.86364em trebuchet ms, verdana, arial, sans-serif; text-align: center; text-shadow: 0 0 1px rgba(0, 0, 0, 0.25); -webkit-clip-path: polygon(75% 100%, 0.72051em 2.2466em, 0.27767em 1.91867em, 0.03191em 1.4448em, 0.03191em 0.91884em, 0.27767em 0.44497em, 0.72051em 0.11704em, 1.27273em 0em, 1.82494em 0.11704em, 2.26779em 0.44497em, 2.51354em 0.91884em, 2.51354em 1.4448em, 2.26779em 1.91867em, 1.82494em 2.2466em); clip-path: polygon(75% 100%, 0.72051em 2.2466em, 0.27767em 1.91867em, 0.03191em 1.4448em, 0.03191em 0.91884em, 0.27767em 0.44497em, 0.72051em 0.11704em, 1.27273em 0em, 1.82494em 0.11704em, 2.26779em 0.44497em, 2.51354em 0.91884em, 2.51354em 1.4448em, 2.26779em 1.91867em, 1.82494em 2.2466em); } .js input[type='range']:nth-of-type(2)::-webkit-slider-thumb:after, .js input[type='range']:nth-of-type(2) /deep/ #thumb:after { content: "60%"; } input[type='range']:nth-of-type(3) { width: 22.5em; height: 4em; background: -webkit-radial-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0) 70%) no-repeat 50% 2.6875em; background: radial-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0) 70%) no-repeat 50% 2.6875em; background-size: 90% 0.625em; /* ------- the track ------- */ /* ------- the fill ------- */ /* ------- the ruler ------- */ /* ------- the thumb ------- */ /* ------- the tip ------- */ } input[type='range']:nth-of-type(3)::-webkit-slider-runnable-track { width: 22.5em; height: 2em; border-radius: .375em; background: -webkit-linear-gradient(#ffffff, #d5d5d5); background: linear-gradient(#ffffff, #d5d5d5); } input[type='range']:nth-of-type(3)::-moz-range-track { width: 22.5em; height: 2em; border-radius: .375em; background: linear-gradient(#ffffff, #d5d5d5); } input[type='range']:nth-of-type(3)::-ms-track { width: 22.5em; height: 2em; border-radius: .375em; background: linear-gradient(#ffffff, #d5d5d5); } input[type='range']:nth-of-type(3)::-ms-fill-lower { display: none; } input[type='range']:nth-of-type(3)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(3)::-webkit-slider-runnable-track:after, input[type='range']:nth-of-type(3) /deep/ #track:before, input[type='range']:nth-of-type(3) /deep/ #track:after { z-index: 1; position: absolute; top: 0; right: 0; bottom: 0; left: 0; font: 0.85em / 2.35294em trebuchet ms, verdana, arial, sans-serif; color: #777; text-shadow: 0 0 1px rgba(85, 85, 85, 0.5); } input[type='range']:nth-of-type(3)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(3) /deep/ #track:before { text-indent: 2.14706em; word-spacing: 19.30147em; content: '0% 100%'; } input[type='range']:nth-of-type(3)::-webkit-slider-runnable-track:after, input[type='range']:nth-of-type(3) /deep/ #track:after { text-indent: 7.12868em; word-spacing: 3.41912em; content: '25% 50% 75%'; } input[type='range']:nth-of-type(3)::-webkit-slider-thumb { position: relative; z-index: 2; margin-top: -1.25em; border-width: 0.9375em; padding: 0.1875em; width: 4.5em; height: 4.5em; border-radius: 1.1875em; box-shadow: inset 0 -1px #5f8323, inset -1px 0 #5f8323; opacity: .65; background: -webkit-radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat content-box, -webkit-radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat 100% 0 content-box, -webkit-linear-gradient(0deg, rgba(0, 0, 0, 0) 0.125em, #5a8a10 0.125em, #5a8a10 2.125em, rgba(0, 0, 0, 0) 2.125em) no-repeat content-box, -webkit-repeating-linear-gradient(0deg, rgba(74, 110, 16, 0), #4a6e10 1px, rgba(74, 110, 16, 0) 2px, rgba(74, 110, 16, 0) 0.25em) no-repeat 50% 100% content-box, -webkit-linear-gradient(#9ece53, #77a330) padding-box; background: radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat content-box, radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat 100% 0 content-box, linear-gradient(90deg, rgba(0, 0, 0, 0) 0.125em, #5a8a10 0.125em, #5a8a10 2.125em, rgba(0, 0, 0, 0) 2.125em) no-repeat content-box, repeating-linear-gradient(90deg, rgba(74, 110, 16, 0), #4a6e10 1px, rgba(74, 110, 16, 0) 2px, rgba(74, 110, 16, 0) 0.25em) no-repeat 50% 100% content-box, linear-gradient(#9ece53, #77a330) padding-box; background-size: 0.25em 0.25em, 0.25em 0.25em, 100% 0.25em, 0.625em 0.25em, 100%; } .js input[type='range']:nth-of-type(3)::-webkit-slider-thumb { opacity: .99; } input[type='range']:nth-of-type(3)::-moz-range-thumb { border-width: 0.9375em; padding: 0.1875em; width: 4.5em; height: 4.5em; border-radius: 1.1875em; box-shadow: inset 0 -1px #5f8323, inset -1px 0 #5f8323; opacity: .65; background: radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat content-box, radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat 100% 0 content-box, linear-gradient(90deg, rgba(0, 0, 0, 0) 0.125em, #5a8a10 0.125em, #5a8a10 2.125em, rgba(0, 0, 0, 0) 2.125em) no-repeat content-box, repeating-linear-gradient(90deg, rgba(74, 110, 16, 0), #4a6e10 1px, rgba(74, 110, 16, 0) 2px, rgba(74, 110, 16, 0) 0.25em) no-repeat 50% 100% content-box, linear-gradient(#9ece53, #77a330) padding-box; background-size: 0.25em 0.25em, 0.25em 0.25em, 100% 0.25em, 0.625em 0.25em, 100%; } .js input[type='range']:nth-of-type(3)::-moz-range-thumb { opacity: .99; } input[type='range']:nth-of-type(3)::-ms-thumb { border-width: 0.9375em; padding: 0.1875em; width: 4.5em; height: 4.5em; border-radius: 1.1875em; box-shadow: inset 0 -1px #5f8323, inset -1px 0 #5f8323; opacity: .65; background: radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat content-box, radial-gradient(circle, #5a8a10 69%, rgba(90, 138, 16, 0) 71%) no-repeat 100% 0 content-box, linear-gradient(90deg, rgba(0, 0, 0, 0) 0.125em, #5a8a10 0.125em, #5a8a10 2.125em, rgba(0, 0, 0, 0) 2.125em) no-repeat content-box, repeating-linear-gradient(90deg, rgba(74, 110, 16, 0), #4a6e10 1px, rgba(74, 110, 16, 0) 2px, rgba(74, 110, 16, 0) 0.25em) no-repeat 50% 100% content-box, linear-gradient(#9ece53, #77a330) padding-box; background-size: 0.25em 0.25em, 0.25em 0.25em, 100% 0.25em, 0.625em 0.25em, 100%; } .js input[type='range']:nth-of-type(3)::-ms-thumb { opacity: .99; } input[type='range']:nth-of-type(3)::-webkit-slider-thumb:after, input[type='range']:nth-of-type(3) /deep/ #thumb:after { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); color: #e7f5ce; font: 0.85em trebuchet ms, verdana, arial, sans-serif; } .js input[type='range']:nth-of-type(3)::-webkit-slider-thumb:after, .js input[type='range']:nth-of-type(3) /deep/ #thumb:after { content: "25%"; } input[type='range']:nth-of-type(4) { width: 22.75em; height: 5.25em; background: -webkit-radial-gradient(rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.35) 40%, rgba(0, 0, 0, 0) 70%) no-repeat 50% 3.3125em; background: radial-gradient(rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.35) 40%, rgba(0, 0, 0, 0) 70%) no-repeat 50% 3.3125em; background-size: 90% 1.25em; /* ------- the track ------- */ /* ------- the fill ------- */ /* ------- the thumb ------- */ /* ------- the tip ------- */ } input[type='range']:nth-of-type(4)::-webkit-slider-runnable-track { box-sizing: border-box; border: solid 1em transparent; width: 22.75em; height: 2.625em; border-radius: 1.3125em; border-width: 1em 0.5em; box-shadow: 0 1.1875em 0.25em -1.25em #000; background: -webkit-radial-gradient(at 100% 50%, rgba(113, 69, 5, 0) 65%, #714505 71%) no-repeat border-box, -webkit-linear-gradient(0deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 0 border-box, -webkit-linear-gradient(0deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 100% border-box, -webkit-linear-gradient(#714505, #a0640e 0.125em) border-box; background: radial-gradient(at 100% 50%, rgba(113, 69, 5, 0) 65%, #714505 71%) no-repeat border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 0 border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 100% border-box, linear-gradient(#714505, #a0640e 0.125em) border-box; background-size: 1.3125em 2.75em, 3em 0.625em, 3em 0.625em, 100%; } input[type='range']:nth-of-type(4)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(4)::-webkit-slider-runnable-track:after, input[type='range']:nth-of-type(4) /deep/ #track:before, input[type='range']:nth-of-type(4) /deep/ #track:after { top: 0; left: 0.5em; width: 20.75em; height: 0.625em; content: ''; } input[type='range']:nth-of-type(4)::-webkit-slider-runnable-track:before, input[type='range']:nth-of-type(4) /deep/ #track:before { border-radius: 0.625em; box-shadow: inset 1px 1px 0.125em #553117; background: -webkit-linear-gradient(#70421e, #70421e) padding-box; background: linear-gradient(#70421e, #70421e) padding-box; } input[type='range']:nth-of-type(4)::-moz-range-track { box-sizing: border-box; border: solid 1em transparent; width: 22.75em; height: 2.625em; border-radius: 1.3125em; box-shadow: 0 1.1875em 0.25em -1.25em #000, inset 1px 1px 0.125em #553117; background: linear-gradient(#70421e, #70421e) padding-box, radial-gradient(at 100% 50%, rgba(113, 69, 5, 0) 65%, #714505 71%) no-repeat border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 0 border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 100% border-box, linear-gradient(#714505, #a0640e 0.125em) border-box; background-size: 100%, 1.3125em 2.75em, 3em 0.625em, 3em 0.625em, 100%; } input[type='range']:nth-of-type(4)::-ms-track { box-sizing: border-box; border: solid 1em transparent; width: 22.75em; height: 2.625em; border-radius: 1.3125em; box-shadow: 0 1.1875em 0.25em -1.25em #000, inset 1px 1px 0.125em #553117; background: linear-gradient(#70421e, #70421e) padding-box, radial-gradient(at 100% 50%, rgba(113, 69, 5, 0) 65%, #714505 71%) no-repeat border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 0 border-box, linear-gradient(90deg, #8a5509 1px, rgba(0, 0, 0, 0) 1px) repeat-x 2.375em 100% border-box, linear-gradient(#714505, #a0640e 0.125em) border-box; background-size: 100%, 1.3125em 2.75em, 3em 0.625em, 3em 0.625em, 100%; } .js input[type='range']:nth-of-type(4)::-webkit-slider-runnable-track:after, .js input[type='range']:nth-of-type(4) /deep/ #track:after { width: 87%; border-radius: 0.625em; background: -webkit-linear-gradient(90deg, #374900 1px, #9fb634 1px, #d2e57e); background: linear-gradient(0deg, #374900 1px, #9fb634 1px, #d2e57e); -webkit-transform-origin: 0 50%; transform-origin: 0 50%; -webkit-transform: scaleX(0.95181); transform: scaleX(0.95181); content: ''; } input[type='range']:nth-of-type(4)::-moz-range-progress { border-radius: 0.625em; background: linear-gradient(0deg, #374900 1px, #9fb634 1px, #d2e57e); height: 0.625em; border-radius: 0.34262em / 0.3125em; transform-origin: 0 50%; transform: translate(1em) scale(0.91209); } input[type='range']:nth-of-type(4)::-ms-fill-lower { border-radius: 0.625em; background: linear-gradient(0deg, #374900 1px, #9fb634 1px, #d2e57e); } input[type='range']:nth-of-type(4)::-webkit-slider-thumb { position: relative; z-index: 2; margin-top: -0.1875em; width: 1em; height: 1em; padding: 0.33333em; background: -webkit-radial-gradient(at 65% 65%, #c1c1c1, #868887 70%) content-box, -webkit-linear-gradient(#ffffff, #e1dad4) padding-box; background: radial-gradient(at 65% 65%, #c1c1c1, #868887 70%) content-box, linear-gradient(#ffffff, #e1dad4) padding-box; -webkit-filter: drop-shadow(1px 1px 0.125em rgba(0, 0, 0, 0.5)); filter: drop-shadow(1px 1px 0.125em rgba(0, 0, 0, 0.5)); } input[type='range']:nth-of-type(4)::-moz-range-thumb { border-width: 0.5em; width: 2em; height: 2em; padding: 0.33333em; background: radial-gradient(at 65% 65%, #c1c1c1, #868887 70%) content-box, linear-gradient(#ffffff, #e1dad4) padding-box; filter: drop-shadow(1px 1px 0.125em rgba(0, 0, 0, 0.5)); } input[type='range']:nth-of-type(4)::-ms-thumb { border-width: 0.5em; width: 2em; height: 2em; padding: 0.33333em; background: radial-gradient(at 65% 65%, #c1c1c1, #868887 70%) content-box, linear-gradient(#ffffff, #e1dad4) padding-box; filter: drop-shadow(1px 1px 0.125em rgba(0, 0, 0, 0.5)); } input[type='range']:nth-of-type(4)::-ms-tooltip { display: none; } input[type='range']:focus { outline: none; opacity: .99; } input[type='range']:not(*:root):first-of-type { background-position: 1.5em calc(50% - 0.5em), 0 0, 0 0; } </style>下次小米logo那就筹备拿钱吧。不必感激我。我是雷锋 ...

April 21, 2021 · 14 min · jiezi

关于前端:深入解析-CSS-选择器

这是第 97 篇不掺水的原创,想获取更多原创好文,请搜寻公众号关注咱们吧~ 本文首发于政采云前端博客:深刻解析 CSS 选择器一、前言 CSS 选择器对 HTML 页面中的元素实现一对一,一对多或者多对一的管制,从而给指定元素增加款式。同时还要思考一个元素被赋予多个款式时如何失效的问题,这个就和选择器优先级相干了。 优先级是基于不同品种选择器组成的匹配规定。浏览器通过优先级来判断哪些款式与一个元素最为相干,从而在该元素上利用这些款式。 二、CSS 选择器的分类 三、不同品种选择器的用法 接下来咱们看一看根本选择器之外的其余选择器。 属性选择器(通过曾经存在的属性名或属性值匹配元素) <style>    div {  margin-top: 20px;}    /* 带有属性 title 的元素 */    [title]{  background: #faf3e0; }    /* 带有属性 class 且值为 div1 的元素 */    [class=div1]{ background: #eabf9f;  }    /* 带有属性 attr 并且该属性是一个以空格作为分隔的值列表,其中至多有一个值为 attr-test2 的元素 */    [attr~=attr-test2]{  background: #b68973; }    /* 带有属性 attr 且值以 te 为结尾的元素 */    [attr^=te]{ background: #f39189; }    /* 带有属性 attr 且值以 Test 为结尾的元素 */    [attr$=Test]{ background: #bb8082; }    /* 带有属性 attr 且值蕴含 test3 的元素 */    [attr*=test3]{ background: #6e7582; }    /* 带有属性 attr 且值为 attr1 或以 attr1- 结尾 */    [attr|=attr1]{ background: #046582; }    /* 属性选择器默认辨别大小写,在属性选择器的右方括号前增加一个用空格隔开的字母 i(或 I),可疏忽大小写 */    [attr*=test5 i]{ background: #865858; }</style><body>  <div title='helloWorld'>[title]</div>  <div class="div1">[class=div1]</div>  <div attr='attr-test1 attr-test2'>[attr~=attr-test2]</div>  <div attr='test'>[attr^=te]</div>  <div attr='attrTest'>[attr$=Test]</div>  <div attr='attr-test3'>[attr*=test3]</div>  <div attr='attr1-test4'>[attr|=attr1]</div>  <div attr='attr-Test5'>attr*=test5 i</div></body> ...

April 21, 2021 · 6 min · jiezi

关于前端:positionsticky-粘性定位的几种巧妙应用

背景:position:sticky 又称为粘性定位,粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。元素依据失常文档流进行定位,而后绝对它的最近滚动先人(nearest scrolling ancestor)和 containing block (最近块级先人 nearest block-level ancestor),包含table-related 元素,基于 top, right, bottom, 和 left的值进行偏移。粘性定位能够被认为是绝对定位和固定定位的混合。元素在逾越特定阈值前为绝对定位,之后为固定定位。例如: #one { position: sticky; top: 10px; }设置了以上款式的元素,在 viewport 视口滚动到元素 top 间隔小于 10px 之前,元素为绝对定位。之后,元素将固定在与顶部间隔 10px 的地位,直到 viewport 视口回滚到阈值以下。 留神: 元素定位体现为在逾越特定阈值前为绝对定位,之后为固定定位。须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位失效。否则其行为与绝对定位雷同。偏移值不会影响任何其余元素的地位。该值总是创立一个新的层叠上下文(stacking context)。一个 sticky元素 会 固定 在离它最近的一个领有 滚动机制 的先人上(当该先人的 overflow 是 hidden, scroll, auto, 或 overlay时),即使这个先人不是最近的实在可滚动先人。利用示例1. 根底:头部固定头部导航栏开始时绝对定位顶部,当页面元素产生滚动时,变为和 fixed 相似的固定定位。 <main class="main-container"> <header class="main-header">HEADER</header> <div class="main-content">MAIN CONTENT</div> <footer class="main-footer">FOOTER</footer></main>.main-container { max-width: 500px; height: 500px; margin: 0 auto; margin-top: 40px; overflow: auto;}.main-container *+* { margin-top: 20px;}.main-header { height: 50px;}.main-content { min-height: 600px;}.main-header { position: -webkit-sticky; position: sticky; top: 0;}2. 根底:页脚固定页脚固定成果,开始时也较为固定定位成果,当页面滚动超过页脚时,页脚定位成果变为绝对定位成果,可用于显示一些底部信息或广告。 ...

April 20, 2021 · 9 min · jiezi

关于html:霓虹灯特效

代码来自头条号"前 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ padding: 0; margin: 0; box-sizing: border-box; } body{ display: flex; align-items: center; justify-content: center; min-height: 100vh; background-color: #07252d; } h2{ font-size: 6em; letter-spacing: 5px; color: #0e3742; text-transform: uppercase; text-align: center; -webkit-box-reflect: below 1px line-gradient(transparent, #0008); line-height: 0.7em; outline: none; animation: light 5s linear infinite; } @keyframes light { 0%, 18%, 30%, 50%, 70%, 90%{ color: #0e3742 } 18.1%, 30.1%, 50.1%, 90.1%,100%{ color: #fff; text-shadow: 0 0 10px #03bcf4, 0 0 20px #03bcf4, 0 0 40px #03bcf4, 0 0 80px #03bcf4, 0 0 160px #03bcf4; } } </style></head><body> <h2 contenteditable="true">text</h2></body></html>

April 19, 2021 · 1 min · jiezi

关于css:overflow-clip

大家都晓得overflow之前有几个属性:visible、hidden、scroll、auto。这几个属性就不详解了。而最近Chrome 刚公布的90版本中,又反对了一个新的值clip,以及配合它应用的overflow-clip-margin属性。 来看看overflow: clip的意思: Like for hidden, the content is clipped to the element's padding box. The difference between clip and hidden is that the clip keyword also forbids all scrolling, including programmatic scrolling. The box is not a scroll container, and does not start a new formatting context. If you wish to start a new formatting context, you can use display: flow-root to do so.overflow-clip-margin的意思 :The overflow-clip-margin CSS property determines how far outside its bounds an element with overflow: clip may be painted before being clipped.好简单。先来看个简略的例子吧。 ...

April 19, 2021 · 2 min · jiezi

关于css:深入浅出-CSS-Modules

CSS Modules 是什么?官网文档的介绍如下: A CSS Modules is a CSS file in which all class names and animation names are scoped locally by default.所有的类名和动画名称默认都有各自的作用域的 CSS 文件。CSS Modules 并不是 CSS 官网的规范,也不是浏览器的个性,而是应用一些构建工具,比方 webpack,对 CSS 类名和选择器限定作用域的一种形式(相似命名空间) 本文来介绍一下 CSS Modules 的简略应用,以及 CSS Modules 的实现原理(CSS-loader 中的实现) CSS Modules 的简略应用我的项目搭建以及配置新建一个我的项目,本文的 Demo npx create-react-app learn-css-modules-reactcd learn-css-modules-react# 显示 webpack 的配置yarn eject看到 config/webpack.config.js,默认状况下,React 脚手架搭建进去的我的项目,只有 .module.css 反对模块化,如果是本人搭建的话,能够反对 .css 文件的后缀等 // Adds support for CSS Modules (https://github.com/css-modules/css-modules)// using the extension .module.css{ test: cssModuleRegex, use: getStyleLoaders({ importLoaders: 1, sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment, modules: { getLocalIdent: getCSSModuleLocalIdent, }, }),}其中 getStyleLoaders 函数,能够看到 css-loader 的配置 ...

April 19, 2021 · 4 min · jiezi

关于隐藏:前端面试300问之4页面元素隐藏的10种方式

(前端)面试300问之(4)页面元素暗藏的10种形式一 问题1 如何将页面上的元素进行暗藏?2 问题剖析1)所谓暗藏,就是让用户不可见该页面元素即可。2)没有限度任何的形式,所以咱们需发散思维、从各个角度对该问题提出不同的解法。3)咱们能够从几何空间、视觉(色彩)、visibility、display,大抵可分为3大类、10小类,对应的思维导图如下: 二 具体解法0 前言1)以下所有解法的 CSS款式 + DOM构造 均如下:.main { width: 500px; background-color: lightskyblue;}<div class="main"> <div class="visible">失常显示的元素,by 码农三少</div> <div class="hidden">被暗藏的元素,by 码农三少</div></div>1 几何空间1)子的width、height同时设为0,父亲设overflow: hidden.main { // 很外围、很要害!! overflow: hidden;}.hidden { // 其实这里只有将 height:0 即可 width: 0; height: 0;}成果如下: 2)子transform: scale(0).hidden { transform: scale(0);}成果如下: 3)子scale:0 [存在IE兼容性问题].hidden { clip-path: circle(0); }成果如下: 2 地位挪动1)子定位,如 position: fixed、absolute 等.hidden { position: fixed; top: -10000px;}或.main { position: relative;}.hidden { position: absolute; top: -10000px;}成果如下(2种形式成果均统一~): 2)子z-index设为正数[需联合position应用,只是“在父区域不可见”!].hidden { position: fixed; z-index: -100000;}成果如下: ...

April 17, 2021 · 1 min · jiezi

关于css:三列布局圣杯与双飞翼

圣杯布局 <!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> \* { padding: 0; margin: 0; } .container { padding-left: 200px; padding-right: 200px; } .left { float: left; width: 200px; height: 400px; background: red; margin-left: -100%; position: relative; left: -200px; } .center { float: left; width: 100%; height: 400px; background: yellow; } .right { float: left; width: 200px; height: 400px; background: blue; margin-left: -200px; position: relative; right: -200px; }</style></head><body><section class="container"> <div class="center"></div> <div class="left"></div> <div class="right"></div></section></body></html>步骤先写center局部,width 100% ...

April 17, 2021 · 1 min · jiezi

关于css:CSS-3-实现-HTML-中的加载动画

这是第二个 CSS 3 实现的加载中动画: 这是互联网上比拟常见的一种加载动画,我在很多软件应用中都见过,具体设计来源不明。实现原理和第一个动画相似,把整个动画拆分成多个线条块程度搁置在一起,而后自左向右地顺次执行高低拉伸变换,通过有限反复就失去了最终的成果,上面是代码: <body> <style> body { background: #999999; } .DIV_loadingAnimation2 { position: fixed; height: 50px; font-size: 0; } .DIV_loadingAnimation2 div { width: 10px; height: 50px; background: white; display: inline-block; margin: 0 1px 0 0; transform: scaleY(.5); } .DIV_loadingAnimation2 div:nth-child(1) { animation: loadingAnimation2 1.5s linear infinite; } .DIV_loadingAnimation2 div:nth-child(2) { animation: loadingAnimation2 1.5s linear infinite .125s; } .DIV_loadingAnimation2 div:nth-child(3) { animation: loadingAnimation2 1.5s linear infinite .25s; } .DIV_loadingAnimation2 div:nth-child(4) { animation: loadingAnimation2 1.5s linear infinite .375s; } .DIV_loadingAnimation2 div:nth-child(5) { animation: loadingAnimation2 1.5s linear infinite .5s; } .DIV_loadingAnimation2 div:nth-child(6) { animation: loadingAnimation2 1.5s linear infinite .625s; } .DIV_loadingAnimation2 div:nth-child(7) { animation: loadingAnimation2 1.5s linear infinite .75s; } .DIV_loadingAnimation2 div:nth-child(8) { animation: loadingAnimation2 1.5s linear infinite .875s; } @keyframes loadingAnimation2 { 0% { transform: scaleY(.5); } 20% { transform: scaleY(1); } 40% { transform: scaleY(.5); } } </style> <div class="DIV_loadingAnimation2"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div></body>

April 16, 2021 · 1 min · jiezi

关于javascript:Javascript-实现多列瀑布流布局

在做这种实现之前我钻研过其它的实现形式,比方 CSS 3 的 column,这种形式出现的多列有许多的问题,像是列宽度如果不够凑满容器时会均匀距离于其它列,就有些像字符间距一样;尽管当初的浏览器都曾经基本上兼容了这种实现,然而在某些组合其它成果应用的场景中会存在一些意料之外的问题,比方在 Internet Explorer 中动静向列中增加元素时,如果提前利用了这个新增加元素的 CSS 3 动画会导致闪动和隐没的问题;本来列内容的最终排序形式始终凑满一列而后自左向右的靠,也就是首先自上而下排列,而后再是自左向右,比方最右边的列是 1、2、3,向右一列是 4、5、6,这在动静增加新内容时看上去并不谐和。所以我本人换了一种形式实现,上面是动静效果图: 我的实现逻辑并不算简单,依据上一列的最小高度内容确定下一列的新内容搁置的地位,自左向右选一个最合适的地位;也就是每一个内容在增加到容器之前都会依据上一排的内容大小抉择适合的地位,计算过地位后再搁置到容器中。下面的效果图来自我写的一个例子: <!doctype html><style> table { display: inline-block; vertical-align: top; border-collapse: collapse; float: left; } td { padding: 5px; } #container { border: 1px solid gray; position: absolute; padding: 5px; padding-bottom: 25px; width: 80%; } #load { position: absolute; bottom: 0; width: 100%; height: 20px; left: 0; }</style><body> <div id="container"> <table id="column1" class="columns"></table> <button id="load" type="button" onclick="GetRandomBlocks(8)">load</button> </div> <script> var borderSize = 1; var paddingSize = 5; var width = 150; //计算容器的总宽度以确定可能包容的列数 var containerWidth = parseInt(document.getElementById("container").clientWidth); var columns = parseInt(containerWidth / (width + paddingSize * 2 + borderSize * 2)) - 1; var surplus = containerWidth % (width + paddingSize * 2 + borderSize * 2); var container = document.getElementById("container"); var loadButton = document.getElementById("load"); for (var i = 0; i &lt; columns; i++) { //确定好列数过后向容器内补充新的列 var e_column = document.createElement("table"); e_column.id = "column" + (i + 2); e_column.className = "columns"; container.insertBefore(e_column, loadButton); } container.style.width = containerWidth - surplus + "px"; //补充新的内容 function GetRandomBlocks(size) { for (var i = 0; i &lt; size; i++) { var e_content = document.createElement("div"); e_content.style.border = borderSize + "px solid green"; e_content.style.width = width + "px"; e_content.style.height = GetRandomInt(100, 300) + "px"; e_content.style.fontSize = "30px"; e_content.className = "contents"; e_content.innerText = document.getElementsByClassName("contents").length; var e_td = document.createElement("td"); e_td.appendChild(e_content); var e_tr = document.createElement("tr"); e_tr.appendChild(e_td); //补充之前计算应该在的地位(外围) var columns = document.getElementsByClassName("columns"); var minHeight = parseInt(document.getElementById("column1").clientHeight); var minHeightId = ""; for (var j = columns.length - 1; j &gt;= 0; j--) { var height = parseInt(columns[j].clientHeight); if (height == 0 || height &lt; minHeight) { minHeight = height; minHeightId = columns[j].id; } } //------------------------------------------------------------------------ if (minHeightId) { document.getElementById(minHeightId).appendChild(e_tr); } else { document.getElementById("column1").appendChild(e_tr); } } } //给内容确定随机高度的办法 function GetRandomInt(_start, _end) { var x = _end - _start; var num = Math.random() * x + _start; return parseInt(num, 10); } //开始 GetRandomBlocks(8); </script></body>用 Javascript 计算内容的相对地位,这甚至须要准确到边框的宽度,所以这外面的边框宽度、边距大小和内容大小一样也不能少,列数是依据容器的宽度确定的,当然至多须要有一列,全副的代码也就这些了,增加内容的办法模仿了动静获取内容,其中要留神 HTML 标记格局不要轻易改,我顺便选了用表格来承载。 ...

April 16, 2021 · 2 min · jiezi

关于css:uniapp操作dom改变css样式

在uniapp中,想给元素增加一些动静的css款式,例如transform, uni.createSelectorQuery().select(".sticke").boundingClientRect((res)=>{ uni.createSelectorQuery().select(".sticke").style.transform}).exec()上述代码根本无法实现给元素增加transform,所以有了申明css变量, 在swiper组件中减少缩略图展现,点击某一项,展现到对应的图片 1.重点在data中注册属性transStyle 2.轮播change事件设置transStyle getDetail(e,index){ this.currentIndex = index this.detail = Object.assign(this.detail,e) this.scrollLeft = index*50 this.transStyle = 'translate('+index*-100+'%, 0px)'},3.点击缩略图,敞开自动播放,延时执行 move(e,index){ this.autoplay = false this.currentIndex = index this.detail = Object.assign(this.detail,e) this.scrollLeft = index*50 this.transStyle = 'translate('+index*-100+'%, 0px)' setTimeout(()=>{ this.autoplay = true },5000)}4.找到要扭转的元素,设置css变量 #swiper{.uni-swiper-slide-frame{ transform: var(--transStyle) !important;}}

April 16, 2021 · 1 min · jiezi

关于css:用了很多动效介绍-4个很-Nice-的-Veu-路由过渡动效

作者:Ahmad shaded译者:前端小智起源:sitepoint点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上曾经收录,更多往期高赞文章的分类,也整顿了很多我的文档,和教程材料。欢送Star和欠缺,大家面试能够参照考点温习,心愿咱们一起有点货色。 Vue Router 过渡是向Vue应用程序增加共性的一种疾速简便的办法。 它让咱们能够在应用程序的不同页面之间增加平滑的动画/过渡成果。 如果应用切当,它能够让咱们的应用程序更加古代和业余,从而加强用户体验。 在明天的文章中,咱们介绍应用Vue Router过渡的基础知识,而后再介绍一些根本示例,心愿能给大家一些启发和灵感。 上面咱们要创立的四个过渡页面。 将 Vue 路由过渡增加到我的项目中通常,Vue路由器设置如下所示 // default template<template> <router-view /></template>在旧版本的Vue Router中,咱们能够简略地用<transition>组件包装<router-view>。 然而,在Vue Router的新版本中,咱们必须应用v-slot来解构咱们的 props ,并将它们传递到咱们的外部插槽。这个slow蕴含一个被transition突围的动静组件。 <router-view v-slot="{ Component }"> <transition> <component :is="Component" /> </transition></router-view>每个 Route 都有不同的过渡默认状况下,用<transition>包装<component>将在咱们应用的每条路由上增加雷同的过渡。 有两种不同的办法能够为每个路由定制转场。 将过 transition 移到各个组件局部首先,咱们能够将<transition>移到每个独自的组件中,而不是用<transition>组件来包装咱们的动静组件。 如下: // app.vue<template> <transition> <div class="wrapper"> <!-- --> </div> </transition></template>对于咱们想要每个路由都有一个过渡成果,通过这种形式,咱们能够通过过渡的名称来定制每个路由。 应用 v-bind 的动静过渡另一种办法是将过渡的名称绑定到一个变量。而后,咱们能够依据监听路由动静地扭转这个变量。 <transition :name="transitionName"> <component :is="Component" /></transition>watch: { '$route' (to, from) { const toDepth = to.path.split('/').length const fromDepth = from.path.split('/').length this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' }}当初,咱们理解了Vue Router Transition 的基础知识,上面咱们来看一些 Nice 的示例。 ...

April 16, 2021 · 2 min · jiezi

关于css:干货关于vue3-SFC-范围内-scopedstyles-样式穿透

Vue SFC范畴内的款式使CSS仅实用于以后组件。在很多状况下,用户通常会遇到这种状况能够改良Deep Selectors最后版本的Vue框架,反对 >>> 组合子,以使选择器 “深” 。然而,一些CSS预处理程序(如LESS/SASS)在解析它时遇到了问题,因为这不是一个正式的CSS组合子。 .Modal >>> .ant-select { color:#f00; }起初改用/deep/,它已经是CSS的一个理论增加(甚至是Chrome自带的),但起初不知什么起因被放弃了。/deep/ 仅被Vue的SFC编译器用作编译时提醒来重写选择器,并在最终的CSS中删除。 .Modal /deep/ .ant-select{ color:#f00; }再起初,vue第二版,引入了另一个自定义组合子::v-deep,这一次更明确地示意这是一个特定于vue的扩大,并应用伪元素语法,以便任何预处理程序都可能解析它。 .Modal ::v-deep .ant-select{ color:#f00; }降级到Vue3之后,官网不再反对对>>>和/deep/的反对。进而改为CSS伪元素的组合符,应用 ::v-deep() 的工作形式。 .Modal :v-deep(.ant-select){ color:#f00; }当然,如果你须要显式地针对插槽内容,还能够应用 ::v-sloated() 伪元素。 ::v-deep(.bar) {}编译输入:[v-data-xxxxxxx] .bar {}::v-slotted(.foo) {}编译输入:.foo[v-data-xxxxxxx-s] {}::v-global(.foo) {}编译输入:.foo {}如果对你有所帮忙,请顺手点个赞,Coding不易~❤

April 15, 2021 · 1 min · jiezi

关于前端:一文了解react中定义样式csslesssass的常用方法

react中通过jsx的语法形式,将html标签和js语法分割在一起,而css的编写形式,没有明确的指定编写形式,目前就有很多不同办法,每个形式各有其优缺点,咱们一起来看看罕用的定义形式有哪些。 最根底也是最简略的形式就是如html当中编写款式一样,间接内联应用,区别在于jsx中内联应用款式须要用小驼峰命名,不可应用短横线 -,jsx中编写js的表达式须要应用 {},而定义的款式是以对象的模式存在,也是通过{},所以看起来style标签外面应用了两个大括号{} return(<div style={{color: 'blue'}}>   hello react</div>)这样的形式长处是代码不会抵触,定义的代码都作用于以后元素,而且如果须要动静的获取state的值来设置款式也能够做到。毛病也很显著,当如果款式十分多的时候,即便把款式整体提炼进去,作为一个变量赋值给style,但依然还是和业务逻辑混淆在一起,并且无奈编写伪类等一些语法。 第二种形式可能将css代码与业务逻辑代码拆散开来,在jsx的标签中定义className属性,自定义css的款式文件,再通过import引入css/scss/less等款式文件,就是应用的css的原生编写形式,定义伪类以及其它的高级选择器编写形式都能够反对。 return(<div className="title">   hello react</div>)// 定义在独自的款式文件.title {    color: 'blue'}这样能够让代码比拟清晰明了,css款式和jsx文件分来到。 当须要应用多个className,或者通过状态来变更className时,能够通过+来进行字符串拼接,或者应用数组,再通过toString()转成字符串 const isActive = true<h2 className="active foo bar">我是题目1</h2>       // active foo bar   <h2 className={"foo", (isActive ? "active" : "") }>我是题目2</h2>  // active<h2 className={"foo" + (isActive ? " active" : "") }>我是题目3</h2> // foo, active<h2 className={["foo",(isActive ? "active" : "")]}>我是题目4</h2>  // foo, active<h2 className={["foo",(isActive ? "active" : "")].join(" ")}>我是题目5</h2> // foo avtive为了简便应用,能够间接应用 classnames 这个库来动静的应用类名,classnames默认裸露了一个函数,传入参数的参数能够为字符串、对象和数组,传入null/undefined/boolean值也不会显示在页面上 ...

April 14, 2021 · 2 min · jiezi

关于前端:学习WEB前端是应该自学还是参加培训机构

先说观点,我强烈建议每个人都要自学,不要加入培训班。 我干web前端工程师这个职位曾经有6年多的工夫,之前在蚂蚁金服做过2年,起初来到是因为加班切实熬不住才走的,像这些曾经上市的互联网公司简直没有不加班的,基本上都是996,尽管工资给的是很高,但谁也顶不住总加班没有生存的状态。因为本人在这行业曾经有6年的工作教训,所以对这个行业的状况还是比拟理解的,像在蚂蚁金服、腾讯、百度、美团、饿了么这样的大厂中,你简直找不到哪个程序员是培训班进去的,根本都是自学进去技术很好或者是科班出身的人,因为培训班进去的人根底都十分单薄,都是教训老道的面试官,只有在面试中轻易聊几句,就能够分辨进去你是否是培训班刚进去的,一旦发现是培训班刚进去的,间接面试完结。但自学进去的人不一样,个别自学进去的人工夫都比拟长,通过长期的学习积攒,能够把根底打得很好,每一个步骤把握的都很扎实,并且能保持长期自学下来的人,他们广泛都有很强的意志力和良好的学习能力,所以公司肯定是偏向于这类人。 在咱们这个行业中有一个奇怪的景象,就是很多做Web前端技术的人基本做不到35岁,能保持做10年以上技术的人非常少,根本都是干个三四年就转行去做其余的行业,因为他曾经很长时间没有晋升,技术始终都在原地踏步,大家都晓得咱们这个行业一旦不能持续晋升,就会被起初的人追上最初淘汰。而干到中途就转行的人,能够说99%都是速成培训班进去的,因为他们没有良好的语言根底,平时本人也不被动学习,因为没有养成良好的学习习惯,都认为加入培训班后就能够一劳永逸,当前就不须要学习了,然而在任何一个行业都一样,始终原地踏步不晋升的人,肯定会被他所在的行业淘汰,这是天然的法则。 有人问Web前端当初还能学吗? 齐全不必放心饱和的问题,如果说Java有点饱和这话我是信的,毕竟Java语言曾经20多年的工夫,然而Web前端的概念受到重视的工夫并不长,所以目前各个互联网公司都十分缺好的Web前端技术人才,像字节跳动这样的公司前段时间放出招聘需要,月薪根本都是30K以上的,各种渠道寻求内推人才,然而招人还是很难,各种猎头在各种内推群,想招聘到一个不错的Web前端人才还是比拟难,所以就目前的Web前端市场来看,齐全是能够学习的,而且前端的入门还是比拟容易的,相比Java而言,要更加适宜初学者。 我提倡的学习形式是:本人学习+有人领导 其实作为一个真的想做这行的人,首先他要对技术有一种酷爱,喜爱编程这种货色,学习的急躁和毅力是必须具备的,而后在整个学习过程中,有一个人去领导他,进步他的学习效率,尽量的少走弯路就能够了,剩下的其实都要靠本人去学。有的时候我感觉很可笑,为什么会有那么多的人认为去加入了线下培训班就不是自学了呢?我感觉持有这样想法的人肯定是走不远的,学习这种事件最初都是本人的事,并不是他人能够掌控的。 如果感觉本人在学习过程中有很多困惑,走了太多弯路,遇到一个问题须要好几个小时能力解决,也不晓得应该学到什么水平能力待业,能够随时来问我,我平时工作不忙的时候给大家解答。上面是我建设的一个3000人Web前端开发交流学习群,曾经有5年的工夫,汇集了2000多个前端学习者,心愿大家当前一起提高和守业。这就是WEB前端裙。后面三个输出296,两头三个输出212,前面三个输出562。 给那些其余业余或者行业想学习Web前端做技术的人一些倡议: 1、 略微理解一点的人都晓得,Web前端的技术更新是十分快的,所以咱们在学习的时候肯定要学最新的技术体系。 2、 Web前端并没有特地残缺的内容,因为前端属于一个职位,想要做这个工作都须要学习哪些内容要明确,并不是要把所有的内容学完能力去找工作,常识是学不完的,但它有一些支流的技术是必须把握的,如果是高级的前端开发工作,把次要的技术学好后就能够尝试去找工作,尽量在工作中去学习你能力学到更多。 3、 语言根底才是外围竞争力,无论当前前端开发出多少框架,它们都只是工具而已,而你只须要把握应用工具的技巧就能够,做前端开发的人,学好JavaScript是重中之重,如果你JavaScript学的不好,就不要往下持续学了,没有任何意义。 4、 有机会找大佬带你入门就找大佬带你,本人一个人想要达到待业的程度很低,每个本人摸索的人必然走的是弯路,有的人走完了弯路还能回来,然而大部分人的后果都是因为“积重难返”最初放弃,其实并不是你智商不够,而是因为你对此不理解,齐全是摸着石头过河。 最初给大家总结了一下2021年web前端的学习内容,可能内容过于多,然而从具备竞争力的角度思考,我尽量把大前端全栈工程师要学习的内容都给大家列了进去,依照我这个规范去学,保底待业薪资在15K以上,如果在网上找不到这些学习资源,能够到这个WEB前端裙。后面三个输出296,两头三个输出212,前面三个输出562。 一、HTML/CSS3 局部 前端概念总览、vscode开发工具应用、markdown文档工具应用、浏览器平台环境、标签根底、DTD与META 语义化、选择器、权重与优先级、匹配规定、浮动与革除、BFC、类名组合规定、SEO前端技巧、定位、叠加技巧、 伪类、伪元素、盒子模型、代码标准、性能优化、渲染原理、CSS Sprites 、 iconfont字体图标、布局思路、布局定式 css3动画、 css3选择器、 css3过渡、flex布局、背景突变、css3实用动效、3D模块、css3变量、em/rem/vw 企业外部多页面我的项目实战(非仿站)有残缺PSD与切图 二、JavaScript 局部 JavaScript概念、根底认知、倒退历史、利用范畴、优缺点。 ECMAScript 语言概览、语句语法、数据类型、运算符、隐式转换、运算规定、管制流程、作用域、作用域链、作用域解析、js解释引擎、字符串属性办法、for of/for in 数组属性办法、对象、狭义对象概念、对象个性、存储机制、深拷贝、对象理论利用、工厂模式、构造函数、原型、原型链、原型指向、封装、 多种继承、包装对象、this、this指向、js数据处理、垃圾GC、闭包原理与利用、debug方法论、浏览器控制台工具利用、面向对象开发、函数式开发、 纯函数、递归函数、回调函数、组合函数、缓存函数、柯里化函数、偏函数、函数防抖与节流、高级函数、IIFE函数、模块化、 数学对象、高级数组办法(reduce、filter、map、every、some、forEach、find、findIndex、include)等、 高级对象办法(entires、defineProperty、freeze、fromEntries、assign、keys、create、hasOwnProperty)等 this通过bind、call、apply指向偏移、同步与异步、闭包模块化、数据形变解决、性能解决 DOM/BOM DOM对象与办法、节点与遍历树、DOM选择器、DOM节点增删改查、DOM款式操作、DOM地位获取与偏移、DOM对象与标签区别、DOM虚拟化、DOM事件、 Event对象、定时器与监听器、事件委托、事件代理、事件分流、事件冒泡、默认行为、事件捕捉、防抖、节流、滚动、键盘行为、事件降频、行为锁机制、 拖拽模组、碰撞检测、间隔判断、三角函数、方向判断、静止框架、弹性静止、重力加速度、DOM树、CSSOM树、渲染解析、加载、回流、重绘、浏览器线程与阻塞。 BOM深刻、window对象、navigator、history、screen、location、spa概念、本地传参、日期对象应用、日期格式化封装、随机封装、DOM分片容器 JS业务利用扩大 JSON对象、数据解析、JSON办法、模板渲染、缓存懒加载、正则表达式RegExp、元字符、修饰符、正向预查、贪心模式、replace办法、分组与不分组、test、match与exec 正则库封装、表单校验、图片预存懒加载、自定义封装滚动组件、多重轮播(循环、视差、旋转木马)、选项卡切换、楼梯导航、吸顶导航、拖拽导航 、 JavaScript编码格调指南、console利用技巧 ECMAScript5 --- ECMAScript9扩大 版本解读、应用环境、let、const、解构赋值、箭头函数、对象解构、reset参数解构、class、set、get、extends、super、static、private实现、symbol、promise、proxy代理拦挡、async/await 对象新增API、数组新增API、字符串新增API、原型属性、对象润饰、代理拦挡、链式询问、空值合并运算符、泡泡龙面向对象游戏开发 三、HTML5 / 挪动端开发 局部 HTML5标签与API HTML5概念、定义、新增个性、DTD比照、新增H5标签、新增语义化H5标签、H5表单 H5拖拽事件 video、audio、fullScreen、FileReader文件流、Blob对象、sessionStorage、localStorage、 网络状态、页面生命周期、网页状态监听、地理信息与定位、canvas画布、worker多线程、Notifications桌面告诉 播放器开发 canvas交互特效开发 挪动端适配/事件 ...

April 14, 2021 · 1 min · jiezi

关于css:如何用纯-CSS-实现酷炫的霓虹灯效果

最近关注了油管上的 CSS Animation Effects Tutorial 系列,外面介绍了十分多有意思的 CSS 动效。其中第一个就是很酷炫的霓虹灯成果,这里就实现思路做一个简略的记录和分享。这是要实现的成果: 能够看到,在鼠标移入按钮的时候,会产生相似霓虹灯光的成果;在鼠标移出按钮的时候,会有一束光沿着固定的轨迹(按钮外围)静止。 霓虹灯光的实现霓虹灯光的实现比较简单,用多重暗影来做即可。咱们给按钮加三层暗影,从内到外每层暗影的含糊半径递增,这样的多个暗影叠加在一起,就能够造成一个相似霓虹灯光的成果。这段的代码如下: HTML: <div class="light"> Neon Button </div>CSS: body { background: #050901; }.light { width: fit-content; padding: 25px 30px; color: #03e9f4; font-size: 24px; text-transform: uppercase; transition: 0.5s; letter-spacing: 4px; cursor: pointer;}.light:hover { background-color: #03e9f4; color: #050801; box-shadow: 0 0 5px #03e9f4, 0 0 25px #03e9f4, 0 0 50px #03e9f4, 0 0 200px #03e9f4;}最终的成果如下: 静止光束的实现尽管看起来只有一个光束沿着按钮的边缘运动,但实际上这是四个光束沿着不同方向静止之后叠加的成果。它们静止的方向别离是:从左往右、从上往下、从右往左、从下往上,如下图所示: 在这个过程中,光束和光束之间产生了交加,如果只看按钮的边缘局部,就很像是只有一个光束在做顺时针方向的静止。 上面是具体实现中几个须要留神的点: 四个光束别离对应 div.light 的四个子 div,初始地位别离是在按钮的最左侧、最上方、最右侧和最下方,并依照固定的方向做反复的静止每个光束的高度或宽度都很小(只有 2px),并且都有一个从通明色到霓虹色的突变,因而表面会有一个收束的成果(即看上去不是一条残缺的线条)为了确保咱们看到的是一个顺时针方向的静止,四个光束的静止实际上是有序的,首先是按钮上方的光束开始静止,在一段时间后,右侧的光束静止,在一段时间后,下方的光束静止,在一段时间后,左侧的光束静止。光束和光束之间的静止有一个提早,以上方和右侧的光束为例,如果它们同时开始静止,因为右侧的静止间隔小于上方的静止间隔,就会导致这两个光束错过相交的机会,咱们看到的就会是断开的、不连贯的光束。既然右侧光束的静止间隔比拟短,为了让上方光束能够“追上”它,咱们就得让右侧光束“提早登程”,因而要给它一个动画提早;同理,残余两个光束也要有一个动画提早。多个动画提早之间大略相差 0.25 秒即可。只须要显示按钮边缘的光束就够了,因而给 div.light 设置一个溢出暗藏代码如下: ...

April 14, 2021 · 2 min · jiezi

关于css:动画1

transition 过渡 transform 2D,3D 挪动盒子的地位: 定位 盒子的外边距 2d转换挪动 一、2D 转换(transform) 是CSS3中具备颠覆性的特色之一,能够实现元素的位移,旋转,缩放等成果 旋转:rotate挪动:translate 缩放:scale 1.挪动:translate(可跟px,%)(对行内元素是有效的比方span) %是盒子本身的宽高度 语法: transform:translate(x,y);合在一起写(上面是离开写) transform:translateX(n); transform:translateY(n); 2.旋转rotateo 语法: transform:rotate(度数(deg)); 重点 1.rotate外面跟度数,单位deg比方rotate(45deg) 2.角度为正时,顺时针,负时,为逆时针 3.默认旋转的中心点是元素的中心点 2.1.设置转换中心点transform-origin 语法: transform-origin:(x,y) 重点: 1.留神前面的参数x和y用空格隔开 2.x y默认转换的中心点是元素的中心点(50% 50%) 3.还能够给x y 设置像素或者方位名词(top bottom left right center) 3.缩放:scale 语法: transform:scale(x,y); 留神: 1.留神其中的x和y用逗号分隔 2.transform:acale(1,1):宽和高都放大一倍,绝对于没有放大 3.transform:acale(2,2):宽和高都放大了2倍 4.transform:acale(2):只写了一个参数,第二个参数则和第一个参数一样,相当于scale(2,2) 5.transform:acale(0.5,0.5):放大 6.scale缩放最大的劣势:能够设置转换中心点缩放,默认以中心点缩放的,而且不影响其余盒子 综合写法 位移要放在最后面 transform:translate(10px,10px) rotate(180deg) scale(1.2) ; 动画animation 制作动画应用步骤 一.先定义动画 二.在应用(调用)动画 1.先定义动画-应用keyframes定义动画(相似定义类选择器) @keyframes 动画名称{ 0%{} 100%{} } 动画序列: 1.0%是动画的开始,100%是动画的完结,这样的规定就是动画序列 2.在@keyframes中规定某项css款式,就能创立由以后款式逐步改为新款式的动画成果 3.动画是使元素从一种款式逐步变动为另一种款式的成果,您能够扭转任意多的款式任意多的次数 4.请用百分比来规定变动产生的工夫,或用关键词"form"和"to",等同于0%和100% 二.在应用(调用)动画 div{ width:150px; height:150px; background-color: pink; 调用动画 animation-name:动画名称; 持续时间 animation-auration:持续时间; } div{ width:150px; height:150px; background-color: pink; /*动画名称 */ animation-name:mycartoon; /*持续时间*/ animation-duration: 3s; /*静止曲线 linear匀速*/ animation-timing-function: ease-in-out; /*何时开始(1秒后开始)*/ animation-delay: 1s; /*反复次数 iteration反复的 conut 次数 infinite有限*/ /*animation-iteration-count: infinite;*/ /*是否反方向播放 默认normal 如果想要反方向就写alternate*/ /*animation-direction:alternate; */ /*动画完结后的状态,默认是backwards,回到起始状态,咱们能够让他停留在完结状态forwards*/ animation-fill-mode: forwards; } div:hover{ /*鼠标通过div让这个div进行动画,鼠标来到就持续动画 */ animation-play-state:paused; } animation简写 animation:动画名称 持续时间 静止曲线 何时开始 播放次数 是否反方向 动画起始或者借完结状态 步数 animation:mycartoon 3s linear 0s infinite alternate forwards steps() ; 1.简写属性外面不蕴含animation-play-state 2.暂停动画:animation-play-state:paused; 常常和鼠标通过等其余配合应用 3.想要动画走回来,而不是间接跳回来animation-direction:alternate; 4.盒子动画完结后,停在完结地位:animation-fill-mode: forwards; 速度曲线 animation-timing-function:规定动画的速度曲线,默认是ease 值 形容 linear 动画从头到尾的速度是雷同的,匀速 ease 默认,动画以低速开始,而后放慢,在完结前变慢 ease-in 动画以低速开始 ease-out 动画以低速完结 ease-in-out 动画以低速开始和完结 steps() 指定了工夫函数中的时隔数量(步长)

April 13, 2021 · 1 min · jiezi

关于css:四种三角的实现方式

(以下是在培训当中的一个小作业,办法多多,这是我本人写的其中之一办法) 1.正三角加边框<div class="tiangle1"></div>.tiangle1{ width:0; height:0; border-width:0 50px 50px; border-color: transparent transparent red; border-style: solid;} 2.带有边框的三角实现形式 <div class="tiangle2"></div> .tiangle2{ width:0; height:0; border-width:0 50px 50px; border-color: transparent transparent black; border-style: solid; margin-top:40px; position: relative }.tiangle2::after{ position: absolute; content: ""; top:3px; left:-45px; width:0; height:0; border-width:0 45px 45px; border-color: transparent transparent yellow; border-style: solid; } 3.下角标实现形式<div class="tiangle3"></div> .tiangle3{ width:60px; height:60px; border-right:1px solid #000; border-bottom:1px solid #000; transform: rotate(-133deg); margin: 40px; } 4.直角三角的实现形式 <div class="tiangle4"></div> .tiangle4{ width:0; height:0; border-width:0 50px 50px; border-color: transparent transparent pink; border-style: solid; transform: rotate(-133deg) } ...

April 13, 2021 · 1 min · jiezi

关于javascript:分享一个提升-Loading-体验的小工具

明天看到一个不错的动画网站:https://lottiefiles.com/ 能够本人编辑生成动画,并且能非常不便的引入到你的我的项目中。 比方上图的猫咪动画: import Lottie from "react-lottie";import * as catData from "./cat.json";const defaultOptions = { loop: true, autoplay: true, animationData: catData.default, rendererSettings: { preserveAspectRatio: "xMidYMid slice" }};//...<Lottie options={defaultOptions} height={120} width={120} />借用这个能力, 咱们能够让loading成果更有趣味: 网站中还有大量的素材能够收费应用: 感兴趣的能够去看一下。

April 13, 2021 · 1 min · jiezi

关于javascript:js中的instanceof运算符

概述instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法obj instanceofObject;//true 实例obj在不在Object构造函数中 形容instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。 实例1.instanceof的一般的用法,obj instanceof Object 检测Object.prototype是否存在于参数obj的原型链上。Person的原型在p的原型链中 functionPerson(){};var p =new Person();console.log(p instanceof Person);//true2.继承中判断实例是否属于它的父类Student和Person都在s的原型链中 functionPerson(){};functionStudent(){};var p =new Person();Student.prototype=p;//继承原型var s=new Student();console.log(s instanceof Student);//trueconsole.log(s instanceof Person);//true3.简单用法这里的案例要有纯熟的原型链的意识能力了解 function Person() {}console.log(Object instanceof Object); //true//第一个Object的原型链:Object=>//Object.__proto__ => Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Object的原型:Object=> Object.prototypeconsole.log(Function instanceof Function); //true//第一个Function的原型链:Function=>Function.__proto__ => Function.prototype//第二个Function的原型:Function=>Function.prototypeconsole.log(Function instanceof Object); //true//Function=>//Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//Object => Object.prototypeconsole.log(Person instanceof Function); //true//Person=>Person.__proto__=>Function.prototype//Function=>Function.prototypeconsole.log(String instanceof String); //false//第一个String的原型链:String=>//String.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个String的原型链:String=>String.prototypeconsole.log(Boolean instanceof Boolean); //false//第一个Boolean的原型链:Boolean=>//Boolean.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Boolean的原型链:Boolean=>Boolean.prototypeconsole.log(Person instanceof Person); //false//第一个Person的原型链:Person=>//Person.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype//第二个Person的原型链:Person=>Person.prototype总结对应上述标准做个函数模仿A instanceof B: function_instanceof(A, B){ var O = B.prototype;// 取B的显示原型 A = A.__proto__;// 取A的隐式原型while (true) { //Object.prototype.__proto__ === nullif (A === null) returnfalse; if (O === A)// 这里重点:当 O 严格等于 A 时,返回 truereturntrue; A = A.__proto__; }}

April 12, 2021 · 1 min · jiezi

关于前端:面试官的一句话点破了我三年的前端经验只相当于人家一年的经验

前言那一天我二十一岁,在我毕生的黄金时代。我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。起初我才晓得,生存就是个迟缓受锤的过程,人一天天老上来,奢望也一天天隐没,最初变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我感觉本人会永远生猛上来,什么也锤不了我。   ——王小波《黄金时代》最近和一位老友见面聊天,离开后久久不能释怀,对于他产生的事感触颇深,在写这篇文章时,一度认为是在写本人。接下来的内容是以敌人的视角写的,对最近面试的分析与反思,请大家急躁看完,没有谁的影子,只有对本人的无奈。 注释我在一家公司待三年了,最近找工作两个星期了,小公司还好,大公司每每碰壁,明天在面试官问我还有什么问题要问他的时候。 我说,我比起哪些优秀者来说,缺了什么? 面试官:你给我的感觉像刚毕业的,你做事各方面态度踊跃,解决问题也快,然而你把握的常识是零散的,不是零碎的。你解决一个问题之后也没有去反思问题背地的常识,能够做哪些优化。我:对,我最近也胆怯我三年教训只相当于人家一年的教训。面试官:你曾经是这样了。说进去有点害羞,反思这个货色也是苦楚的,所以可能以前我也回避去思考,去优化,去构建本人的常识体系,而后一点点的变为平庸。 认真想来,我也不是特地喜爱编码,然而这是我的事业,我靠它吃饭,我酷爱它,我喜爱解决完问题之后的成就感。说来惭愧,都是面对百度编程。 我在一家公司待着,刚毕业的时候接触了一些小程序,起初接触vue,相熟vue,缓缓的搭建公司的我的项目,纯熟应用vue全家桶,三年来,我只是一个纯熟的架子工而已。只是去应用,没有真正地去理解背地的实现过程和原理。像温水里的青蛙,发现自己想拼命跳出锅里的时候曾经被煮熟了。 具体来说,我失败次要有上面这几个方面: 根底不扎实:网络基础知识不扎实,深刻问到http和网络问题就死翘翘没有对我的项目进行复盘总结和衍生:对于做过的我的项目,没有去粗浅地思考怎么优化,本人可不可以实现一个相似的插件等,应用的这个插件是什么原理,只是贪图疾速解决问题,就放着不管了无输出的产出代码:总是在我的项目中积攒教训,应用惯性办法去解决问题,没有被动去零碎学习,没有输出的产出代码,最初只是重复性劳动而已回避算法:之前我的态度就是,“用不到,看不见,不论,不碰”,后果被卡主脖子反思本人在求学路上遇到的不少学霸,都是长于演绎,总结,和排汇,触类旁通的。这类人不仅是在学习上,就算在待业上,在各个行业都是蛮吃香的,他们学习货色快,上手也快。演绎总结,一直反复训练,排汇为本人的货色。 见贤思齐焉,见不贤而内自省也。心愿各位能把我当做反面教材,不想学的时候能想起我,“看看那个前端,工作三年了还像一年的,不学习就是他这种结果。” 故事完结,回到本身,我想说的是,职场上有两种状态:一种是温水煮青蛙,煮到最初被沸腾掉;另一种就是坐冷板凳,你本人再不起来越坐越冷,最初你的屁股就冰的巴不得粘在哪板凳上,你都不晓得。这两个种极其都很可怕,人肯定要有自知,不要陷在一个情境外面,包含一个特地好的情境,你也要自知,你要晓得那肯定不是常态,忧患意识很重要。还有很重要的一点,就是你肯定不是说你当初就能够心安理得得享受这所有,你肯定要晓得,你在最高峰的时候,上面肯定是下坡路,你肯定要有方法,要么拽住本人,下滑的速度慢一点,要么就是要做好筹备,积蓄货色,在我下滑之后,我有方法再弹起来。人生就是在战斗,每时每刻哪怕比如说不论是坐冷板凳的人还是始终在高峰的人,都是在战斗,停不下来的。 有句话是这么说的:栽一棵树最好的工夫是十年前,其次是当初。心灵鸡汤也不多讲,给大家分享干货最为切实,我联合了敌人面试题整顿出了几套前端面试题材料,大家点击这里就能够间接收费支付完整版PDF啦! 为加入春招的小伙伴们也筹备了一套前端面试题材料,还没有毕业的能够支付呀,将来的倒退方向在前端这块必定是能用上的,校招的小伙伴们看这里!支付完整版PDF!篇幅无限起因,只展现了局部材料,小编建了个前端学习圈,期待大家的退出哦,心愿大家能有所播种,聊得开心!欢送大家来找小编玩!喜爱这篇文章的小伙伴请留下你们的点赞评论反对小编,小编谢谢大家伙啦。

April 12, 2021 · 1 min · jiezi

关于前端:前端面试每日-31-第726天

明天的知识点 (2021.04.11) —— 第726天 (我也要出题)[html] 如何强制浏览器全屏?[css] 应用css的哪些办法能够进步页面的渲染速度?[js] JS中把其它类型转成字符串的办法及规定是什么?[软技能] 图片地址状态码返回200, 肯定能申请的到图片么?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

April 11, 2021 · 1 min · jiezi

关于css:你所不知道的BFC

概述BFC即Block Formatting Context。依据MDN上的定义,它是web页面上CSS可视化渲染的一部分,代表了一个渲染区域,块级元素在此区域中布局、浮动元素在此区域中与其它元素相互作用。艰深了解它是页面布局规定中的一小套规定,是页面整体布局中的mini布局。BFC是一个容器,容器中依照肯定的规定进行布局,不会影响容器之外的其它元素。BFC容器的产生具备肯定的条件,BFC是CSS布局的基石。 一. 触发生成BFC的条件• 根元素(<html>,能够解释页面上失常流中block元素的行为了)• 浮动元素(元素的 float 属性不是 none)• 相对定位元素(元素的 position属性 为 absolute 或 fixed)• 行内块元素(元素的 display 属性为 inline-block)• 表格单元格(元素的 display 属性为 table-cell,HTML表格单元格默认为该值)• 表格题目(元素的 display属性 为 table-caption,HTML表格题目默认为该值)• 匿名表格单元格元素(元素的 display 为 table、table-row、 table-row-group、table-header-group、table-footer-group(别离是HTML table、row、tbody、thead、tfoot 的默认属性)或 inline-table)• overflow 计算值(Computed)不为 visible 的块元素• display 值为 flow-root 的元素• contain 值为 layout、content 或 paint 的元素• 弹性元素(display 为 flex 或 inline-flex 元素的间接子元素)• 网格元素(display 为 grid 或 inline-grid 元素的间接子元素)• 多列容器(元素的 column-count 或 column-width (en-US) 不为 auto,包含 column-count 为 1)• column-span 为 all 的元素始终会创立一个新的BFC,即便该元素没有包裹在一个多列容器中(规范变更,Chrome bug) ...

April 9, 2021 · 2 min · jiezi

关于javascript:JavaScript事件的绑定与取消

定义DOM事件被发送用于告诉代码相干的事件曾经产生了。每个事件都是继承自Event 类的对象,能够包含自定义的成员属性及函数用于获取事件产生时相干的更多信息。事件能够示意从根本用户交互到渲染模型中产生的事件的主动告诉的所有内容。 绑定事件的办法1.ele.onxxx = function (event) {}    兼容性很好,然而一个元素只能绑定一个处理程序 根本等同于写在HTML行间上 2.ele.addEventListener(type, fn, false);    IE9以下不兼容,能够为一个事件绑定多个处理程序    当第三个参数设置为true就在捕捉过程中执行,反之就在冒泡过程中执行处理函数。 3.ele.attachEvent(‘on’ + type, fn);    IE独有,一个事件同样能够绑定多个处理程序 事件处理程序的运行环境1.ele.onxxx = function (event) {}                       程序this指向是dom元素自身 2.obj.addEventListener(type, func, false);        程序this指向是dom元素自身 3.obj.attachEvent(‘on’ + type, fn);                     程序this指向window 封装兼容性的 addEvent(elem, type, handle) 办法function addEvent(elem, type, handle) { if(elem.addEventListener){ elem.addEventListener(type, handle, false);} else if(elem.attachEvent) { elem.attachEvent('on'+ type, function(){ handle.call(elem); })} else { elem['on' + type] = handle;}} ...

April 9, 2021 · 1 min · jiezi

关于javascript:JavaScript事件流

一、事件事件是文档或者浏览器窗口中产生的,特定的交互霎时。 事件是用户或浏览器本身执行的某种动作,如click,load和mouseover都是事件的名字。 事件是javaScript和DOM之间交互的桥梁。 你若触发,我便执行——事件产生,调用它的处理函数执行相应的JavaScript代码给出响应。 典型的例子有:页面加载结束触发load事件;用户单击元素,触发click事件。 二、事件流事件流形容的是从页面中接管事件的程序。 1、事件流感性认识问题:单击页面元素,什么样的元素能感应到这样一个事件? 答案:单击元素的同时,也单击了元素的容器元素,甚至整个页面。 例子:有三个同心圆, 给每个圆增加对应的事件处理函数,弹出对应的文字。单击最外面的圆,同时也单击了里面的圆,所以里面圆的click事件也会被触发。  成果如下: 2、事件流事件产生时会在元素节点与根节点之间依照特定的程序流传,门路所通过的所有节点都会收到该事件,这个流传过程即DOM事件流。 1、两种事件流模型事件流传的程序对应浏览器的两种事件流模型:捕捉型事件流和冒泡型事件流。 冒泡型事件流:事件的流传是从最特定的事件指标到最不特定的事件指标。即从DOM树的叶子到根。【举荐】 捕捉型事件流:事件的流传是从最不特定的事件指标到最特定的事件指标。即从DOM树的根到叶子。 事件捕捉的思维就是不太具体的节点应该更早接管到事件,而最具体的节点最初接管到事件。 <pre style="margin: 0px; padding: 0px; overflow: auto; word-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"><!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title></head><body><div id="myDiv">Click me!</div></body></html></pre>下面这段html代码中,单击了页面中的<div>元素, 在冒泡型事件流中click事件流传程序为<div>—》<body>—》<html>—》document 在捕捉型事件流中click事件流传程序为document—》<html>—》<body>—》<div>   note: 1)、所有古代浏览器都反对事件冒泡,但在具体实现中略有差异: IE5.5及更早版本中事件冒泡会跳过<html>元素(从body间接跳到document)。 IE9、Firefox、Chrome、和Safari则将事件始终冒泡到window对象。 2)、IE9、Firefox、Chrome、Opera、和Safari都反对事件捕捉。只管DOM规范要求事件应该从document对象开始流传,但这些浏览器都是从window对象开始捕捉事件的。 3)、因为老版本浏览器不反对,很少有人应用事件捕捉。倡议应用事件冒泡。 2、DOM事件流DOM规范采纳捕捉+冒泡。两种事件流都会触发DOM的所有对象,从document对象开始,也在document对象完结。 DOM标准规定事件流包含三个阶段:事件捕捉阶段、处于指标阶段和事件冒泡阶段。 事件捕捉阶段:理论指标(<div>)在捕捉阶段不会接管事件。也就是在捕捉阶段,事件从document到<html>再到<body>就进行了。上图中为1~3.处于指标阶段:事件在<div>上产生并解决。然而事件处理会被看成是冒泡阶段的一部分。冒泡阶段:事件又流传回文档。note: 1)、只管“DOM2级事件”标准规范明确规定事件捕捉阶段不会波及事件指标,然而在IE9、Safari、Chrome、Firefox和Opera9.5及更高版本都会在捕捉阶段触发事件对象上的事件。后果,就是有两次机会在指标对象下面操作事件。 2)、并非所有的事件都会通过冒泡阶段 。所有的事件都要通过捕捉阶段和处于指标阶段,然而有些事件会跳过冒泡阶段:如,取得输出焦点的focus事件和失去输出焦点的blur事件。 两次机会在指标对象下面操作事件例子: 运行成果就是会陆续弹出6个框,为阐明原理我整合成了一个图: 3、事件流的典型利用事件代理传统的事件处理中,须要为每个元素增加事件处理器。js事件代理则是一种简略无效的技巧,通过它能够把事件处理器增加到一个父级元素上,从而防止把事件处理器增加到多个子级元素上。 1、事件代理事件代理的原理用到的就是事件冒泡和指标元素,把事件处理器增加到父元素,期待子元素事件冒泡,并且父元素可能通过target(IE为srcElement)判断是哪个子元素,从而做相应解决。 传统事件处理,为每个元素增加事件处理器,代码如下: 事件代理的解决形式,代码如下: <pre style="margin: 0px; padding: 0px; overflow: auto; word-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"><body><ul id="color-list"><li>red</li><li>orange</li><li>yellow</li><li>green</li><li>blue</li><li>indigo</li><li>purple</li></ul><script> (function(){ var colorList=document.getElementById("color-list"); colorList.addEventListener('click',showColor,false); function showColor(e) { e=e||window.event; var targetElement=e.target||e.srcElement; if(targetElement.nodeName.toLowerCase()==="li"){ alert(targetElement.innerHTML); } }})(); </script></body></pre>2、事件代理的益处 总结一下事件代理的益处: ...

April 9, 2021 · 1 min · jiezi

关于前端:JavaScript的事件捕获和事件冒泡

事件冒泡机制让咱们先看一段代码 <!DOCTYPE html><html><head> <title>Event Capture and Propagation</title></head><body> <div id="parent" style="width:120px; height:120px; background:#090; padding:60px"> <div id="child" style="width:120px; height:120px; background:#0CC"></div> </div> <script type="text/javascript"> function alertName(e) { alert(this.id); } document.getElementById('child').onclick = alertName; document.getElementById('parent').onclick = alertName; </script></body></html>咱们在外层div和内层div的onclick事件上都绑定了alertName(e)办法,关上浏览器试试。当咱们点击外层绿色局部,外层div的事件响应了;让咱们点击内层蓝色局部,内层div的事件先响应,而后外层div的事件再响应。 所以咱们很容易得出结论,浏览器是先找到以后被点击的元素,如果该元素上注册了onclick事件则响应;而后浏览器持续寻找被点击元素的父元素,如果其也注册了onclick事件,则该事件也响应,而后再持续向下层寻找。这就是JS的事件冒泡机制。咱们换个浏览器试试,目前版本的Chrome, Safari, Firefox和IE都是同样的后果。 事件处理模型其实事件处理有两种模型。一种叫冒泡型,也就是下面咱们看到的例子,程序是从里到外”div” -> “body” -> “html” -> “document” -> “window”。还有一种叫捕捉型,程序正好颠倒。IE是反对冒泡型,据说历史上的Netscape是反对捕捉型。那咱们支流的W3C规范呢?答案是都反对,默认是冒泡型。这要怎么了解?咱们先来看下W3C DOM事件流的过程: 当一个事件产生时,先进入捕捉阶段,也就是从最外层开始,顺次向里流传事件,始终到触发事件的指标元素(上例中的div child)。随后再进入冒泡阶段,从触发事件的元素开始,顺次向外流传,直到最外层元素。那么为什么咱们在后面的例子中看不到事件捕捉的阶段呢?这里咱们要先说另外一个概念。 增加事件绑定下面的例子是将onclick事件属性设置为alertName(e)办法,这样的事件绑定办法个别不举荐,因为会笼罩之前所绑定的其余函数。咱们倡议采纳addEventListener办法。咱们将上例中绑定事件的代码做如下改变: child = document.getElementById('child'); parent = document.getElementById('parent'); child.addEventListener("click", alertName); // 留神,这里要写click,不是onclick parent.addEventListener("click", alertName);addEventListener办法的第一个参数是事件名称,第二个参数是响应函数。关上浏览器点击下,是不是跟之前用onclick绑定的成果一样啊?那这么做的益处是什么呢?咱们试试在上段代码的前面增加上面的代码: function alertAgain(e) { alert(this.id + ", again") } child.addEventListener("click", alertAgain);再次点击内层蓝色div局部,你会看到该元素上绑定的两个点击事件办法都响应了,响应的程序同代码中绑定的程序统一。所以,应用addEventListener就不会笼罩掉之前已绑定的办法。 ...

April 9, 2021 · 1 min · jiezi

关于javascript:JavaScript-事件委托详解

基本概念事件委托,艰深地来讲,就是把一个元素响应事件(click、keydown......)的函数委托到另一个元素; 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到须要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,而后在外层元素下来执行函数。 举个例子,比方一个宿舍的同学同时快递到了,一种办法就是他们都傻傻地一个个去支付,还有一种办法就是把这件事件委托给宿舍长,让一个人进来拿好所有快递,而后再依据收件人一一分发给每个宿舍同学; 在这里,取快递就是一个事件,每个同学指的是须要响应事件的 DOM 元素,而进来对立支付快递的宿舍长就是代理的元素,所以真正绑定事件的是这个元素,依照收件人散发快递的过程就是在事件执行中,须要判断以后响应的事件应该匹配到被代理元素中的哪一个或者哪几个。 事件冒泡 后面提到 DOM 中事件委托的实现是利用事件冒泡的机制,那么事件冒泡是什么呢? 在 document.addEventListener 的时候咱们能够设置事件模型:事件冒泡、事件捕捉,一般来说都是用事件冒泡的模型; 如上图所示,事件模型是指分为三个阶段: 捕捉阶段:在事件冒泡的模型中,捕捉阶段不会响应任何事件;指标阶段:指标阶段就是指事件响应到触发事件的最底层元素上;冒泡阶段:冒泡阶段就是事件的触发响应会从最底层指标一层层地向外到最外层(根节点),事件代理即是利用事件冒泡的机制把里层所须要响应的事件绑定到外层;### 事件委托的长处 1. 缩小内存耗费 试想一下,若果咱们有一个列表,列表之中有大量的列表项,咱们须要在点击列表项的时候响应一个事件; <ul id="list"> <li>item 1</li> <li>item 2</li> <li>item 3</li> ...... <li>item n</li></ul>// ...... 代表两头还有未知数个 li如果给每个列表项一一都绑定一个函数,那对于内存耗费是十分大的,效率上须要耗费很多性能; 因而,比拟好的办法就是把这个点击事件绑定到他的父层,也就是 ul 上,而后在执行事件的时候再去匹配判断指标元素; 所以事件委托能够缩小大量的内存耗费,节约效率。 2. 动静绑定事件 比方上述的例子中列表项就几个,咱们给每个列表项都绑定了事件; 在很多时候,咱们须要通过 AJAX 或者用户操作动静的减少或者去除列表项元素,那么在每一次扭转的时候都须要从新给新增的元素绑定事件,给行将删去的元素解绑事件; 如果用了事件委托就没有这种麻烦了,因为事件是绑定在父层的,和指标元素的增减是没有关系的,执行到指标元素是在真正响应执行事件函数的过程中去匹配的; 所以应用事件在动静绑定事件的状况下是能够缩小很多反复工作的。 jQuery 中的事件委托jQuery 中的事件委托置信很多人都用过,它次要这几种办法来实现: **$.on**: 根本用法: $('.parent').on('click', 'a', function () { console.log('click event on tag a'); }),它是 .parent 元素之下的 a 元素的事件代理到 $('.parent') 之上,只有在这个元素上有点击事件,就会主动寻找到 .parent 元素下的 a 元素,而后响应事件;**$.delegate**: 根本用法: $('.parent').delegate('a', 'click', function () { console.log('click event on tag a'); }),同上,并且还有绝对应的 $.delegate 来删除代理的事件;**$.live**: 根本应用办法: $('a', $('.parent')).live('click', function () { console.log('click event on tag a'); }),同上,然而如果没有传入父层元素 $(.parent),那事件会默认委托到 $(document) 上;(已破除)实现性能根本实现 ...

April 9, 2021 · 3 min · jiezi

关于css:复习css3动画

什么是动画, 动画片、漫画、视频、flash等等会动的画面都是动画, 色彩高度等属性等变动(过渡)也是动画,CSS3对于动画的实现有过渡和帧动画 上干货,目前我学到是CSS3动画属性transition和animation动画经常于transform属性一起实用 动画属性学习transition 过渡属性的应用程序: 属性名称(property)过渡工夫(duration)延迟时间(delay)工夫函数(timing-function) 工夫函数也就是过渡成果有以下几种 ease - 规定过渡成果,先迟缓地开始,而后减速,而后迟缓地完结(默认)linear - 规定从开始到完结具备雷同速度的过渡成果ease-in -规定迟缓开始的过渡成果ease-out - 规定迟缓完结的过渡成果ease-in-out - 规定开始和完结较慢的过渡成果cubic-bezier(n,n,n,n) - 容许您在三次贝塞尔函数中定义本人的值案例: <style> .box { width: 100px; height: 100px; background-color: red; transition: transform 2s linear, width 2s linear,height 3s 2s; } .box:hover { width: 400px; height: 400px; transform: rotate(80deg); }</style> animation animation: name duration timing-function delay iteration-count direction fill-mode;属性的应用程序: 动画名称(name)--@keyfrsmes过渡工夫(duration)延迟时间(delay)工夫函数(timing-function)播放次数(iteration-count)播放方向(direction)轮流播放和反向播放进行播放的状态(fill-mode)是否暂停(play-state)案例: <style>.box2 { width: 100px; height: 100px; background-color: red; animation: move 4s linear 2; } @keyframes move { 0% { background: skyblue; transform: translate(0px, 0px); } 25% { background: chartreuse; transform: translate(200px, 0px); } 50% { background: yellow; transform: translate(200px, 200px); } 75% { background: lightcoral; transform: translate(0, 200px); } 100% { background: blueviolet; transform: translateY(0px, 0px); } } </style>动画监听咱们做动画必定是前端去进行一个管制这会就体现出监听的重要性了(要留神兼容性)animationstartanimationend,transitionendanimationiteration留神这些监听和设置动画属性也有关系,如果动画始终运行这个动画完结监听则就不好用了举例 ...

April 7, 2021 · 2 min · jiezi

关于css:CSS复习笔记一引入和语法

~~### CSS 一、介绍CSS是层叠样式表,用于体现HTML或XML文件款式的语言。 构造(html)+装璜(css)+外延(js)二、语法语法组成选择器{ 规定 属性:值; 属性:值;}html如何引入css1.【内联样式表】将css规定间接填写在style属性中---适度耦合,但优先级高2.【外部样式表】将款式写在style标签内--构造清晰,做到解耦,款式独立,但款式和构造依然混合3.【内部样式表】将款式卸载.css文件中,通过link将文件引入html 选择器1.外围选择器标签选择器(范畴大,优先级小) div{}ul{}dl{}类选择器 .nav{}id选择器(优先级高于类 #id{}组合选择器 body , ul{}并且选择器 ul.nav{}广泛选择器 *{} 2.档次选择器父子选择器 父>子{}.nav>li{} nav下的li#wrapper>*{} wrapper下的所有子元素后辈选择器 父 后{}.right_nav li{}下一个兄弟选择器 selector + selector{}之后所有兄弟选择器 selector ~ selector{}3.伪类选择器【过滤器】:first-child{ 第一个}:last-child{ 最初一个}:nth-child(n){ 第n个} :nth-child(2n+1){}:nth-child(odd){}:hover{} 光标 4.伪元素选择器【过滤器】::after 在元素内容之后插入一些内容 ul.nav::after{ display:"block";}<ul class="nav"> <li></li> <li></li> <li></li></ul>::before ----元素之前插入内容::first-letter ----抉择元素的首字母。::first-line----抉择元素的首行。::selection----抉择用户抉择的元素局部 5.属性选择器【过滤器】[name] 抉择具备name属性的元素[name=username] 抉择具备name属性,值为nameuser的元素[name^=u] 抉择具备name属性,u结尾的元素[name$=u] 抉择具备name属性,u结尾的元素[name*=u] 抉择具备name属性,蕴含u的元素 优先级特权!important权值 1000 style属性 100 #id 10 .class 伪类 1 元素 程序

April 7, 2021 · 1 min · jiezi

关于css:CSS的boxshadow属性

一、前言其实这个属性是很细碎的知识点,之前想要暗影成果就间接看看他人的网站,而后复制一下别的,成果也还行,再起初呢,本人一想用到这个属性就去菜鸟教程查一下,而后本人缓缓调这个暗影,然而那几个暗影属性的值老是没记住,所以明天还是写一下吧! 二、重新认识box-shadow菜鸟教程这么记录的: 语法box-shadow: h-shadow v-shadow blur spread color inset; box-shadow有六个属性值:1.抛开最初一个最简略的,因为inset就是设置外部暗影,默认的暗影成果是out-set,而且out-set也是最罕用的。2.color也不必了解,就是显示暗影的色彩而已。 所以真正须要了解的只有四个值:3.h-shadow,即第一个属性值,他示意的暗影的垂直地位,能够为负值;而v-shadow即第二个属性值,示意的是暗影的程度地位,也能够为负值; 一开始看这两个程度与垂直的暗影地位的形容切实是一头雾水,最初思考一下并实践证明,这个其实很简略,无非是立体坐标系,以左上角为原点,程度的暗影就是往原点左边即正,垂直暗影就是往原点正下方为正: 菜鸟教程的案例借用一下: <!DOCTYPE html><html><head><meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <style> div{ width:300px; height:100px; background-color:yellow; box-shadow: 10px 10px 5px #888888;}</style></head><body><div></div></body></html>外围代码:box-shadow: 10px 10px 5px #888888; 抛开最初的三个,当初只剖析前两个,就是程度与处理的方向,能够看到暗影方向都是在正方向,这个是因为下面的box-shadow属性的前两个值都为正。 把它改为负值,就是这个样子:box-shadow: -10px -10px 5px #888888;视觉上貌似负方向的暗影成果更强一点。 然而这样看,这个属性也太鸡肋了吧,因为只能够设置两条边,跟我平时看到的不一样啊,例如思否的box-shadow:貌似上下左右都有啊! 这个怎么弄呢? 其实很简略,无非就是上下左右一起弄咯: box-shadow: 10px 10px 5px #888888,-10px -10px 5px #888888;还是拿菜鸟的例子改一改,并改下背景色彩:这个成果难看多了有没有。 相似的还能够这样用: box-shadow: 10px 0px 10px red,//往右 红 0px -10px 10px blue,//往上 蓝 0px 10px 10px yellow,//往下 黄 -10px 0px brown;//往左 棕 顺带试试inset属性: ...

April 6, 2021 · 1 min · jiezi

关于javascript:JavaScript-Math对象

Math对象Math 对象用于执行数学工作。Math 对象并不像 Date 和 String 那样是对象的类,因而没有构造函数 Math()。 Math 对象属性 Math 对象办法 ceil()ceil() 办法可对一个数进行向上取整。 语法Math.ceil(x) 参数1.x 必须。必须是一个数值。 TIPS它返回的是大于或等于x,并且与x最靠近的整数。 实例 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>ceil()</title><script type="text/javascript"> document.write(Math.ceil(3.3)); document.write(Math.ceil(-0.1));</script></head><body></body></html>floor()floor() 办法可对一个数进行向下取整。 语法Math.floor(x) 参数1.x 必须。任意数值或表达式。 TIPS返回的是小于或等于x,并且与 x 最靠近的整数。 实例 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>floor()</title><script type="text/javascript"> document.write(Math.floor(3.3)); document.write(Math.floor(-0.1));</script></head><body></body></html>round()round() 办法可把一个数字四舍五入为最靠近的整数。 语法Math.round(x) 参数1.x 必须。必须是数字。 TIPS1.返回与 x 最靠近的整数。2.对于 0.5,该办法将进行上舍入。(5.5 将舍入为 6)3.如果 x 与两侧整数等同靠近,则后果靠近 +∞方向的数字值 。(如 -5.5 将舍入为 -5; -5.52 将舍入为 -6) 实例 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>round()</title><script type="text/javascript"> document.write(Math.round(3.3)); document.write(Math.round(-0.1)); document.write(Math.round(-9.9)); document.write(Math.round(8.9));</script></head><body></body></html>random()random() 办法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数。 ...

April 6, 2021 · 1 min · jiezi

关于javascript:JavaScript函数

函数是 JavaScript 中的根本组件之一。 一个函数是 JavaScript 过程 — 一组执行工作或计算值的语句。要应用一个函数,你必须将其定义在你心愿调用它的作用域内。 一个JavaScript 函数用function关键字定义,前面跟着函数名和圆括号。 定义函数函数申明一个函数定义(也称为函数申明,或函数语句)由一系列的function关键字组成,顺次为: 函数的名称。函数参数列表,突围在括号中并由逗号分隔。定义函数的 JavaScript 语句,用大括号{}括起来。例如,以下的代码定义了一个简略的square函数: function square(number) { return number * number;}函数square应用了一个参数,叫作number。这个函数只有一个语句,它阐明该函数将函数的参数(即number)自乘后返回。函数的return语句确定了函数的返回值: return number * number;原始参数(比方一个具体的数字)被作为值传递给函数;值被传递给函数,如果被调用函数扭转了这个参数的值,这样的扭转不会影响到全局或调用函数。 如果你传递一个对象(即一个非原始值,例如Array或用户自定义的对象)作为参数,而函数扭转了这个对象的属性,这样的扭转对函数内部是可见的,如上面的例子所示: function myFunc(theObject) { theObject.make = "Toyota";}var mycar = {make: "Honda", model: "Accord", year: 1998};var x, y;x = mycar.make; // x获取的值为 "Honda"myFunc(mycar);y = mycar.make; // y获取的值为 "Toyota" // (make属性被函数扭转了)函数表达式尽管下面的函数申明在语法上是一个语句,但函数也能够由函数表达式创立。这样的函数能够是匿名的;它不用有一个名称。例如,函数square也可这样来定义: const square = function(number) { return number * number; };var x = square(4); // x gets the value 16然而,函数表达式也能够提供函数名,并且能够用于在函数外部代指其自身,或者在调试器堆栈跟踪中辨认该函数: ...

April 6, 2021 · 5 min · jiezi

关于react.js:更好的在react项目中写css代码emotion

简介:emotion是一个JavaScript库,应用emotion能够用写js的形式写css代码。在react中装置emotion后,能够很不便进行css的封装,复用。应用emotion后,浏览器渲染进去的标签是会加上一个css结尾的标识。如下:截图中以css-结尾的几个标签,就是应用emotion库后渲染进去的。 上面就从装置到应用,介绍下emotion在工程中的利用。 emotion的装置:yarn add @emotion/reactyarn add @emotion/styled新增一般css组件:1,命名和组件一样,大写字母结尾2,styled前面跟html标签 // 引入emotionimport styled from "@emotion/styled”;// 应用emotion 创立css组件const Container = styled.div`display: flex;flex-direction: column;align-items: center;min-height: 100vh;`;//在html代码中应用css组件:<Container>// html代码</Container>给已存在组件加款式:1,变量名首字符大写2,将曾经存在的组件作为参数传入styled3,款式代码能够加参数 // Card 是antd已存在的组件const ShadowCard = styled(Card)` width: 40rem; min-height: 56rem; padding: 3.2rem 4rem; border-radius: 0.3rem; box-sizing: border-box; box-shadow: rgba(0, 0, 0, 0.1) 0 0 10px; text-align: center;`;// 引入的图片,作为参数间接应用import logo from "assets/logo.svg";// 反引号可参照魔法字符串传入参数const Header = styled.header`background: url(${logo}) no-repeat center;padding: 5rem 0;background-size: 8rem;width: 100%;`;提取公共的css组件1, 反引号之前,接管泛型的参数, 可能用到的参数都要列出来2, 取传进来的参数,用props来取,比方props.between, 能够用函数返回值给css属性赋值,css属性不渲染,返回值就是undefined justify-content: ${(props) => (props.between ? "space-between" : undefined)};3, 能够用css选择器4,调用时,跟一般js组件一样应用,传参也雷同 ...

April 6, 2021 · 1 min · jiezi

关于react.js:React中的样式和动画

CSS 概述(了解)1.组件化天下的CSS后面说过,整个前端曾经是组件化的天下: 而CSS的设计就不是为组件化而生的所以在目前组件化的框架中都在须要一种适合的CSS解决方案在组件化中抉择适合的CSS解决方案应该合乎以下条件: 能够编写部分css:css具备本人的部分作用域,不会随便净化其余组件内的元素能够编写动静的css:能够获取以后组件的一些状态,依据状态的变动生成不同的css款式反对所有的css个性:伪类、动画、媒体查问等编写起来简洁不便、最好合乎一贯的css格调特点2.浅谈React中的CSS事实上,css始终是React的痛点,也是被很多开发者吐槽、诟病的一个点在这一点上,Vue做的要的确要好于React: Vue通过在.vue文件中编写 <style><style> 标签来编写本人的款式通过是否增加 scoped 属性来决定编写的款式是全局无效还是部分无效通过 lang 属性来设置你喜爱的 less、sass等预处理器通过内联款式格调的形式来依据最新状态设置和扭转cssVue在CSS上尽管不能称之为完满,然而曾经足够简洁、天然、不便了,至多对立的款式格调不会呈现多个开发人员、多个我的项目采纳不一样的款式格调。相比而言,React官网并没有给出在React中对立的款式格调: 由此,从一般的css,到css modules,再到css in js,有几十种不同的解决方案,上百个不同的库大家统一在寻找最好的或者说最适宜本人的CSS计划,然而到目前为止也没有对立的计划React中的款式1.内联款式内联款式是官网举荐的一种css款式的写法: style 承受一个采纳小驼峰命名属性的 JavaScript 对象,,而不是 CSS 字符串;并且能够援用state中的状态来设置相干的款式;内联款式的长处: 内联款式, 款式之间不会有抵触能够动静获取以后state中的状态内联款式的毛病: 1.写法上都须要应用驼峰标识2.某些款式没有提醒3.大量的款式, 代码凌乱4.某些款式无奈编写(比方伪类/伪元素)所以官网仍然是心愿内联适合和一般的css来联合编写2.一般的css一般的css咱们通常会编写到一个独自的文件,之后再进行引入这样的编写形式和一般的网页开发中编写形式是统一的: 如果咱们依照一般的网页规范去编写,那么也不会有太大的问题然而组件化开发中咱们总是心愿组件是一个独立的模块,即使是款式也只是在本人外部失效,不会相互影响然而一般的css都属于全局的css,款式之间会相互影响这种编写形式最大的问题是款式之间会互相层叠掉3.css modulescss modules并不是React特有的解决方案,而是所有应用了相似于webpack配置的环境下都能够应用的如果在其余我的项目中应用, 那么咱们须要本人来进行配置,比方配置webpack.config.js中的modules: true等React的脚手架曾经内置了css modules的配置:.css/.less/.scss 等款式文件都批改成 .module.css/.module.less/.module.scss 等之后就能够援用并且进行应用了css modules的确解决了部分作用域的问题,也是很多人喜爱在React中应用的一种计划 然而这种计划也有本人的缺点: 援用的类名,不能应用连接符(.home-title),在JavaScript中是不辨认的所有的className都必须应用{style.className} 的模式来编写不不便动静来批改某些款式,仍然须要应用内联款式的形式如果你感觉下面的缺点还算OK,那么你在开发中齐全能够抉择应用css modules来编写,并且也是在React中很受欢迎的一种形式4.意识 CSS in JS实际上,官网文档也有提到过CSS in JS这种计划: “CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在内部文件中定义留神此性能并不是 React 的一部分,而是由第三方库提供 React 对款式如何定义并没有明确态度在传统的前端开发中,咱们通常会将构造(HTML)、款式(CSS)、逻辑(JavaScript)进行拆散 然而在后面的学习中,咱们就提到过,React的思维中认为逻辑自身和UI是无奈拆散的,所以才会有了JSX的语法款式呢?款式也是属于UI的一部分事实上CSS-in-JS的模式就是一种将款式(CSS)也写入到JavaScript中的形式,并且能够不便的应用JavaScript的状态所以React有被人称之为 All in JS当然,这种开发的形式也受到了很多的批评: Stop using CSS in JavaScript for web development5.意识styled-components批评声音尽管有,然而在咱们看来很多优良的CSS-in-JS的库仍然十分弱小、不便: CSS-in-JS通过JavaScript来为CSS赋予一些能力,包含相似于CSS预处理器一样的款式嵌套、函数定义、逻辑复用、动静修 改状态等等尽管CSS预处理器也具备某些能力,然而获取动静状态仍然是一个不好解决的点所以,目前能够说CSS-in-JS是React编写CSS最为受欢迎的一种解决方案目前比拟风行的CSS-in-JS的库有哪些呢? ...

April 6, 2021 · 3 min · jiezi

关于css:CSS-文字装饰-textdecoration-textemphasis

在 CSS 中,文字算是咱们天天会打交道的一大类了,有了文字,则必不可少一些文字装璜。 本文将讲讲两个比拟新的文字装璜的概念 text-decoration 与 text-emphasis,在最初,还会解说应用 background 模仿文字下划线的一些乏味的动效。 text-decoration 文字装璜text-decoration 意为文字装璜,在很早的标准 CSS Level 2 (Revision 1) -- text-decoration 就曾经存在了。譬如咱们十分熟知的下划线 text-decoration: underline。 p { text-decoration: underline;} 而到了比拟新的 CSS Text Decoration Module Level 3 - text-decoration,text-decoration 失去了比拟大的丰盛更新,演化出了 text-decoration-line, text-decoration-color, text-decoration-style,和还未成为规范的 text-decoration-thickness 等属性,是它们的缩写。 其中: text-decoration-line:管制用于设置元素中的文本的润饰类型,是在文本下方、上方还是贯通文本text-decoration-style:不仅仅是实线 solid,相似于 border-style,还反对双实线 double、点划线 dotted、虚线 dashed 以及十分有意思的 wavy 波浪线text-decoration-color:这个好了解,管制色彩text-decoration-thickness:管制润饰线的粗细这里有张十分好的图,帮忙大家疾速了解: CodePen Demo -- Text-decoration Demo text-decoration-line 能够同时设置有意思的一点是,text-decoration-line 能够同时设置。 p { text-decoration-line: overline underline line-through;} 咱们能够失去上中下三条线。 text-decoration 能够进行过渡与动画text-decoration 的每个值都是能够进行过渡与动画的。正当利用,在一些文本强调的中央,十分有用。 ...

April 6, 2021 · 4 min · jiezi

关于javascript:前端面试每日-31-第720天

明天的知识点 (2021.04.05) —— 第720天 (我也要出题)[html] 文件抉择框如何抉择指定后缀的文件?[css] rem和px的换算规定是怎么的?[js] Array构造函数传入的参数有哪些状况?[软技能] 你读完一本书会写读后感吗?如何写呢?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

April 5, 2021 · 1 min · jiezi

关于css:CSS-模块化方案探讨BEMOOCSSCSS-ModulesCSSinJS

全文共 4000 余字,预计破费 30 分钟。家喻户晓,CSS 依据选择器名称去全局匹配元素,它没有作用域可言,比方你在页面的两个不同的中央应用了一个雷同的类名,先定义的款式就会被笼罩掉。CSS 始终不足模块化的概念,命名抵触的问题会继续困扰着你。每次定义选择器名称时,总会顾及其余文件中是否也应用了雷同的命名,这种影响在组件开发中尤为显著。 现实的状态下,咱们开发一个组件的过程中,应该能够随便的为其中元素进行命名,只须要保障其语义性即可,而不用放心它是否与组件之外的款式发生冲突。 与 JavaScript 社区中的 AMD、CMD、CommonJS、ES Modules 等相似,CSS 社区也诞生了相应的模块化解决方案:BEM、OOCSS、SMACSS、ITCSS,以及 CSS Modules 和 CSS-in-JS 等。 依据这些 CSS 模块化计划的特点,我简略的将它们分为了三大类: CSS 命名方法论:通过人工的形式来约定命名规定。CSS Modules:一个 CSS 文件就是一个独立的模块。CSS-in-JS:在 JS 中写 CSS。 CSS 命名方法论为了防止 CSS 选择器命名抵触的问题,以及更好的实现 CSS 模块化,CSS 社区在晚期诞生了一些 CSS 命名方法论,如 BEM、OOCSS、SMACSS、ITCSS、SUITCSS、Atomic CSS 等。 它们简直都有一个独特的特点——为选择器减少简短的前缀或后缀,并试图通过人工的形式来生成全局惟一的命名。这无疑会减少了类命名的复杂度和保护老本,也让 HTML 标签显得臃肿。 BEMBEM(Block Element Modifier)是一种典型的 CSS 命名方法论,由 Yandex 团队(相当于中国的百度)在 2009 年前提出,它的核心思想是 通过组件名的唯一性来保障选择器的唯一性,从而保障款式不会净化到组件外。 BEM 命名规约是 .block-name__element-name--modifier-name,即 .模块名__元素名--润饰器名 三个局部,用双下划线 __ 来明确辨别模块名和元素名,用双横线 -- 来明确辨别元素名和润饰器名。你也能够在保留 BEM 核心思想的前提下,自定义命名格调,如驼峰法、应用单下划线、应用单横线等。 在 BEM 中不倡议应用子代选择器,因为每一个类名曾经都是全局惟一的了,除非是 block 互相嵌套的场景。 ...

April 5, 2021 · 5 min · jiezi

关于vue.js:vue中怎么把背景铺满全屏

template>div.app .app{ bg:url(xxx)height:100%width:100%position:fixed} app.vue 设置bodybody{ margin:0;padding:0}

April 4, 2021 · 1 min · jiezi

关于前端:前端见外6个你应该知道的实用CSS小技巧

原文作者:Mehdi Aoussiad 翻译:难堪风流 原文链接:6 Useful Pure CSS Tips that You Should Know 集体翻译,转载请注明出处,文章中有什么问题欢送大家在评论中指出 CSS是一种很棒的样式表语言,咱们能够应用它来扭转网站款式,或是制作响应式的网站。它是所有Web开发人员必须把握的技能,因为每个网站或Web应用程序都会应用CSS。 现在的CSS语言曾经有了许多改良。你能够在不应用JavaScript的状况下用纯CSS创立一些很酷的货色。这就是为什么你须要理解一些CSS技巧,他们能让你在我的项目中制作出十分惊艳的UI。 在这篇文章中,咱们将会展现一些实用的CSS技巧,你能够在接下来的我的项目中尝试应用他们。那么让咱们间接开始吧。 1. 给滚动条减少款式应用CSS,你能够轻松地在你的网站上批改滚动条的款式。这样你能够实现本人想要的任何成果。 要实现这一点,你须要应用属性 ::scrollbar 和 ::scrollbar-thumb,上面是一段代码示例。 body{ height: 200vh;}::-webkit-scrollbar{ width: 17px;}::-webkit-scrollbar-thumb{ background: black;}通过代码你能够看到,咱们增加了-webkit-前缀,因为这是Chrome和Safari浏览器的内核webkit反对的CSS扩大。咱们还增加了咱们的款式,使滚动条的宽度变大,并变成彩色。 你能够点击这个链接查看成果2. 给鼠标选中文本减少款式咱们在浏览网站或浏览博客时,常常会用鼠标抉择某段文字。你能够通过CSS来扭转被鼠标选中文本的款式。 ::selection 属性能够让你轻松扭转被鼠标选中文本的款式。 上面是代码示例: ::selection{ background: yellow; color: black;}增加上述样式表后,用鼠标抉择文字时,文字的背景会变成黄色,文字色彩会变成彩色。 你能够点击这个链接查看成果3. 实现平滑的滚动你能够在 html 选择器中增加CSS属性 scroll-behavior,这样整个HTML页面就会有平滑的滚动。 上面是代码示例: html{ scroll-behavior: smooth;}你能够点击这个链接查看成果4. 纯CSS实现深色模式你晓得吗?不用应用JavaScript就能够轻松地为你的网站增加深色模式吗?我发现一些开发人员应用CSS变量来实现光明模式。但还有另一个很酷的技巧,能够让你在不应用CSS变量的状况下实现同样的成果。 咱们将在一个类型为复选框的输出元素上应用伪元素::checked,以便在复选框被点击时轻松地在深色模式和浅色模式之间切换。 请看上面这段简略的HTML和CSS代码。 HTML代码: <body> <input type="checkbox" id="checkbox"> <div class="container"> <h1>Hello World!</h1> <div class="div1"> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloribus, pariatur?</p> </div> </div></body>CSS代码: ...

April 3, 2021 · 1 min · jiezi

关于css:CSS伪类与伪元素

一、伪类与伪元素1.CSS伪类实用于用户应用批示设施虚指一个元素(没有激活它)的状况。在 CSS 中, 一个伪类选择器只根据元素的状态, 而不是元素在文档树中的信息, 来抉择指标对象。 举例子::hover 这个款式会被任何与链接相干的伪类重写,像:link, :visited, 和 :active等。为了确保失效,:hover规定须要放在:link和:visited规定之后,然而在:active规定之前,依照LVHA的循程序申明:link-:visited-:hover-:active(记忆办法:LV好啊!示意LV包很好)。 2.CSS[伪元素]伪元素是一个附加至选择器末的关键词,容许你对被抉择元素的特定局部批改款式。::after用来创立一个伪元素,作为已选中元素的最初一个子元素。通常会配合content属性来为该元素增加装璜内容。这个虚构元素默认是行内元素。 奢侈形容:1.CSS伪类:为已存在的元素增加一个款式,然而这个款式却是不显示的,只有当用户执行了某个操作后才显示,比方hover伪类,只有用户鼠标通过时才会触发外面的款式。而且相似hover的还有active,link,visited这些,并且一个元素能够增加多个伪类。应用单冒号:前缀。其款式写法: :hover2.CSS伪元素:为某个已存在的元素在其外面生成一个元素,留神,伪元素最多能够生成两个,对应的有before,与after,就是在某个元素的后面或者前面生成一个元素。应用单冒号或者双冒号前缀都能够。其款式写法: : berfore ::before :after ::after尽管单冒号,和双冒号都能够实现想要的后果,然而:CSS3标准中的要求应用双冒号(::)示意伪元素,以此来辨别伪元素和伪类,比方::before和::after等伪元素应用双冒号(::),:hover和:active等伪类应用单冒号(:)。除了一些低于IE8版本的浏览器外,大部分浏览器都反对伪元素的双冒号(::)示意办法 上面这两个是例子: 上面这个菜鸟教程的例子,我改了一下: 上面这个是网上的动画成果,其中船上的烟是伪类生成的:关上F12你能够看到:boat的伪元素是生成在boat外面的 好了拜拜!

April 3, 2021 · 1 min · jiezi

关于css:CSS盒子模型基本介绍和用法

CSS盒子模型是一个蕴含多个属性的容器, 其中包含边框, 边距, 填充和内容自身。它用于创立网页的设计和布局。它能够用作自定义不同元素布局的工具包。 Web浏览器依据CSS框模型将每个元素出现为矩形框。 Box-Model在CSS中具备多个属性。其中一些如下: 边界边距填充内容下图阐明了盒子模型。 边区:它是框的边距和边距之间的区域。其尺寸由边框的宽度和高度给出。 保证金区域:该区域由边界和边距之间的空间组成。边距区域的尺寸是边距框宽度和边距框高度。将元素与其相邻元素离开是很有用的。 填充区域:它包含元素的填充。该区域实际上是内容区域四周和边框内的空间。其尺寸由填充盒的宽度和填充盒的高度给出。 内容范畴:该区域蕴含诸如文本, 图像或其余媒体内容之类的内容。它受内容边缘的限度, 其尺寸由内容框的宽度和高度确定。 范例1: <!DOCTYPE html> <head> <title>CSS Box Model</title> <style> .main { font-size:36px; font-weight:bold; Text-align:center; } .gfg { margin-left:60px; border:50px solid #009900; width:300px; height:200px; text-align:center; padding:50px; } .gfg1 { font-size:42px; font-weight:bold; color:#009900; margin-top:60px; background-color:#c5c5db; } .gfg2 { font-size:18px; font-weight:bold; background-color:#c5c5db; } </style> </head> <body> <div class = "main">CSS Box-Model Property</div> <div class = "gfg"> <div class = "gfg1">lsbin</div> <div class = "gfg2">A computer science portal for geeks</div> </div> </body></html>范例2: ...

April 2, 2021 · 1 min · jiezi

关于css:20个常用的CSS知识点

如何暗藏滚动条`// chrome 和Safari*::-webkit-scrollbar { width: 0 !important }// IE 10+* { -ms-overflow-style: none; }// Firefox* { overflow: -moz-scrollbars-none; }` 批改滚动条款式`*::-webkit-scrollbar {  /定义纵向滚动条宽度/  width: 12px!important;  /定义横向滚动条高度/  height: 12px!important; }*::-webkit-scrollbar-thumb {  /滚动条外部滑块/  border-radius: 16px;  background-color:#c1c1c1;  transition: background-color 0.3s;  &:hover {    /鼠标悬停滚动条外部滑块/    background: #bbb;  } }*::-webkit-scrollbar-track {  /滚动条外部轨道/  background: #f1f1f1;}` 批改input框placeholder的色彩`input::input-placeholder{ color:red;}` 按钮不可点击的款式`cursor: not-allowed` CSS鼠标指针事件:阻止任何JS事件`.disabled { pointer-events: none; }` 文字超出强制n行 超出局部用省略号代替`div {  overflow: hidden;  text-overflow: ellipsis;  display: -webkit-box;  -webkit-line-clamp: n; // 行数  -webkit-box-orient: vertical;}` 批改字体间距`letter-spacing: 8px` 谷歌浏览器控制台提醒/deep/将要被移除`<style scoped lang="less">// 采纳的less的本义和变量插值@deep: ~'>>>';.select {     @{deep} .ivu-card-body {        width: 100%;      }    }</style>` animate动画停在某个关键帧`animation-fill-mode: forwards;` 盒子暗影`box-shadow: 0 2px 2px rgba(10,16,20,.24),0 0 2px rgba(10,16,20,.12);transition: box-shadow .5s;` 11.使图片笼罩它的整个容器`img {  object-fit: cover;}` 表格中td的内容主动换行`<table style="word-break:break-all; word-wrap:break-all;">` 浏览器打印性能 图片生效`body {    -webkit-print-color-adjust: exact;}` 背景图像完满适配视口`body {  background-image: url('xxx');  background-repeat: no-repeat;  background-position: center;  background-attachment: fixed;  background-size: cover;  -webkit-background-size: cover;  -moz-background-size: cover;  -o-background-size: cover;}` 如何应用多个背景图片`body {  background-image: url('xxx'), url('xxx');  background-position: center, top;  background-repeat: repeat, no-repeat;  background-size: contain, cover;}` 如何给背景图叠加突变`body {  background-image:     linear-gradient(      4deg,       rgba(38,8,31,0.75) 30%,       rgba(213,49,127,0.3) 45%,       rgba(232,120,12,0.3) 100%),      url("xxx");  background-size: cover;  background-repeat: no-repeat;  background-attachment: fixed;  background-position: center}` 如何将背景图设为文本色彩`<body> <h1>hello!!!</h1></body>body {  display: flex;  align-items: center;  justify-content: center;  flex-direction: column;  width: 100%;  text-align: center;  min-height: 100vh;  font-size: 120px;}h1 {   background-image: url("xxx");  background-clip: text;  -webkit-background-clip: text;  color: transparent;}` 如何获取和设置盒子的宽高`//第一种dom.style.width/height //只能获取内联款式的元素宽高//第二种dom.currentStyle.width/height //只有IE浏览器反对//第三种dom.getComputedStyle(Dom).width/height //只有浏览器渲染后能力获取 兼容好//第四种dom.getBoundingClientRect().width/height //计算一个元素的相对地位(绝对于视窗左上角) 能拿到元素的left、right、width、height` 如何让图片垂直居中`img {  vertical-align: middle;  margin-top: -xpx;}` 打消图片自带的间距`img {  display: block;}// 或者 父盒子div {  font-size: 0;}`

April 2, 2021 · 1 min · jiezi

关于javascript:小米的200万不是这么好挣的

前言看了前两天小米公布的全新LOGO,置信大多数人反馈和我一样,啊啊???就这!!!。而后我又从网上翻出了小米延聘的日本国内设计师原研哉,对于设计小米新的LOGO设计理念的诠释。看完这句话第一反馈就是果然是出名设计师人家这个设计理念比单纯的设计值钱,这200W不亏!!而后我转念一想那这样我也行,我没有200w的思维还不能比葫芦画瓢吗?!于是我着手用css实现一波,给敌人夸耀夸耀。 说干就干这不很简略吗,网上这么多说其实就是一句border-radius的事,分分钟钟给他画进去。然而真的是这样的吗,总是感觉事件没这么简略。于是我现用网上的办法画了一个LOGO,成果如下:看出什么问题了吗?你说这不一样吗都是圆角矩形啊?没关系接下来咱们把它和小米的LOGO放到一起看一下。看进去了吗?对!!没错!!被你发现了,小米的圆角矩形是平滑圆角的。那问题来了,这样的话如何用css实现呢?难道只能贴图片了吗?不!!答案是否定的,其实还有个乏味的货色,那就是“Painting API”。通过Painting API它容许你再css中调用paint函数,而后通过JavaScript定义一个Paint Worklet来加载你注册的画板,其实就是你通过JavaScript来画出你想要失去的任何图形。具体介绍能够查看这几位大佬的文章:https://juejin.cn/post/694581...https://zhuanlan.zhihu.com/p/...https://www.zhangxinxu.com/wo... 步入正题首先定义css和html <div class="box"></div>.box { background: #ff6900; -webkit-mask-image: paint(smooth-corners); width: 100px; height: 100px; }在页面上将JS作为模块引入 (CSS.paintWorklet || paintWorklet).addModule("./smooth-corners.js");重点来了:在"smooth-corners.js"文件中注册paint,绘制图形 registerPaint('smooth-corners', class { paint(ctx, size) { ctx.fillStyle = 'black' // n=4 时,绘制一个方圆形 const n = 4 let m = n if (n > 100) m = 100 if (n < 0.00000000001) m = 0.00000000001 const r = size.width / 2 const w = size.width / 2 const h = size.height / 2 ctx.beginPath(); for (let i = 0; i < (2*r+1); i++) { const x = (i-r) + w const y = (Math.pow(Math.abs(Math.pow(r,m)-Math.pow(Math.abs(i-r),m)),1/m)) + h if (i == 0) ctx.moveTo(x, y) else ctx.lineTo(x, y) } for (let i = (2*r); i < (4*r+1); i++) { const x = (3*r-i) + w const y = (-Math.pow(Math.abs(Math.pow(r,m)-Math.pow(Math.abs(3*r-i),m)),1/m)) + h ctx.lineTo(x, y) } ctx.closePath() ctx.fill() }})这样一个类小米LOGO的平滑圆角矩形就绘制实现了,成果如下 ...

April 2, 2021 · 1 min · jiezi

关于css:关于平滑滚动

有些时候,咱们须要用代码去管制滚动条滚动到指定地位,同时心愿滚动成果很平滑,而不是很僵硬的间接就滚动了,用户简直都感知不到。计划一:操作容器元素 const dom = document.querySelector('.list-body');//滚动容器domdom.scrollTop = height;这一行只是让滚动到指定的地位,还须要css才能够让滚动成果平滑 .list-body { overflow: auto; scroll-behavior: smooth; ... }计划二:操作内容元素Element.scrollIntoView() 办法, 让以后的元素滚动到浏览器窗口的内。详见MDN

April 1, 2021 · 1 min · jiezi

关于css:利用css创建等宽并列按钮

场景在日常开发需要中常常会遇到一些场景,存在并列的两个按钮,如确认与勾销,他们的宽度是一样的,并处在同一行个别状况下,咱们抉择通过定宽要解决这个问题,只有使两个按钮宽度雷同,并在外层套一个flex布局的容器即可,如下:<div class="btns"> <div class="btn">confirm</div> <div class="btn">cancel</div></div>.btns { diaplay: flex; .btn { width: 100px; }}但如果思考到按钮文本长度不一样的时候,如须要适配多语言的时候,因为不同语言,长度未必雷同,都设置100px的话有可能短的文案,按钮显得过长,唱的文案,按钮显得过短,甚至文案比按钮还长,而减少宽度的话又会影响短文案的展现,最终可能须要针对不同语言设置不同宽度计划思考不设置宽度的计划,让width随文字宽度自适应,同时又要保障两个按钮的宽度统一的话,能够思考让父容器宽度等于子元素,而后两个按钮设为display: block使其高低散布,宽度等于100%这样父容器的宽度就会等于最长的那个按钮宽度,而后因为按钮100%的宽度,另一个较短的按钮宽度也会主动等于较长的那个按钮最初通过top right定位,将上面的按钮挪到与第一个按钮平行即可这里须要留神,因为应用了top来挪动元素,若top设为百分比,则必须给每个按钮设置一个高度,否则其top必须写成具体数值具体代码如下: <div class="btns"><div class="btn b1">confirm</div><div class="btn b2">cancel</div></div>/////////////////////////////////////////.btns { display: inline-block; position: relative; width: auto; display: inline-block; position: relative; width: auto; height: 100px; line-height: 100px; .btn { display: block; width: 100%; position: relative; border: 1px solid black; text-align: center; padding: 0 10px; } .b2 { top: -100%; right: calc(-100% - 36px); }}

April 1, 2021 · 1 min · jiezi

关于css:关于CSS单位的一些总结

Tips:对于蕴含块的常识,能够先看看《对于CSS中设置overflow属性的值为hidden的相干了解》这篇文章,上面会波及到。height 高height设置百分比的时候,简略的了解是绝对父结点的高来计算的,能够看个例子(点击此处查看)。 咱们设置了父结点的高和兄弟结点的高,最终发现设置100%高的后果和父结点的高统一。 那么,如果咱们不给父结点设置高会怎么样?还是看看例子(点击此处查看),后果发现height:100%生效了。 是的,第一个孩子只是把父结点撑起来了。如果加个定位会怎么样?革新一下例子(点击此处查看)。哈哈哈,高又复原了。 可能你会好奇,如果我给父结点设置高的同时用孩子把父结点撑起来(同时加定位)会怎么样?看看例子(点击此处查看)。后果,依照父结点计算。 padding 内间距padding能够别离设置上下左右四个方向的间距,无论是哪个方向,如果应用百分比作为单位,都是参考父元素的宽计算。 来看个例子(点击此处查看),咱们给div设置的padding:10%,试着缩放浏览器能够发现,只有浏览器的宽扭转了,padding才会扭转,这样也初步验证了咱们下面提到的。 进一步,咱们对例子(点击此处查看)进行革新:加了一层设置了固定宽的父结点。 按理说,因为父结点的宽是固定的,无论浏览器宽(也就是body的宽)如何扭转,都不会影响padding的值,而事实却掐恰相同。 为什么? 因为咱们给设置padding的div设置了相对定位,此时,这个div曾经脱离文档流,如果仍旧依据物理上的父div来计算padding会不会不适合?所以,下面说的父结点不是物理上的,而是布局上的,精确的说,就是蕴含块。 因为设置了相对定位,此时其蕴含块曾经变成了body,所以padding的百分比仍旧是绝对body的宽来计算的。 那么,padding的这个个性有什么技巧能够总结? 如果咱们当初有一个容器,其宽不确定,可是咱们心愿外面的某个子元素高始终是此容器宽的一半,怎么办? 是的,padding的这个特点就把宽和高分割起来了,�你能够看看最终的例子(点击此处查看)。

April 1, 2021 · 1 min · jiezi

关于css:CSS了解REM移动端适配方案

REM 是什么首先理解一下 CSS 中一些常见的长度单位: px 相对长度单位,像素留神:浏览器(Chrome)默认文字大小为 16px,所能设置的最小单位为 12px em绝对长度单位,这个单位示意元素的font-size的计算值。如果用在font-size 属性自身,它会继承父元素的font-size。 如果元素的 font-size 为 16px,元素的宽度设置为 width = 10em,则 width = 10em = 160px;如果元素父元素的 font-size 为 12px,元素的 font-size 设置为 font-size = 2em,则元素的 font-size = 2em = 24px; 能够艰深并绝对不谨严地了解为 1em 是一个汉字的宽度。 REM绝对长度单位,这个单位代表根元素的 font-size 大小(例如 <html> 元素的font-size)。比方根元素的 font-size 为 16px,则 1rem = 16px。 vh 绝对长度单位,视口高度的 1/100。vw 绝对长度单位,视口宽度的 1/100。总得来说,REM 是根元素 font-size 的长度单位,也是挪动端适配的解决方案之一。 动静 REM随着挪动端设施越来越多,尺寸屏幕也大小不一。那么如何给页面写 CSS 呢?以下是几种挪动端适配的计划: 给每个设施尺寸定制一套 CSS毛病:工作量大,不切实际 应用响应式毛病:须要辨别多个尺寸区段,开发效率也不高 应用百分比布局毛病:宽高不好确定 vw/vh 计划元素的宽高应用 vw/vh 长度单位,与设施视口宽高关联 ...

April 1, 2021 · 1 min · jiezi

关于css:css布局flex弹性布局移动端完美解决方案

Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了弱小的空间散布和对齐能力。本文给出了 flexbox 的次要个性。 咱们说 flexbox 是一种一维的布局,是因为一个 flexbox 一次只能解决一个维度上的元素布局,一行或者一列。作为比照的是另外一个二维布局网格布局,当前会和大家讲到 目录1,如何应用2, Flexbox的两根轴线3, Flex 容器4,API以及用例 1,- 如何应用-因为css用法过于简略,所以先给大家介绍简略的应用办法,随后介绍一些重要的概念 <style type="text/css"> #flex-box { background: #ccc; display: flex; /* display 属性规定元素应该生成的框的类型 ,咱们是flex*/ flex-direction: row; /* 接下来咱们会讲到*/ } #flex-box > div { background: #5990dc; margin: 20px; padding: 40px; } </style> <div id="flex-box"> <div>block1</div> <div>block2</div> <div>block3</div> </div>效果图如下: 2,- Flexbox的两根轴线 当应用 flex 布局时,首先想到的是两根轴线 — 主轴和穿插轴。主轴由 flex-direction 定义,另一根轴垂直于它。咱们应用 flexbox 的所有属性都跟这两根轴线无关, 所以有必要在一开始首先了解它。 主轴主轴由 flex-direction 定义,能够取4个值: ...

April 1, 2021 · 2 min · jiezi

关于github:一个很酷的-Vue3-的请求库

 大家好,我是为宽广程序员兄弟操碎了心的小编,每天举荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节俭开发效率,实现不加班不熬夜不掉头发,是我的指标! 明天小编举荐一款很酷的 Vue3 的申请库,它能轻松帮你治理申请状态(反对SWR,轮询,谬误重试,缓存,分页等)的 Vue 3 申请库。 个性你失去的数据齐全是响应式的,不必再为数据的不响应而操心数据流可能更快、更便捷地出现在用户背后,不必再忍耐漫长的 Loading 动画齐全应用 Typescript 编写,具备敌对的类型反对轮询申请主动处理错误重试内置申请缓存轻量化开箱即用乏味的可交互文档开源协定 应用 MIT 开源许可协定 链接地址 公众号【Github导航站】回复关键词【vueq】获取git地址 CDN<script src="https://unpkg.com/vue-request"></script>它将以 window.VueRequest.useRequest 裸露在全局 用例import { useRequest } from 'vue-request';export default { setup() { const { data } = useRequest('api/user'); return () => <div>{data.value}</div>; },};更多高级用法与教程,能够到官网理解下 结尾 本期就分享到这里,我是小编南风吹,专一分享好玩乏味、离奇、实用的开源我的项目及开发者工具、学习资源!心愿能与大家独特学习交换,欢送关注我的公众号【Github导航站】。

April 1, 2021 · 1 min · jiezi

关于javascript:小程序使用less语法

从去年五月份开始咱们始终在做小程序我的项目,通过一年的迭代性能曾经欠缺…… 扯远了,西内 刚开始开发的时候应用wxss书写款式代码,那感觉,那效率,PM差点气到职。 于是咱们开始寻找高效的解决方案(寻找个屁,百度一搜一堆),网上很多解决方案都是在编辑器配置,emmmm 这是真的高效。 因为的确不习惯改编辑器配置,咱们还是写了一个脚本,用来编译less。(老表,间接上代码,BB这么多)。 一种是lessc编译,一种是用less的render办法; 小程序尽量不要引入本地less包,因而lessc/less 都是用的global环境 (恁娘的)。 github地址: node-compile-less 心愿给个激励,感激 /** * @file 小程序编译less * */const fs = require('fs');const path = require('path');// const less = require('less');const {exec} = require('child_process');const globalLessc = '/Users/yujinjiang/.nvm/versions/node/v14.4.0/bin/lessc';// 编译配置const COMPILE_CONFIG = { SOURCE: 'less', TARGET: 'wxss'};// 编译目录const observedDirs = [ path.join(__dirname, './pages/'), path.join(__dirname, './packageA/'), path.join(__dirname, './components/'),];// 编译监听observedDirs.forEach(observedDir => { // 监听选项 const watchOptions = { persistent: true, recursive: true, encoding: 'utf-8' }; fs.watch( observedDir, watchOptions, (eventType, filename) => { const ext = filename.slice(filename.lastIndexOf('.') + 1); const { SOURCE, TARGET } = COMPILE_CONFIG; if (ext === SOURCE) { const sourcePath = path.join(observedDir, filename); const targetPath = sourcePath.slice(0, sourcePath.lastIndexOf('.') + 1) + TARGET; exec(`${globalLessc} ${sourcePath} ${targetPath}`); // const encodingOption = { // encoding: 'utf-8' // }; // fs.readFile( // sourcePath, // encodingOption, // (e, data) => { // if (e) { // return; // } // // less.render(data) // .then(code => { // // fs.writeFile( // targetPath, // code.css, // encodingOption, // (e) => { // if (e) { // console.log(e); // } // } // ); // }) // .catch(() => {}); // } // ); } } );});

March 31, 2021 · 1 min · jiezi

关于前端:VueDraggable拖拽排序组件

VueDraggable 是一个专门解决拖拽排序和拖拽分组的前端开源代码库。这是我在我的项目中用过的最好的拖拽排序解决方案了。 Vue.Draggable 简直满足拖拽性能的所有需要,反对 cdn 间接引入js文件,反对 Vue cli 形式引入。官网有很具体的文档以及十分短缺的代码例子,上手非常容易。 应用步骤如下: npm i -S vuedraggable在须要用的页面中引入 <template> <div> <!--应用draggable组件--><draggable v-model="myArray" chosenClass="chosen" forceFallback="true" group="people" animation="1000" @start="onStart" @end="onEnd"> <transition-group> <div class="item" v-for="element in myArray" :key="element.id">{{element.name}}</div> </transition-group></draggable> </div></template><style scoped> /*被拖拽对象的款式*/ .item { padding: 6px; background-color: #fdfdfd; border: solid 1px #eee; margin-bottom: 10px; cursor: move; } /*选中款式*/ .chosen { border: solid 2px #3089dc !important; }</style><script>//导入draggable组件import draggable from 'vuedraggable'export default { //注册draggable组件 components: { draggable, }, data() { return { drag:false, //定义要被拖拽对象的数组 myArray:[ {people:'cn',id:1,name:'www.itxst.com'}, {people:'cn',id:2,name:'www.baidu.com'}, {people:'cn',id:3,name:'www.taobao.com'}, {people:'us',id:4,name:'www.google.com'} ] }; }, methods: { //开始拖拽事件 onStart(){ this.drag=true; }, //拖拽完结事件 onEnd() { this.drag=false; }, },};这是Vue.Draggable的官网文档地址,内容较为具体。http://www.itxst.com/vue-drag... ...

March 31, 2021 · 1 min · jiezi

关于javascript:前端页面样式之滚动条样式修改

具体实现 实现代码 ::-webkit-scrollbar { width: 4px; height: 4px; border-radius: 2px;}/*滚动区域背景*/::-webkit-scrollbar-track-piece { background-color: #fcf9f8; -webkit-border-radius: 6px;}/*竖向滚动条*/::-webkit-scrollbar-thumb:vertical { height: 5px; width: 5px; background-color: #D9E0FF; border-radius: 3px; -webkit-border-radius: 6px;}/*横向滚动条*/::-webkit-scrollbar-thumb:horizontal { width: 5px; height: 5px; border-radius: 2px; background-color: #D9E0FF; -webkit-border-radius: 6px;}

March 31, 2021 · 1 min · jiezi

关于javascript:前端原生开发的一些自动化处理

Github初始目录设置在最后将文件进行正当演绎,有助于前期的我的项目打包工作。 ├─index.html # HTML页面├─src | ├─static # 动态文件门路| | └favicon.png| ├─js # JavaScript文件门路| | └main.js| ├─css # CSS文件门路| | └style.css我的项目运行同步预览应用原生开发页面有一个问题,就是在测试的时候你得一直去刷新页面,而不会实时监听你的文件改变而进行刷新同步。 当然咱们能够应用VSCODE去进行开发,应用live server插件去进行同步预览。 但不是每个人都是用VSCODE进行我的项目开发的,因而咱们还是应用node去实现我的项目的同步预览。 // 初始化Nodeyarn// 装置browser-syncyarn add browser-sync这里我应用browser-sync,更多的应用办法能够去官网查看,这里就不多说了。 装置实现后,关上命令行工作,执行以下命令。 // 进入我的项目门路cd nativeTemplate// 履行browsersync(监听html、css、js文件)browser-sync start --server --files "*.html, src/css/*.css, src/js/*.js"但每次开始我的项目都得去执行命令就会比拟麻烦,咱们能够将其配置到package.json中。 { "scripts": { "serve": "browser-sync start --server --files \"*.html, src/css/*.css, src/js/*.js\"" }}这样子咱们当前只须要执行yarn serve就能够运行我的项目了。 配置跨域当你原生开发而后须要对接接口的时候,配置跨域就是一个挺头疼的事件了。 当然你能够让后端将接口设置CORS跨资源共享,达到跨域的目标。 然而咱们也能够应用http-server来实现跨域配置。 // 装置http-serveryarn add http-server具体的应用操作我也不多说了,能够去看一下文档阐明。这里就只讲讲咱们跨域要用到的操作。 咱们先执行上面的命令,开启本地8888端口,而后重定向到咱们的API接口。 http-server -p 8888 --cors -P https://jsonplaceholder.typicode.com当然你仍旧能够配置到package.json里,而后执行yarn http-server进行启动。 { "scripts": { "http-server": "http-server -p 8888 --cors -P https://jsonplaceholder.typicode.com" }}而后这时候,咱们就能够在main.js进行申请接口了。 ...

March 31, 2021 · 2 min · jiezi

关于前端:巧用-SVG-滤镜还能制作表情包

本文将介绍一些应用 SVG feTurbulence 滤镜实现的一些乏味、大胆的的动效。 系列另外两篇: 有意思!弱小的 SVG 滤镜有意思!不规则边框的生成计划背景明天在群外面聊天,看到有人发这个表情包: 刚好最近始终在学习 SVG,脑海中就把这个表情包的成果和 feTurbulence 滤镜关联了起来。 如果咱们有一张相似上图表情包的动态图,利用 feTurbulence 生成的噪声函数,使用在动态的表情包之上,再增加些许动画,是不是也能制作一张相似的动图成果呢? 什么是 SVG feTurbulence 滤镜?如果你对 SVG 滤镜还不算太理解,能够简略看看我的这篇文章入门:有意思!弱小的 SVG 滤镜 这里咱们会用到 SVG 中的 feTurbulence 滤镜。再简略介绍下。 feTurbulence 滤镜turbulence 意为湍流,不稳固气流,而 SVG <feTurbulence> 滤镜可能实现半透明的烟熏或波状图像。通常用于实现一些非凡的纹理。滤镜利用 Perlin 噪声函数创立了一个图像。噪声在模仿云雾成果时十分有用,能产生非常复杂的质感,利用它能够实现了人造纹理比如说云纹、大理石纹的合成。 简略看个 DEMO: <div>Coco</div><div class="turbulence">Coco</div><svg> <filter id="fractal" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%"> <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.03" numOctaves="1" /> <feDisplacementMap in="SourceGraphic" scale="50"></feDisplacementMap> </filter></svg>.turbulence { filter: url(#fractal);}右边是失常的成果,后边是利用了 <feTurbulence> 的成果,你能够试着点进 Demo,更改 baseFrequency 和 numOctaves 参数的大小,能够看到不同的成果: CodePen Demo -- feTurbulence text demo 将 feTurbulence 滤镜利用于图片咱们尝试把上述 DEMO 中的文字转换成图片。我找到了一张动态的哭的表情包: 简略革新下代码: ...

March 31, 2021 · 3 min · jiezi

关于前端:前端CSS高频面试题2empxremvhvw的区别

一、介绍传统的我的项目开发中,我么只会用到px、%、em这几个单位,它们能够实用于大部分的我的项目开发,并且具备良好的兼容性。 从CSS3开始,浏览器对计量单位的反对又晋升到了另外一个境界,新增了rem、vh、vw、vm等一些新的计量单位。 利用这些新的单位开发出比拟良好的响应式页面,适应多种不同分辨率的终端,包含挪动设施等。 二、单位在css单位中,能够分为长度单位、相对单位,如下表所批示 CSS单位 绝对长度单位em、ex、ch、rem、vw、vh、vmin、vmax、%相对长度单位cm、mm、in、px、pt、pc明天咱们次要讲讲px、em、rem、vh、vw、vm之间的区别 1.pxpx,示意像素,所谓像素就是出现在咱们显示器上的一个个小点,每个像素点都是大小等同的,所以像素为计量单位被分在了相对长度单位中。有些人会把px认为是绝对长度,起因在于在挪动端中存在设施像素比,px理论显示的大小是不确定的。这里之所以认为px为相对单位,在于px的大小和元素的其余属性无关。2.emem是绝对长度单位。绝对于以后对象内文本的字体尺寸。如以后对行内文本的字体尺寸未被人为设置,则绝对于浏览器的默认字体尺寸(1em = 16px)。为了简化 font-size 的换算,咱们须要在css中的 body 选择器中申明font-size= 62.5%,这就使 em 值变为 16px*62.5% = 10px。这样 12px = 1.2em, 10px = 1em, 也就是说只须要将你的原来的px 数值除以 10,而后换上 em作为单位就行了。特点: em 的值并不是固定的em 会继承父级元素的字体大小em 是绝对长度单位。绝对于以后对象内文本的字体尺寸。如以后对行内文本的字体尺寸未被人为设置,则绝对于浏览器的默认字体尺寸任意浏览器的默认字体高都是 16px举个例子: <div class="big"> 我是14px=1.4em<div class="small">我是12px=1.2em</div></div><style> html {font-size: 10px; } /* 公式16px*62.5%=10px */ .big{font-size: 1.4em} .small{font-size: 1.2em}</style>这时候.big元素的font-size为14px,而.small元素的font-size为12px 3.remrem,绝对单位,绝对的只是HTML根元素font-size的值。同理,如果想要简化font-size的转化,咱们能够在根元素html中退出font-size: 62.5%。html {font-size: 62.5%; } /* 公式16px*62.5%=10px */ 这样页面中1rem=10px、1.2rem=12px、1.4rem=14px、1.6rem=16px;使得视觉、应用、书写都失去了极大的帮忙 特点: rem单位堪称集绝对大小和相对大小的长处于一身和em不同的是rem总是绝对于根元素,而不像em一样应用级联的形式来计算尺寸 4.vh、vwvw是依据窗口的宽度,分成100等份,100vw就示意满宽,50vw就示意一半宽。(vw 始终是针对窗口的宽),同理,vh则为窗口的高度。这里的窗口分成几种状况: 在桌面端,指的是浏览器的可视区域挪动端指的就是布局视口像vw、vh,比拟容易混同的一个单位是%,不过百分比宽泛的讲是绝对于父元素: 对于一般定位元素就是咱们了解的父元素对于position: absolute;的元素是绝对于已定位的父元素对于position: fixed;的元素是绝对于 ViewPort(可视窗口)5.vm绝对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vm。举个例子:浏览器高度900px,宽度1200px,取最小的浏览器高度,1 vm = 900px/100 = 9 px。三、总结「px」:相对单位,页面按准确像素展现「em」:绝对单位,基准点为父节点字体的大小,如果本身定义了font-size按本身来计算,整个页面内1em不是一个固定的值「rem」:绝对单位,可了解为root em, 绝对根节点html的字体大小来计算「vh、vw」:次要用于页面视口大小布局,在页面布局上更加不便简略「vm」:对于视口的宽度或高度中较小的那个,应用办法和vh\vm相似

March 31, 2021 · 1 min · jiezi

关于css:解决实现伪元素的-hover-效果的问题

例如,当有一个元素下面有一个伪元素时,像给这个伪元素设置一个 hover 成果,当该伪元素 hover 时,才显示该伪元素。 元素: li { background: red;}li:after { border: 1px solid blue; }这个时候,先在该伪元素所在的元素上加上 hover,而后在 hover 前面加上 :after 即可。 例如,接着下面例子中的代码,持续写如下代码: li:hover:after { border: 1px solid blue;}加上下面代码后,即可实现只有当 hover 时,显示该伪元素。留神程序,hover 在后面,after 在前面。 参考: [https://stackoverflow.com/questions/13233991/combine-after-with-hover](https://stackoverflow.com/questions/13233991/combine-after-with-hover)

March 30, 2021 · 1 min · jiezi

关于css3:10分钟理解CSS3-Grid布局

根本介绍 Grid做前端的同学应该都很相熟了,翻译成中文为“栅格”,用过bootstrap、semantic ui、ant design的同学必定都理解grid layout(删格布局),以往css框架中的grid布局个别是通过float和百分比的宽度实现的,这种实现有几种毛病: html不够简洁;须要革除浮动以防止高度塌陷;列的个数是固定的,不能灵便定义。比方bootstrap是12列,semantic ui是16列,ant design 24列。当然grid也能够用flex实现,然而并不会比用float简略多少,而且flex善于的是一维空间的布局,而对grid这种二维空间并不善于。当初css3从标准和规范层面实现了grid,编程体验大大晋升! 兼容性 用法 Grid作为一个二维的栅格零碎,由若干列(column)和行(row)形成。 1. Column (1) 设置column CSS3中的Grid能够划分为任意个数的列(column),而且每个column的宽度能够任意设置!咱们先来看一个简略的例子: <div id="content"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> <div>9</div></div>css: body{ color: #fff; text-align: center;}#content{ display: grid; grid-template-columns: 33.3% 33.3% 33.3%; max-width: 960px; margin: 0 auto;}#content div{ background: lightgrey; padding: 30px;}#content div:nth-child(even){ background: skyblue;}成果: 当咱们设置了display: grid和grid-template-columns: 33.3% 33.3% 33.3%后#content就被划分成了三行三列的grid,此时#content被称为grid container,而#content的子元素称为grid item。 咱们也能够任意扭转column的个数和宽度,比方: #content{ grid-template-columns: 10% 20% 30% 40%;}成果: (2) fr(fraction) ...

March 30, 2021 · 2 min · jiezi

关于css:手把手教你CSS-Flex布局

前言 之前做我的项目,对于布局方面没怎么深入研究过,好多页面都是能用定位就用定位,能用百分比就用百分比,导致很多中央,看似对齐了,然而就很顺当,这几天又被一个布局折磨了很久。于是痛定思痛,总结一下本人思维上的问题。 本人之前没把 CSS 的相干问题当回事,心里总是理所应当的认为,款式什么时候用到轻易百度一下就行,这种想法的结果就是,页面格调很生硬,不同分辨率的显示器适配很差,写页面的时候,也很莫名其妙,明明我写了某个款式,就是没成果,到头来还是本人跟本人过不去。 感觉跟我有一样想法的同学必定不少,不过不要紧,知错能改,善莫大焉。先从 Flex 开始,把布局给整明确,能解决一大堆款式麻烦。 1.基本原理 Flex 英文意思为,蜿蜒,屈伸,能够伸缩的布局,天生就是为了适配不同的分辨率。而且用法也很简略,首先只有通知浏览器,我是一个伸缩布局就能够了。 .faBox { display: 'flex'; //给父元素设置为伸缩布局 .sonBox1 { ... } .sonBox2 { ... }}设置完 Flex 之后,就会有上面的这个关系图,咱们一个一个看。 2.容器属性 谁被设置成了 display: flex; ,谁就是容器。下面图中,faBox 就是容器,所以容器属性要写在容器属性外面。 2.1 flex-direction 属性 从英语意思理解属性,翻译为伸缩方向,该属性能够设置主轴的方向,有六个值。 .faBox { flex-direction: row | row-reverse | column | column-reverse | initial | inherit;}上背后四个属性别离对应以下四种状况 flex-direction 还有两个可能的取值,initial 和 inherit 依据英文意思可知。 initial 意为“最后的”,是 CSS 提供的关键字,很多中央都能应用,能够疾速设置某个属性的默认值,方便快捷。 inherit 意为“继承”,能够从父元素中继承该属性。 2.2 flex-wrap 属性 依据中文意思来判断,这个货色应该是管制换行的。 ...

March 30, 2021 · 1 min · jiezi

关于requirejs:前端面试每日-31-第714天

明天的知识点 (2021.03.30) —— 第714天 (我也要出题)[html] 你是如何测试写的页面兼容性的?[css] 书写css时为什么要先写position,width, height的大小地位的属性, 后写color, bgcolor等之类的属性[js] requireJS的外围原理是什么?[软技能] 你的布局中,前端要学到什么样的水平?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!!欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨!心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

March 30, 2021 · 1 min · jiezi

关于css:前端CSS高频面试题1CSS选择器优先级以及继承属性

一、选择器CSS选择器是CSS规定的第一局部 它是元素和其余局部组合起来通知浏览器哪个HTML元素该当是被选为利用规定中的CSS属性值的形式 选择器所抉择的元素,叫做“选择器的对象” 咱们从一个HTML构造开始 <div id="box"> <div class="one"> <p class="one_1"> </p> <p class="one_1"> </p> </div> <div class="two"></div> <div class="two"></div> <div class="two"></div></div>对于CSS属性选择器罕用的有:id选择器(#box),抉择id为box的元素类选择器(.one),抉择类名为one的所有元素标签选择器(div),抉择标签为div的所有元素后辈选择器(#box div),抉择id为box元素外部所有的div元素子选择器(.one>one_1),抉择父元素为.one的所有.one_1的元素相邻同胞选择器(.one+.two),抉择紧接在.one之后的所有.two元素群组选择器(div,p),抉择div、p的所有元素还有一些应用频率绝对没那么多的选择器:伪类选择器 :link :抉择未被拜访的链接:visited:选取已被拜访的链接:active:抉择流动链接:hover :鼠标指针浮动在下面的元素:focus :抉择具备焦点的:first-child:父元素的首个子元素伪元素选择器 ::first-letter :用于向文本的首字母增加非凡款式::first-line :用于向文本的首行增加非凡款式::before : 可用于在元素内容之前插入一些内容::after : 可用于在元素内容之后插入一些内容::selection 伪元素匹配用户抉择的元素局部。属性选择器 [attribute] 抉择带有attribute属性的元素[attribute=value] 抉择所有应用attribute=value的元素[attribute~=value] 抉择attribute属性蕴含value的元素[attribute|=value]:抉择attribute属性以value结尾的元素二、优先级!important > 内联 > ID选择器 > 类选择器 > 标签选择器具体可参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Specificity 三、继承属性在css中,继承是指的是给父元素设置一些属性,后辈元素会主动领有这些属性 对于继承属性,能够分成: 字体系列属性 font:组合字体font-family:规定元素的字体系列font-weight:设置字体的粗细font-size:设置字体的尺寸font-style:定义字体的格调font-variant:偏大或偏小的字体文字系列属性 text-indent:文本缩进text-align:文本程度line-height:行高word-spacing:减少或缩小单词间的空白letter-spacing:减少或缩小字符间的空白text-transform:管制文本大小写direction:规定文本的书写方向color:文本色彩元素可见性 visibility表格布局属性 caption-side:定位表格题目地位border-collapse:合并表格边框border-spacing:设置相邻单元格的边框间的间隔empty-cells:单元格的边框的呈现与隐没table-layout:表格的宽度由什么决定列表属性 list-style-type:文字后面的小点点款式list-style-position:小点点地位list-style:以上的属性可通过这属性汇合援用 quotes:设置嵌套援用的引号类型光标属性 cursor:箭头能够变成须要的形态继承中比拟非凡的几点:a 标签的字体色彩不能被继承h1-h6标签字体的大下也是不能被继承的无继承的属性display文本属性:vertical-align、text-decoration盒子模型的属性:宽度、高度、内外边距、边框等背景属性:背景图片、色彩、地位等定位属性:浮动、革除浮动、定位position等生成内容属性:content、counter-reset、counter-increment轮廓款式属性:outline-style、outline-width、outline-color、outline页面款式属性:size、page-break-before、page-break-after

March 30, 2021 · 1 min · jiezi

关于css:css-视频弹幕穿透真人滚动

先放一张效果图: mask: 容许使用者通过遮罩或者裁切特定区域的图片的形式来暗藏一个元素的局部或者全副可见首先理解下css mask,mask能够接管一个图片类型或者一个相似background属性的突变,也就是radial-gradient,其应用办法也相似background属性。详见:(https://developer.mozilla.org...。 咱们能够通过设置一个两头通明镂空的背景图,实现穿透:以下图片设置成背景图代表视频中的人或动物: 以下图片更像下面设置成背景图的图片的反向抉择,并且跟div.wrapper同样大小(只是为了让通明局部跟上图重合,不便本地测试而已): <style> #mask { position: relative; width: 1000px; height: 500px; background: url(https://segmentfault.com/img/bVcQTsO) no-repeat center; } .wrapper { position: absolute; left: 0; top: 0; width: 1000px; height: 500px; overflow: hidden; mask: url(https://segmentfault.com/img/bVcQTsQ) no-repeat 0 0 / 1000px 500px; -webkit-mask: url(https://segmentfault.com/img/bVcQTsQ) no-repeat 0 0 / 1000px 500px; } p { width: 150px; height: 15px; margin-left: calc(100% + 150px); } .li1 { animation: move 8s 4s infinite linear; } .li2 { animation: move 8s 7s infinite linear; } .li3 { animation: move 8s 1s infinite linear; } .li4 { animation: move 8s 3s infinite linear; } .li5 { animation: move 8s 0s infinite linear; } .li6 { animation: move 8s 6s infinite linear; } .li7 { animation: move 8s 1s infinite linear; } .li8 { animation: move 8s 9s infinite linear; } .li9 { animation: move 8s 2s infinite linear; } .li5 { animation: move 8s 0s infinite linear; } .li6 { animation: move 8s 6s infinite linear; } .li7 { animation: move 8s 1s infinite linear; } .li8 { animation: move 8s 9s infinite linear; } .li9 { animation: move 8s 2s infinite linear; } @keyframes move { from { margin-left: calc(100% + 150px); } to { margin-left: -150px; } } </style> <body> <div id="mask"></div> <div class="wrapper"> <p class="li1">li66666666666666</p> <p class="li2">li66666666666666</p> <p class="li3">li66666666666666</p> <p class="li4">li66666666666666</p> <p class="li5">li66666666666666</p> <p class="li6">li66666666666666</p> <p class="li7">li66666666666666</p> <p class="li8">li66666666666666</p> <p class="li9">li66666666666666</p> <p class="li5">li66666666666666</p> <p class="li6">li66666666666666</p> <p class="li7">li66666666666666</p> <p class="li8">li66666666666666</p> <p class="li9">li66666666666666</p> </div></body>这里只是简略的一个模仿,实在场景中,必定不会这么简略,通明镂空局部都是后端通过算法对视频的操作得出的,而后前端通过websocket接管一张一张的mask遮罩图。 ...

March 29, 2021 · 2 min · jiezi

关于css:css-两端对齐

模仿一个div两端对齐的状况:<div class="box">两端对齐</div>.box { width: 200px; height: 36px; line-height: 36px; margin: 20px auto; background: #eee; text-align: justify; -webkit-text-align: justify; text-align-last: justify;/* ie9*/ -webkit-text-align-last: justify;/*chrome 20+*/ text-justify: distribute; /* firefox */}成果: 总结:text-align: justify;-webkit-text-align: justify;text-align-last: justify;/* ie9*/-webkit-text-align-last: justify;/*chrome 20+*/text-justify: distribute; /* firefox */

March 29, 2021 · 1 min · jiezi

关于前端:手把手教你用纯css3实现轮播图效果

一、前言css3动画成果的弱小显而易见,自它呈现始终热度不减,它与js动画的优劣也始终成为前端界争执的话题,不可置疑的是css3动画的呈现在肯定水平上升高了动画成果的实现难度,利于前端的学习,其精简的代码量把咱们从烦人的js调试中解放出来,当然css的动画成果有其局限性,咱们不能只用css3模拟出全副的就是动画,另外就是浏览器的兼容性问题。咱们这次用css3实现一个轮播图成果,体验一下css3的弱小。 首先阐明咱们可次只实现了主动轮播,成果也是最常见的淡入淡出,并未实现点击轮换成果,至多在我目前程度来看,主动轮播与点击轮换两者纯css3只能选其一,如果能够同时实现两种成果的办法,请通知我。 二、布局<section class="slider-contaner"> <ul class="slider"> <li class="slider-item slider-item1"></li> <li class="slider-item slider-item2"></li> <li class="slider-item slider-item3"></li> <li class="slider-item slider-item4"></li> <li class="slider-item slider-item5"></li> </ul></section>html代码没有什么可说的,款式的话首先必然slider的大盒子必然是绝对定位,另外咱们采纳在li标签中增加background-image,因为这样才有可能用纯的css实现响应式,另外背景图为了在响应式中看清全貌,必然应用background-size:100%,另外就是高度问题了,显然slider-container必须是和li的高度一致,因为响应式中必然这个高度不能固定死,所以应用height属性显然不行,padding属性能够解决这个问题,一是background-image能够显示在padding中,二是padding中以%为单位是以父元素宽度为基准的。 *{ margin:0; padding:0;}ul,li{ list-style: none;}.floatfix { *zoom: 1;}.floatfix:after { content: ""; display: table; clear: both;}.slider-contaner{ width:100%; position:relative;}.slider,.slider-item{ padding-bottom:40%;}.slider-item{ width:100%; position:absolute; background-size:100%;}.slider-item1{ background-image:url(imgs/1.jpg);}.slider-item2{ background-image:url(imgs/2.jpg);}.slider-item3{ background-image:url(imgs/3.jpg);}.slider-item4{ background-image:url(imgs/4.jpg);}.slider-item5{ background-image:url(imgs/5.jpg);}三、设计动画淡入淡出成果必定是应用opacity,首先整体来看所有图片的淡入淡出都是同一个动画,只是工夫不一样而已,这必定是利用animation-delay来管制,动画有限轮换必定应用animation-iteration-count: infinite,咱们这次5张图片,整个动画分为图片停留和淡入淡出两个成果,用下图示意,箭头示意淡入淡出过程。 因为css3中没有一个属性是规定两次动画播放的工夫距离,所以咱们必须把其余图片淡入淡出时该图片的成果写进动画里,显然这时候是opacity:0; 咱们为了写动画的不便,动画应用线性函数,也就是animation-timing-function:linear;整个过程应用20s,一次停留应用3秒,一次淡入淡出应用1s,折合成百分比也就是15%和5%; @keyframes fade{0%{ opacity:0; z-index:2;}5%{ opacity:1; z-index: 1;}20%{ opacity:1; z-index:1;}25%{ opacity:0; z-index:0;}100%{ opacity:0; z-index:0;}}接下来就是为每张图片增加animation-delay了,因为第一张图片必须显示在最前,所以其余通过相邻兄弟选择器应用opacity:0,第一张图片开始不须要淡入淡出,间接跳至停留也就是5%,所以animation-delay为-1s,第二章图片和第一张相隔20%,也就是4s,animation-delay为3s,以此类推 .slider-item + .slider-item{ opacity:0;}.slider-item1{ animation-delay: -1s;}.slider-item2{ animation-delay: 3s;}.slider-item3{ animation-delay: 7s;}.slider-item4{ animation-delay: 11s;}.slider-item5{ animation-delay: 15s;}这个时候咱们的轮播图能够动了 ...

March 29, 2021 · 1 min · jiezi

关于css:CSS3圆角的制作

分享: CSS3圆角技术能十分好的丑化你的页面成果,而且防止了应用图片辅助,一则省去了制作图片的工夫,二则省去了浏览器加载图片造成的提早和带宽。现在,这种利用CSS制作圆角的技术曾经失去了大多数支流浏览器的反对,包含Safari,谷歌浏览器,IE,Opera和火狐浏览器。上面让咱们来看看border-radius的语法,解释,以及IE是如何反对它的。 语法和阐明在CSS3中用来生成圆角成果的属性是border-radius.这个属性跟大家熟知的width等属性的用法类似: .roundElement { border-radius: 10px;}下面的这句代码的作用是设置一个元素的四个角的弧度半径值都为10px。你也能够对每个角独自指定: .pearElement { border-top-left-radius: 7px; border-top-right-radius: 5px; border-bottom-right-radius: 6px; border-bottom-left-radius: 8px;}如果你感觉下面的写法太简单,能够应用上面border-radius简写的办法: oddRoundElement { border-radius: 12px 5px 12px 5px; /* or */ border-radius: 12px 5px;}四个值别离代表的是top-left, top-right, bottom-right, bottom-left四个角。 各浏览器对border-radius的反对因为这种圆角技术是CSS3里呈现的,老式浏览器或较晚期的浏览器中用到这个属性时须要在CSS里增加浏览器引擎前缀(vendor prefixes)。会是{prefix}-border-radius这样一个样子,而具体各种浏览器引擎前缀是上面这样的写法: -moz-border-radius: 20px;-webkit-border-radius: 20px;-o-border-radius: 20px;/* 火狐浏览器 */-moz-border-radius-topleft:15px; /* top left corner */-moz-border-radius-topright:50px; /* top right corner */-moz-border-radius-bottomleft:15px; /* bottom left corner */-moz-border-radius-bottomright:50px; /* bottom right corner */-moz-border-radius:10px 15px 15px 10px; /* shorthand topleft topright bottomright bottomleft *//* webkit引擎的浏览器 */-webkit-border-top-left-radius:15px; /* top left corner */-webkit-border-top-right-radius:50px; /* top right corner */-webkit-border-bottom-left-radius:15px; /* bottom left corner */-webkit-border-bottom-right-radius:50px; /* bottom right corner */</pre>基本上,你须要对每种浏览器引擎做各自的申明,加上这些厌恶的略微不同的代码来保障齐全反对border-radius。然而,如果你应用的是最新版的浏览器,包含火狐、谷歌、IE等,你不须要应用这些前缀,因为这个技术曾经很成熟,在各种最新版的浏览器里曾经受到了广泛反对。 ...

March 29, 2021 · 1 min · jiezi

关于css:CSS3中的变形处理transform功能旋转缩放倾斜移动

1 transform属性在CSS3中,能够利用transform性能实现文字或图像的旋转、缩放、歪斜、挪动这4中类型的变形解决。 (1)浏览器反对 到目前为止:Safari3.1以上、Chrome8以上、Firefox4以上、Opera10以上浏览器反对该属性。  2 旋转应用rotate办法,在参数中退出角度值,角度值前面跟示意角度单位的“deg”文字即可,旋转方向为顺时针方向。 transform:rotate(45deg); 3 缩放 应用scale办法来实现文字或图像的缩放解决,在参数中指定缩放倍率。 transform:scale(0.5);//放大一半 (1)能够别离指定元素的程度方向的放大倍率与垂直方向的放大倍率 transform:scale(0.5,2);//程度方向放大一半,垂直方向放大一倍。 4 歪斜 应用skew办法实现文字或图像的歪斜解决,在参数中别离指定程度方向上的歪斜角度与垂直方向上的歪斜角度。 transform:skew(30deg,30deg);//程度方向上歪斜30度,垂直方向上歪斜30度。 (1)只应用一个参数,省略另一个参数 这种状况下视为只在程度方向上进行歪斜,垂直方向上不歪斜。 transform:skew(30deg); 5 挪动应用translate办法来挪动文字或图像,在参数中别离指定程度方向上的挪动间隔与垂直方向上的挪动间隔。 transform:translate(50px,50px);// 程度方向上挪动50px,垂直方向上挪动50px (1)只应用一个参数,省略另一个参数 这种状况下视为只在程度方向上挪动,垂直方向上不挪动。 transform:translate(50px); 6 对一个元素应用多种变形的办法transform:translate(150px,200px) rotate(45deg) scale(1.5); 7 指定变形的基准点在应用transform办法进行文字或图像变形的时候,是以元素的中心点为基准点进行变形的。 transform-origin属性应用该属性,能够扭转变形的基准点。 transform:rotate(45deg); transform-origin:left bottom;//把基准点批改为元素的左下角 (1)指定属性值 基准点在元素程度方向上的地位:left、center、right 基准点在元素垂直方向上的地位:top、center、bottom 8 3D变形性能(1)旋转 别离应用rotateX办法、rotateY办法、rotateZ办法使元素围绕X轴、Y轴、Z轴旋转,在参数中退出角度值,角度值前面跟示意角度单位的deg文字即可,旋转方向为顺时针旋转。 transform:rotateX(45deg); transform:rotateY(45deg); transform:rotateZ(45deg); transform:rotateX(45deg) rotateY(45deg) rotateZ(45deg); transform:scale(0.5) rotateY(45deg) rotateZ(45deg); (2)缩放 别离应用scaleX办法、scaleY办法、scaleZ办法使元素按X轴、Y轴、Z轴进行缩放,在参数中指定缩放倍率。 transform:scaleX(0.5); transform:scaleY(1); transform:scaleZ(2); transform:scaleX(0.5)scaleY(1); transform:scale(0.5) rotateY(45deg); (3)歪斜 别离应用skewX办法、skewY办法使元素在X轴、Y轴上进行顺时针方向歪斜(无skewZ办法),在参数中指定歪斜的角度 transform:skewX(45deg); transform:skewY(45deg); (4)挪动 别离应用translateX办法、translateY办法、translateZ办法、使元素在X轴、Y轴、Z轴方向上进行挪动,在参数中退出挪动间隔。 transform:translateX(50px); transform:translateY(50px); transform:translateZ(50px); 9 变形矩阵每种变形办法的背地都存在着一个对应的矩阵。 (1)计算2D变形(3 X 3矩阵) ...

March 29, 2021 · 1 min · jiezi

关于css:关于CSS中的背景属性background简述

像我之前提到的那样,文档树中的每个元素只是一个矩形盒子。这些盒子都有一个背景层,背景层能够是齐全通明或者其它色彩,也能够是一张图片。此背景层由8个CSS属性(加上1个简写的属性)管制。 background-color background-color属性设置元素的背景色彩。它的值能够是任意非法的色彩值或者是transparent关键字。 .left { background-color: #ffdb3a; }.middle { background-color: #67b3dd; }.right { background-color: transparent; } 背景色彩绘制在由[background-clip](#backgroundclip)属性指定的盒模型的区域内。如果还设置了任何背景图像,则在它们前面绘制色彩层。与能够有多个的图像层不同,对于一个元素,咱们只能有一个色彩层。 background-image background-image属性定义元素的一个或多个背景图像。它的值通常是用url()符号定义的图像的url。也能够应用none作为它的值,但这样会生成一个空的背景层 .left { background-image: url('ire.png'); }.right { background-image: none; } 咱们也能够指定多张背景图片并通过逗号分隔。前面的图片都会绘制在Z轴方向上前一个图片的前面。 .middle { background-image: url('khaled.png'), url('ire.png'); /* Other styles */ background-repeat: no-repeat; background-size: 100px;} background-repeat background-repeat属性管制背景图片在被[background-size](#backgroundsize)属性扭转了大小及被[background-position](#backgroundposition )属性定位后如何平铺。 该属性的值能够是 repeat-x, repeat-y, repeat, space, round, no-repeat关键字,除了repeat-x和repeat-y,其余值能够为x轴和y轴定义一次,也能够独自定义每个维。 .top-outer-left { background-repeat: repeat-x; }.top-inner-left { background-repeat: repeat-y; }.top-inner-right { background-repeat: repeat; }.top-outer-right { background-repeat: space; }.bottom-outer-left { background-repeat: round; }.bottom-inner-left { background-repeat: no-repeat; }.bottom-inner-right { background-repeat: space repeat; }.bottom-outer-right { background-repeat: round space; } ...

March 29, 2021 · 2 min · jiezi

关于前端:图片模糊全局加上以下代码便可治愈

img { image-rendering: -moz-crisp-edges;image-rendering: -o-crisp-edges;image-rendering: -webkit-optimize-contrast;image-rendering: crisp-edges;-ms-interpolation-mode: nearest-neighbor;}

March 29, 2021 · 1 min · jiezi

关于javascript:前端开发者周刊山月周刊第-5-期如何高效组织-npm-script

前端爱好者周刊 (Github: shfshanyue/weekly),每周记录对于前端的开源工具、优良文章、重大库版本公布记录等等。每周一公布,订阅平台如下,欢送订阅。 订阅网站: https://weekly.shanyue.tech订阅Github: shfshanyue/weekly封面 大型货轮长赐号搁浅梗塞苏伊士运河,目前救济仍在持续 一句话在最新版的 github,Readme 已反对 TOC 疾速目录svg-term 能够很不便的对你在终端的操作命令进行录制并保留为很小体积的 SVG 动画code . 能够应用 VS Code 疾速关上当前目录统计显示,2020年在美国各级学校注册的国内学生人数与上年相比降落了18%新西兰国家水事和大气研究所日前公布的一份钻研显示,在新西兰周边海域采样的鱼类内脏中有微塑料,甚至肌肉组织中也发现了微塑料成分新一期贷款市场报价利率(LPR)出炉,我国1年期和5年期以上LPR均未调整,1年期LPR仍为3.85%,5年期以上LPR为4.65%国防部新闻发言人示意,055型驱逐舰拉萨舰,舷号为102,顺利完成建造和海试工作,已于3月2日正式退出中国海军序列截至3月24日,往年我国快递业务量已冲破200亿件,日均业务量超过2.4亿件,日均服务用户靠近5亿人次苏伊士运河货船搁浅,每天损失四亿美元。埃及无关部门示意,对在苏伊士运河中搁浅货船的救济仍在持续,运河暂停航行,不排除救济可能须要几周工夫开发利器一、 Prettier Playground: 任意语言代码格式化 Prettier 是一款优良的代码格式化工具 二、 asciinema: 终端动作录制软件应用 python 编写的一款可记录终端操作命令动画的工具软件,可在线播放。借助第三方工具能够转化为 gif 动画或者 svg 动画。 应用以下两行命令可疾速开始录制终端。 $ brew install asciinema$ asciinema recrepo: asciinema/asciinema三、 svg-term-cli: 把终端操作录制为 SVG 动画 基于 asciinema 的一款软件,应用 javascript 编写。可把终端动作录制为 svg 动画 $ cat demo.cast | svg-term > demo.svgrepo: marionebl/svg-term-clinpm: svg-term-cli文章举荐一、 仅应用CSS就能够进步页面渲染速度的4个技巧 本篇文章提到了四个对于进步页面性能的 CSS 技巧 content-visibilitywill-change带有媒体查问的 link@import跳转译文二、 如何高效组织 npm script一个我的项目的 npm script 是前端工程化的一个缩影,从这篇文章能够给咱们如何更好地组织 npm script 启发一个新的思考,波及到以下方面 ...

March 29, 2021 · 2 min · jiezi

关于前端:有意思不规则边框的生成方案

本文将介绍一种配合 SVG 滤镜实现各种不规则图形增加边框的小技巧。 本文残缺的 DEMO,你能够戳这里:transparent 配合 SVG feMorphology 滤镜生成不规则边框 需要背景,给不规则图形增加边框在咱们日常开发中,时长会遇到一些非矩形、非圆形的图案。相似上面这些: 应用纯 CSS,搭配一些技巧,是能够制作出下面的图形的,当然这只是需要的第一步。 紧接着,可能会有要给上述图形增加边框的诉求,这个时候,CSS 就很难办到了。 尝试应用 drop-shadow 增加边框第一种办法,咱们能够尝试应用 drop-shadow,给不规则的图形,增加一个外暗影。 咱们以一个箭头图形为例应用 CSS 简略实现它的其中一种形式如下: <div class="arrow-button"></div>.arrow-button { position: relative; width: 180px; height: 64px; background: #f49714; &::after { content: ""; position: absolute; width: 32px; height: 64px; top: 0; right: -32px; background: linear-gradient(-45deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%), linear-gradient(-135deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%); background-size: 32px 32px; background-repeat: no-repeat; background-position: 0 bottom, 0 top; }} ...

March 29, 2021 · 2 min · jiezi

关于css技巧:分享几个css生成工具

Neumorphism/Soft UI generator Smooth Shadow generator Fancy Border Radius Generator Easing Gradients Data Viz Color Palette Generator *CSS Grid Generator *CSS Accordion Slider Generator *CSS clip-path maker Get Waves

March 29, 2021 · 1 min · jiezi

关于css:简单CSS绘制3D贺卡

如何利用CSS绘制一些简略却又炫酷的3D成果呢?首先上图这是一张单纯用CSS实现的3D贺卡,上面一起来看一下事如何实现的: 1.html代码<body> <div class="card"> Niu</div></body>嗯~ o( ̄▽ ̄)o,就这??? 2.CSS代码a.革除默认款式,以及设置body全屏背景色彩 * { padding: 0; margin: 0; } body { display: flex; justify-content: center; align-items: center; background-color: #2c3e50; height: 100vh; height: 100vw; }niu为啥在这个奇怪的地位呢?好吧,这个不是要害... b.card标签设置根本款式 .card { width: 150px; height: 200px; background-color: #ecf0f1; display: flex; justify-content: center; align-items: center; color: #000; font-size: 20px; position: relative; } 为啥要设置position: relative呢,好问题,待会再说! c.伪元素上场了 .card::before, .card::after { position: absolute; background-image: linear-gradient(to right, #e74c3c, #f39c12); width: 50%; height: 100%; display: flex; align-items: center; top: 0; box-sizing: border-box; } .card::before { content: '生日'; left: 0; justify-content: flex-end; padding-right: 10px; } .card::after { content: '高兴'; right: 0; justify-content: flex-start; padding-left: 10px; } ...

March 28, 2021 · 1 min · jiezi

关于css:Chartscss-一个新的数据可视化框架底层使用纯-CSS-实现

前言提到数据可视化框架,那可真的多的去了 Echarts、AntV、D3 等等。然而,这些数据可视化框架都有一个共性 ,即它们的应用都脱离不开 JavaScript。 相同地是,Charts.css 是一个用纯 CSS 实现的数据可视化框架,它的外围是把 table 标签的体现为柱形图、折线图、饼图等等。 而 Charts.css 的应用非常简单,反对以下 2 种应用形式: 在原生的网页我的项目中应用 link 标签引入 Charts.css 的文件,能够是 CDN 上的地址或者在 GitHub 上将 Released 的代码下载到本地在有包治理的我的项目中应用,即通过 npm i charts.css 或 yarn add charts.css 增加到我的项目中那么,接下来,就让咱们一起从如何应用 Charts.css 来实现柱形图登程,认识一下小而美的它 ~ 应用 Charts.css 实现柱形图个别状况下,咱们对柱形图的需要比较简单,只须要展现数据大小、数据名称即可。通过应用 Charts.css,咱们这样实现: <table class="charts-css column show-labels data-spacing-5"> <tbody> <tr> <th>Jan</th> <td style="--size: calc( 40 / 100 )"> 40 <span class="tooltip"> Charts.css is so <br> easy for me. </span> </td> </tr> <tr> <th>Feb</th> <td style="--size: calc( 60 / 100 )"> 60 </td> </tr> <tr> <th>Mar</th> <td style="--size: calc( 75 / 100 )"> 75 </td> </tr> <tr> <th>Mar</th> <td style="--size: calc( 35 / 100 )"> 35 </td> </tr> </tbody></table>相应地,渲染到页面上会是这样: ...

March 27, 2021 · 2 min · jiezi

关于css:如何使用CSS创建文本填充动画

悬停时的文本填充动画是古代Web设计概念的一种文本动画。在此动画中, 文本在特定方向(即, 从左到右, 从右到左, 从上到下或从下到上)的色彩与原始文本的色彩不同。 这种动画类型不仅限于文本。你能够应用雷同的技术来填充任何整机或形态, 例如填充杯子或杯子能够很好地实现此动画。 办法:办法是用不同色彩的图层笼罩文本, 并在开始时将其宽度放弃为0, 并在鼠标悬停时将其宽度减少到100%。 HTML代码:在本节中, 咱们有一个带有数据文本属性的" h1"元素, 咱们将应用它在原始文本上搁置一个图层。 <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content= "width=device-width, initial-scale=1.0" /> <title>Text Fill</title></head> <body> <h1 data-text="Geeks">Geeks</h1></body> </html> CSS代码:对于CSS, 请依照以下步骤操作。 第1步:利用一些根本款式, 例如将文本对齐核心和根本背景色彩。第2步:将内容设置为咱们在" h1"标签中应用的属性。这将笼罩原始文本。第三步:将width设置为0并设置与文本原始色彩不同的任何色彩。步骤4:当初, 将鼠标悬停时将" width"设置为100。留神:你能够将"宽度"设置为任何其余值, 以仅笼罩鼠标悬停时文本的特定局部。例如, 将其设置为50%, 以使文本最多只能填充一半的长度。 <style> h1 { margin: 0; padding: 0; position: absolute; top: 50%; left: 50%; font-size: 5em; color: #ccc; } h1::before { /* This will create the layer over original text*/ content: attr(data-text); position: absolute; top: 0; left: 0; /* Setting different color than that of original text */ color: green; overflow: hidden; /* Setting width to 0*/ width: 0%; transition: 1s; } h1:hover::before { /* Setting width to 100 on hover*/ width: 100%; }</style> ...

March 26, 2021 · 2 min · jiezi

关于css:CSS-background深度解析

backgroudnd为缩写属性,语法为: background: background-color background-image position /background-size background-repeat background-origin background-clip background-attachment inherit;它蕴含以下属性: 值形容CSS版本background-color规定要应用的背景色彩。1background-position规定背景图像的地位。1background-size规定背景图片的尺寸。3background-repeat规定如何反复背景图像。1background-origin规定背景图片的定位区域。3background-clip规定背景的绘制区域。3background-attachment规定背景图像是否固定或者随着页面的其余部分滚动。1background-image规定要应用的背景图像。1inherit规定应该从父元素继承 background 属性的设置。1

March 26, 2021 · 1 min · jiezi

关于vue.js:vue-scoped原理-及-deep-穿透

March 26, 2021 · 0 min · jiezi

关于css:CSS-常用样式-–-背景属性

一、背景色彩 background-color属性名:background-color作用:在盒子区域增加背景色彩的润饰加载区域:在 border 及以内加载背景色彩属性值:色彩名、色彩值<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .box { width: 200px; height: 200px; padding: 30px; border: 5px dashed red; margin: 20px; background-color: slateblue; } </style></head><body> <div class="box"> 背景色彩 </div> </body></html>二、背景图片 background-image属性名:background-image作用:给盒子增加图片的背景润饰加载范畴:默认的加载到边框及以内局部。前期如果图片不反复加载,加载从 border 以内开始属性值:url(图片门路)url:uniform resource locator,对立资源定位符,小括号外部书写查找图片的门路.box { width: 200px; height: 200px; padding: 30px; border: 5px dashed red; margin: 20px; /* background-color: slateblue; 背景色彩 */ background-image: url(images/lagouwang.jpg); }如果图片不反复,从 border 以内开始加载背景图和背景色彩能够同时设置,背景图会压盖背景色彩,没有背景图的区域会显示背 景色彩三、背景反复 background-repeat属性名:background-repeat作用:设置增加的背景图是否要在盒子中反复进行加载依据属性值不同,有四种反复加载形式| 属性值 | 作用 || repeat | 反复,默认属性值,示意会应用背景图片反复加载填满整个盒子背景区域 || no-­repeat | 不反复,不管背景图是否大于盒子范畴,都只加载一次图片 || repeat-­-x | 程度反复,应用背景图片程度反复加载铺满第一行,垂直方向不反复 || repeat-­-y | 垂直反复,应用背景图片垂直反复加载铺满第一列,程度方向不反复 | ...

March 26, 2021 · 3 min · jiezi