├── .gitignore ├── compress-img ├── img │ └── pig.png ├── src │ ├── pig.png │ └── index.js └── package.json ├── reduce-skill.js ├── promise.js ├── icss ├── index.html ├── reset.css ├── index.css.map ├── index.scss └── index.css └── browser-type.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | dist 3 | node_modules 4 | package-lock.json 5 | yarn.lock -------------------------------------------------------------------------------- /compress-img/img/pig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JowayYoung/juejin-code/HEAD/compress-img/img/pig.png -------------------------------------------------------------------------------- /compress-img/src/pig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JowayYoung/juejin-code/HEAD/compress-img/src/pig.png -------------------------------------------------------------------------------- /compress-img/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "compress-img", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "start": "node src/index.js" 7 | }, 8 | "dependencies": { 9 | "chalk": "4.1.0", 10 | "figures": "3.2.0", 11 | "ora": "4.0.5", 12 | "trample": "0.2.3" 13 | } 14 | } -------------------------------------------------------------------------------- /reduce-skill.js: -------------------------------------------------------------------------------- 1 | // 获取近半年的月份 2 | function HalfYear(date = null) { 3 | return [...new Array((date ? new Date(date) : new Date()).getMonth() + 1).keys()].reduceRight((t, v, i, a) => { 4 | if (a.length >= 6 && t.length < 6) { 5 | t.unshift(v + 1); 6 | } else if (a.length < 6) { 7 | t.unshift(v + 1); 8 | if (i === 0 && t.length < 6) { 9 | const n = 6 - t.length; 10 | for (let j = 1; j <= n; j++) t.unshift(13 - j); 11 | } 12 | } 13 | return t; 14 | }, []).map(v => v + "月"); 15 | } -------------------------------------------------------------------------------- /promise.js: -------------------------------------------------------------------------------- 1 | function RecursionPromise(nextPromise, x, resolve, reject) { 2 | if (nextPromise === x) return false; 3 | let flag; 4 | if (x !== null && (typeof x === "object" || typeof x === "function")) { 5 | try { 6 | let then = x.then; 7 | if (typeof then === "function") { 8 | then.call(x, y => { 9 | if (flag) return false; 10 | flag = true; 11 | // 这里说明Promise对象resolve之后的结果仍然是Promise,那么继续递归解析 12 | RecursionPromise(nextPromise, y, resolve, reject); 13 | }, error => { 14 | if (flag) return false; 15 | flag = true; 16 | reject(error); 17 | }); 18 | } else { 19 | resolve(x); 20 | } 21 | } catch (e) { 22 | if (flag) return false; 23 | flag = true; 24 | reject(e); 25 | } 26 | } else { 27 | resolve(x); 28 | } 29 | } 30 | 31 | class MyPromise { 32 | constructor(implement) { 33 | this.status = "pending"; 34 | this.res = null; 35 | this.error = null; 36 | this.resolveCallbacks = []; // 成功时回调的处理函数 37 | this.rejectCallbacks = []; // 失败时回调的处理函数 38 | const resolve = res => { 39 | if (this.status === "pending") { 40 | this.status = "fulfilled"; 41 | this.res = res; 42 | this.resolveCallbacks.forEach(fn => fn()); // 循环执行成功处理函数 43 | } 44 | }; 45 | const reject = error => { 46 | if (this.status === "pending") { 47 | this.status = "rejected"; 48 | this.error = error; 49 | this.rejectCallbacks.forEach(fn => fn()); // 循环执行失败处理函数 50 | } 51 | }; 52 | try { 53 | implement(resolve, reject); 54 | } catch (err) { 55 | reject(err); 56 | } 57 | } 58 | then(onFulfilled, onRejected) { 59 | // 如果onRejected不是函数,就直接抛出错误 60 | onFulfilled = typeof onFulfilled === "function" ? onFulfilled : res => res; 61 | onRejected = typeof onRejected === "function" ? onRejected : err => { throw err; }; 62 | const nextPromise = new MyPromise((resolve, reject) => { 63 | if (this.status === "fulfilled") { 64 | // 解决异步问题 65 | setTimeout(() => { 66 | const x = onFulfilled(this.res); 67 | RecursionPromise(nextPromise, x, resolve, reject); 68 | }, 0); 69 | } 70 | if (this.status === "rejected") { 71 | setTimeout(() => { 72 | const x = onRejected(this.error); 73 | RecursionPromise(nextPromise, x, resolve, reject); 74 | }, 0); 75 | } 76 | if (this.status === "pending") { 77 | this.resolveCallbacks.push(() => { 78 | setTimeout(() => { 79 | const x = onFulfilled(this.res); 80 | RecursionPromise(nextPromise, x, resolve, reject); 81 | }, 0); 82 | }); 83 | this.rejectCallbacks.push(() => { 84 | setTimeout(() => { 85 | const x = onRejected(this.error); 86 | RecursionPromise(nextPromise, x, resolve, reject); 87 | }, 0); 88 | }); 89 | } 90 | }); 91 | return nextPromise; 92 | } 93 | } 94 | 95 | export default MyPromise; -------------------------------------------------------------------------------- /compress-img/src/index.js: -------------------------------------------------------------------------------- 1 | const Fs = require("fs"); 2 | const Https = require("https"); 3 | const Path = require("path"); 4 | const Url = require("url"); 5 | const Chalk = require("chalk"); 6 | const Figures = require("figures"); 7 | const Ora = require("ora"); 8 | const { ByteSize, RandomNum, RoundNum } = require("trample/node"); 9 | 10 | const TINYIMG_URL = [ 11 | "tinyjpg.com", 12 | "tinypng.com" 13 | ]; 14 | 15 | function RandomHeader() { 16 | const ip = new Array(4).fill(0).map(() => parseInt(Math.random() * 255)).join("."); 17 | const index = RandomNum(0, 1); 18 | return { 19 | headers: { 20 | "Cache-Control": "no-cache", 21 | "Content-Type": "application/x-www-form-urlencoded", 22 | "Postman-Token": Date.now(), 23 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36", 24 | "X-Forwarded-For": ip 25 | }, 26 | hostname: TINYIMG_URL[index], 27 | method: "POST", 28 | path: "/web/shrink", 29 | rejectUnauthorized: false 30 | }; 31 | } 32 | 33 | function UploadImg(file) { 34 | const opts = RandomHeader(); 35 | return new Promise((resolve, reject) => { 36 | const req = Https.request(opts, res => res.on("data", data => { 37 | const obj = JSON.parse(data.toString()); 38 | obj.error ? reject(obj.message) : resolve(obj); 39 | })); 40 | req.write(file, "binary"); 41 | req.on("error", e => reject(e)); 42 | req.end(); 43 | }); 44 | } 45 | 46 | function DownloadImg(url) { 47 | const opts = new Url.URL(url); 48 | return new Promise((resolve, reject) => { 49 | const req = Https.request(opts, res => { 50 | let file = ""; 51 | res.setEncoding("binary"); 52 | res.on("data", chunk => file += chunk); 53 | res.on("end", () => resolve(file)); 54 | }); 55 | req.on("error", e => reject(e)); 56 | req.end(); 57 | }); 58 | } 59 | 60 | async function CompressImg(path) { 61 | try { 62 | const file = Fs.readFileSync(path, "binary"); 63 | const obj = await UploadImg(file); 64 | const data = await DownloadImg(obj.output.url); 65 | const oldSize = Chalk.redBright(ByteSize(obj.input.size)); 66 | const newSize = Chalk.greenBright(ByteSize(obj.output.size)); 67 | const ratio = Chalk.blueBright(RoundNum(1 - obj.output.ratio, 2, true)); 68 | const dpath = Path.join("img", Path.basename(path)); 69 | const msg = `${Figures.tick} Compressed [${Chalk.yellowBright(path)}] completed: Old Size ${oldSize}, New Size ${newSize}, Optimization Ratio ${ratio}`; 70 | Fs.writeFileSync(dpath, data, "binary"); 71 | return Promise.resolve(msg); 72 | } catch (err) { 73 | const msg = `${Figures.cross} Compressed [${Chalk.yellowBright(path)}] failed: ${Chalk.redBright(err)}`; 74 | return Promise.resolve(msg); 75 | } 76 | } 77 | 78 | (async() => { 79 | const spinner = Ora("Image is compressing......").start(); 80 | const res = await CompressImg("src/pig.png"); 81 | spinner.stop(); 82 | console.log(res); 83 | })(); -------------------------------------------------------------------------------- /icss/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Hello CSS 8 | 9 | 10 | 11 | 12 | 13 | 18 | 22 | 27 | 32 | 39 | 44 | 50 | 53 | 63 | 71 | 72 | 73 | 74 | 75 | 76 | 84 |
85 |
86 |
87 |
88 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /icss/reset.css: -------------------------------------------------------------------------------- 1 | /* 初始化 */ 2 | a, 3 | abbr, 4 | acronym, 5 | address, 6 | applet, 7 | area, 8 | article, 9 | aside, 10 | audio, 11 | b, 12 | base, 13 | basefont, 14 | bdi, 15 | bdo, 16 | big, 17 | blockquote, 18 | body, 19 | br, 20 | button, 21 | canvas, 22 | caption, 23 | center, 24 | cite, 25 | code, 26 | col, 27 | colgroup, 28 | datalist, 29 | dd, 30 | del, 31 | details, 32 | dir, 33 | div, 34 | dfn, 35 | dialog, 36 | dl, 37 | dt, 38 | em, 39 | embed, 40 | fieldset, 41 | figcaption, 42 | figure, 43 | font, 44 | footer, 45 | form, 46 | frame, 47 | frameset, 48 | h1, 49 | h2, 50 | h3, 51 | h4, 52 | h5, 53 | h6, 54 | head, 55 | header, 56 | hr, 57 | html, 58 | i, 59 | iframe, 60 | img, 61 | input, 62 | ins, 63 | isindex, 64 | kbd, 65 | keygen, 66 | label, 67 | legend, 68 | li, 69 | link, 70 | map, 71 | mark, 72 | menu, 73 | menuitem, 74 | meta, 75 | meter, 76 | nav, 77 | noscript, 78 | object, 79 | ol, 80 | optgroup, 81 | option, 82 | output, 83 | p, 84 | param, 85 | pre, 86 | progress, 87 | q, 88 | rp, 89 | rt, 90 | ruby, 91 | s, 92 | samp, 93 | script, 94 | section, 95 | select, 96 | small, 97 | source, 98 | span, 99 | strike, 100 | strong, 101 | style, 102 | sub, 103 | summary, 104 | sup, 105 | table, 106 | tbody, 107 | td, 108 | textarea, 109 | tfoot, 110 | th, 111 | thead, 112 | time, 113 | title, 114 | tr, 115 | track, 116 | tt, 117 | u, 118 | ul, 119 | var, 120 | video, 121 | wbr, 122 | xmp { 123 | box-sizing: border-box; 124 | margin: 0; 125 | padding: 0; 126 | } 127 | *::before, 128 | *::after { 129 | box-sizing: border-box; 130 | margin: 0; 131 | padding: 0; 132 | } 133 | body { 134 | font: 14px/1 "PingFang SC", "Microsoft YaHei", sans-serif; 135 | -webkit-font-smoothing: antialiased; 136 | -moz-osx-font-smoothing: grayscale; 137 | } 138 | img { 139 | display: block; 140 | border: none; 141 | } 142 | dl, 143 | li, 144 | menu, 145 | ol, 146 | ul { 147 | list-style: none; 148 | } 149 | button, 150 | input, 151 | select, 152 | textarea { 153 | outline: none; 154 | } 155 | a, 156 | a:link, 157 | a:visited, 158 | a:hover, 159 | a:active { 160 | text-decoration: none; 161 | } 162 | /* 浮动方式 */ 163 | .fl { 164 | float: left; 165 | } 166 | .fr { 167 | float: right; 168 | } 169 | .clear { 170 | overflow: hidden; 171 | clear: both; 172 | height: 0; 173 | font-size: 0; 174 | } 175 | .clearfix::after { 176 | display: block; 177 | visibility: hidden; 178 | clear: both; 179 | height: 0; 180 | font-size: 0; 181 | content: ""; 182 | } 183 | /* 定位方式 */ 184 | .pr { 185 | position: relative; 186 | } 187 | .pa { 188 | position: absolute; 189 | } 190 | .pf { 191 | position: fixed; 192 | } 193 | .center { 194 | margin: 0 auto; 195 | } 196 | /* 对齐方式 */ 197 | .tal { 198 | text-align: left; 199 | } 200 | .tac { 201 | text-align: center; 202 | } 203 | .tar { 204 | text-align: right; 205 | } 206 | .taj { 207 | text-align: justify; 208 | } 209 | /* 居中定位 */ 210 | .abs-ct { 211 | position: absolute; 212 | left: 50%; 213 | top: 50%; 214 | transform: translate(-50%, -50%); 215 | } 216 | .abs-cx { 217 | position: absolute; 218 | left: 50%; 219 | transform: translateX(-50%); 220 | } 221 | .abs-cy { 222 | position: absolute; 223 | top: 50%; 224 | transform: translateY(-50%); 225 | } 226 | /* 弹性布局 */ 227 | .flex-ct-x { 228 | display: flex; 229 | justify-content: center; 230 | align-items: center; 231 | } 232 | .flex-ct-y { 233 | display: flex; 234 | flex-direction: column; 235 | justify-content: center; 236 | align-items: center; 237 | } 238 | .flex-fs { 239 | display: flex; 240 | flex-wrap: wrap; 241 | justify-content: space-between; 242 | align-content: space-between; 243 | } 244 | /* 动画模式 */ 245 | .td-camera { 246 | perspective: 1000; 247 | } 248 | .td-space { 249 | transform-style: preserve-3d; 250 | } 251 | .td-box { 252 | backface-visibility: hidden; 253 | } 254 | .gpu-speed { 255 | transform: translate3d(0, 0, 0); 256 | } 257 | /* 其他 */ 258 | .fullscreen { 259 | left: 0; 260 | right: 0; 261 | top: 0; 262 | bottom: 0; 263 | } 264 | .ellipsis { 265 | overflow: hidden; 266 | text-overflow: ellipsis; 267 | white-space: nowrap; 268 | } 269 | .page-at { 270 | overflow: auto; 271 | width: 100%; 272 | height: 100%; 273 | } 274 | .page-fs { 275 | overflow: hidden; 276 | width: 100%; 277 | height: 100%; 278 | } 279 | .round { 280 | border-radius: 100%; 281 | } -------------------------------------------------------------------------------- /browser-type.js: -------------------------------------------------------------------------------- 1 | export default function BrowserType() { 2 | // 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本 3 | const ua = navigator.userAgent.toLowerCase(); 4 | const testUa = regexp => regexp.test(ua); 5 | const testVs = regexp => ua.match(regexp) 6 | .toString() 7 | .replace(/[^0-9|_.]/g, "") 8 | .replace(/_/g, "."); 9 | // 系统 10 | let system = "unknow"; 11 | if (testUa(/windows|win32|win64|wow32|wow64/g)) { 12 | system = "windows"; // windows系统 13 | } else if (testUa(/macintosh|macintel/g)) { 14 | system = "macos"; // macos系统 15 | } else if (testUa(/x11/g)) { 16 | system = "linux"; // linux系统 17 | } else if (testUa(/android|adr/g)) { 18 | system = "android"; // android系统 19 | } else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) { 20 | system = "ios"; // ios系统 21 | } 22 | // 系统版本 23 | let systemVs = "unknow"; 24 | if (system === "windows") { 25 | if (testUa(/windows nt 5.0|windows 2000/g)) { 26 | systemVs = "2000"; 27 | } else if (testUa(/windows nt 5.1|windows xp/g)) { 28 | systemVs = "xp"; 29 | } else if (testUa(/windows nt 5.2|windows 2003/g)) { 30 | systemVs = "2003"; 31 | } else if (testUa(/windows nt 6.0|windows vista/g)) { 32 | systemVs = "vista"; 33 | } else if (testUa(/windows nt 6.1|windows 7/g)) { 34 | systemVs = "7"; 35 | } else if (testUa(/windows nt 6.2|windows 8/g)) { 36 | systemVs = "8"; 37 | } else if (testUa(/windows nt 6.3|windows 8.1/g)) { 38 | systemVs = "8.1"; 39 | } else if (testUa(/windows nt 10.0|windows 10/g)) { 40 | systemVs = "10"; 41 | } 42 | } else if (system === "macos") { 43 | systemVs = testVs(/os x [\d._]+/g); 44 | } else if (system === "android") { 45 | systemVs = testVs(/android [\d._]+/g); 46 | } else if (system === "ios") { 47 | systemVs = testVs(/os [\d._]+/g); 48 | } 49 | // 平台 50 | let platform = "unknow"; 51 | if (system === "windows" || system === "macos" || system === "linux") { 52 | platform = "desktop"; // 桌面端 53 | } else if (system === "android" || system === "ios" || testUa(/mobile/g)) { 54 | platform = "mobile"; // 移动端 55 | } 56 | // 内核和载体 57 | let engine = "unknow"; 58 | let supporter = "unknow"; 59 | if (testUa(/applewebkit/g)) { 60 | engine = "webkit"; // webkit内核 61 | if (testUa(/edge/g)) { 62 | supporter = "edge"; // edge浏览器 63 | } else if (testUa(/opr/g)) { 64 | supporter = "opera"; // opera浏览器 65 | } else if (testUa(/chrome/g)) { 66 | supporter = "chrome"; // chrome浏览器 67 | } else if (testUa(/safari/g)) { 68 | supporter = "safari"; // safari浏览器 69 | } 70 | } else if (testUa(/gecko/g) && testUa(/firefox/g)) { 71 | engine = "gecko"; // gecko内核 72 | supporter = "firefox"; // firefox浏览器 73 | } else if (testUa(/presto/g)) { 74 | engine = "presto"; // presto内核 75 | supporter = "opera"; // opera浏览器 76 | } else if (testUa(/trident|compatible|msie/g)) { 77 | engine = "trident"; // trident内核 78 | supporter = "iexplore"; // iexplore浏览器 79 | } 80 | // 内核版本 81 | let engineVs = "unknow"; 82 | if (engine === "webkit") { 83 | engineVs = testVs(/applewebkit\/[\d._]+/g); 84 | } else if (engine === "gecko") { 85 | engineVs = testVs(/gecko\/[\d._]+/g); 86 | } else if (engine === "presto") { 87 | engineVs = testVs(/presto\/[\d._]+/g); 88 | } else if (engine === "trident") { 89 | engineVs = testVs(/trident\/[\d._]+/g); 90 | } 91 | // 载体版本 92 | let supporterVs = "unknow"; 93 | if (supporter === "chrome") { 94 | supporterVs = testVs(/chrome\/[\d._]+/g); 95 | } else if (supporter === "safari") { 96 | supporterVs = testVs(/version\/[\d._]+/g); 97 | } else if (supporter === "firefox") { 98 | supporterVs = testVs(/firefox\/[\d._]+/g); 99 | } else if (supporter === "opera") { 100 | supporterVs = testVs(/opr\/[\d._]+/g); 101 | } else if (supporter === "iexplore") { 102 | supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g); 103 | } else if (supporter === "edge") { 104 | supporterVs = testVs(/edge\/[\d._]+/g); 105 | } 106 | // 外壳和外壳版本 107 | let shell = "none"; 108 | let shellVs = "unknow"; 109 | if (testUa(/micromessenger/g)) { 110 | shell = "wechat"; // 微信浏览器 111 | shellVs = testVs(/micromessenger\/[\d._]+/g); 112 | } else if (testUa(/qqbrowser/g)) { 113 | shell = "qq"; // QQ浏览器 114 | shellVs = testVs(/qqbrowser\/[\d._]+/g); 115 | } else if (testUa(/ucbrowser/g)) { 116 | shell = "uc"; // UC浏览器 117 | shellVs = testVs(/ucbrowser\/[\d._]+/g); 118 | } else if (testUa(/qihu 360se/g)) { 119 | shell = "360"; // 360浏览器(无版本) 120 | } else if (testUa(/2345explorer/g)) { 121 | shell = "2345"; // 2345浏览器 122 | shellVs = testVs(/2345explorer\/[\d._]+/g); 123 | } else if (testUa(/metasr/g)) { 124 | shell = "sougou"; // 搜狗浏览器(无版本) 125 | } else if (testUa(/lbbrowser/g)) { 126 | shell = "liebao"; // 猎豹浏览器(无版本) 127 | } else if (testUa(/maxthon/g)) { 128 | shell = "maxthon"; // 遨游浏览器 129 | shellVs = testVs(/maxthon\/[\d._]+/g); 130 | } 131 | return Object.assign({ 132 | engine, // webkit gecko presto trident 133 | engineVs, 134 | platform, // desktop mobile 135 | supporter, // chrome safari firefox opera iexplore edge 136 | supporterVs, 137 | system, // windows macos linux android ios 138 | systemVs 139 | }, shell === "none" ? {} : { 140 | shell, // wechat qq uc 360 2345 sougou liebao maxthon 141 | shellVs 142 | }); 143 | } -------------------------------------------------------------------------------- /icss/index.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": [ 5 | "index.scss" 6 | ], 7 | "names": [], 8 | "file": "index.css" 9 | } -------------------------------------------------------------------------------- /icss/index.scss: -------------------------------------------------------------------------------- 1 | body { 2 | overflow: hidden; 3 | height: 100vh; 4 | } 5 | // 全屏布局 6 | // .fullscreen-layout { 7 | // position: relative; 8 | // width: 400px; 9 | // height: 400px; 10 | // header, 11 | // footer, 12 | // main { 13 | // position: absolute; 14 | // left: 0; 15 | // right: 0; 16 | // } 17 | // header { 18 | // top: 0; 19 | // height: 50px; 20 | // background-color: #f66; 21 | // } 22 | // footer { 23 | // bottom: 0; 24 | // height: 50px; 25 | // background-color: #66f; 26 | // } 27 | // main { 28 | // top: 50px; 29 | // bottom: 50px; 30 | // background-color: #3c9; 31 | // } 32 | // } 33 | .fullscreen-layout { 34 | display: flex; 35 | flex-direction: column; 36 | width: 400px; 37 | height: 400px; 38 | header { 39 | height: 50px; 40 | background-color: #f66; 41 | } 42 | footer { 43 | height: 50px; 44 | background-color: #66f; 45 | } 46 | main { 47 | flex: 1; 48 | background-color: #3c9; 49 | } 50 | } 51 | // 两列布局 52 | // .two-column-layout { 53 | // width: 400px; 54 | // height: 400px; 55 | // .left { 56 | // float: left; 57 | // width: 100px; 58 | // height: 100%; 59 | // background-color: #f66; 60 | // } 61 | // .right { 62 | // margin-left: 100px; 63 | // height: 100%; 64 | // background-color: #66f; 65 | // } 66 | // } 67 | // .two-column-layout { 68 | // width: 400px; 69 | // height: 400px; 70 | // .left { 71 | // float: left; 72 | // width: 100px; 73 | // height: 100%; 74 | // background-color: #f66; 75 | // } 76 | // .right { 77 | // overflow: hidden; 78 | // height: 100%; 79 | // background-color: #66f; 80 | // } 81 | // } 82 | .two-column-layout { 83 | display: flex; 84 | width: 400px; 85 | height: 400px; 86 | .left { 87 | width: 100px; 88 | background-color: #f66; 89 | } 90 | .right { 91 | flex: 1; 92 | background-color: #66f; 93 | } 94 | } 95 | // 三列布局 96 | // .three-column-layout { 97 | // width: 400px; 98 | // height: 400px; 99 | // .left { 100 | // float: left; 101 | // width: 50px; 102 | // height: 100%; 103 | // background-color: #f66; 104 | // } 105 | // .center { 106 | // float: left; 107 | // width: 100px; 108 | // height: 100%; 109 | // background-color: #66f; 110 | // } 111 | // .right { 112 | // overflow: hidden; 113 | // height: 100%; 114 | // background-color: #3c9; 115 | // } 116 | // } 117 | .three-column-layout { 118 | display: flex; 119 | width: 400px; 120 | height: 400px; 121 | .left { 122 | width: 50px; 123 | background-color: #f66; 124 | } 125 | .center { 126 | width: 100px; 127 | background-color: #66f; 128 | } 129 | .right { 130 | flex: 1; 131 | background-color: #3c9; 132 | } 133 | } 134 | // 圣杯布局与双飞翼布局 135 | .grail-layout-x { 136 | padding: 0 100px; 137 | width: 400px; 138 | height: 400px; 139 | .left { 140 | float: left; 141 | margin-left: -100px; 142 | width: 100px; 143 | height: 100%; 144 | background-color: #f66; 145 | } 146 | .right { 147 | float: right; 148 | margin-right: -100px; 149 | width: 100px; 150 | height: 100%; 151 | background-color: #66f; 152 | } 153 | .center { 154 | height: 100%; 155 | background-color: #3c9; 156 | } 157 | } 158 | .grail-layout-y { 159 | width: 400px; 160 | height: 400px; 161 | .left { 162 | float: left; 163 | width: 100px; 164 | height: 100%; 165 | background-color: #f66; 166 | } 167 | .right { 168 | float: right; 169 | width: 100px; 170 | height: 100%; 171 | background-color: #66f; 172 | } 173 | .center { 174 | margin: 0 100px; 175 | height: 100%; 176 | background-color: #3c9; 177 | } 178 | } 179 | .grail-layout { 180 | display: flex; 181 | width: 400px; 182 | height: 400px; 183 | .left { 184 | width: 100px; 185 | background-color: #f66; 186 | } 187 | .center { 188 | flex: 1; 189 | background-color: #3c9; 190 | } 191 | .right { 192 | width: 100px; 193 | background-color: #66f; 194 | } 195 | } 196 | // 均分布局 197 | .one { 198 | background-color: #f66; 199 | } 200 | .two { 201 | background-color: #66f; 202 | } 203 | .three { 204 | background-color: #f90; 205 | } 206 | .four { 207 | background-color: #09f; 208 | } 209 | // .average-layout { 210 | // width: 400px; 211 | // height: 400px; 212 | // div { 213 | // float: left; 214 | // width: 25%; 215 | // height: 100%; 216 | // } 217 | // } 218 | .average-layout { 219 | display: flex; 220 | width: 400px; 221 | height: 400px; 222 | div { 223 | flex: 1; 224 | } 225 | } 226 | // 居中布局 227 | .center-layout { 228 | display: flex; 229 | width: 400px; 230 | height: 400px; 231 | background-color: #f66; 232 | div { 233 | margin: auto; 234 | width: 100px; 235 | height: 100px; 236 | background-color: #66f; 237 | } 238 | } 239 | // 三角形 240 | .triangle { 241 | border: 50px solid transparent; 242 | width: 0; 243 | height: 0; 244 | & + .triangle { 245 | margin-left: 50px; 246 | } 247 | &.left { 248 | border-right-color: #f66; 249 | } 250 | &.right { 251 | border-left-color: #f66; 252 | } 253 | &.top { 254 | border-bottom-color: #f66; 255 | } 256 | &.bottom { 257 | border-top-color: #f66; 258 | } 259 | &.left-top { 260 | border-left-color: #f66; 261 | border-top-color: #f66; 262 | } 263 | &.left-bottom { 264 | border-left-color: #f66; 265 | border-bottom-color: #f66; 266 | } 267 | &.right-top { 268 | border-right-color: #f66; 269 | border-top-color: #f66; 270 | } 271 | &.right-bottom { 272 | border-right-color: #f66; 273 | border-bottom-color: #f66; 274 | } 275 | } 276 | // 条形加载条 277 | .strip-loading { 278 | display: flex; 279 | justify-content: center; 280 | align-items: center; 281 | width: 200px; 282 | height: 200px; 283 | li { 284 | --time: calc((var(--line-index) - 1) * 200ms); 285 | border-radius: 3px; 286 | width: 6px; 287 | height: 30px; 288 | background-color: #f66; 289 | animation: beat 1.5s ease-in-out var(--time) infinite; 290 | & + li { 291 | margin-left: 5px; 292 | } 293 | // &:nth-child(2) { 294 | // animation-delay: 200ms; 295 | // } 296 | // &:nth-child(3) { 297 | // animation-delay: 400ms; 298 | // } 299 | // &:nth-child(4) { 300 | // animation-delay: 600ms; 301 | // } 302 | // &:nth-child(5) { 303 | // animation-delay: 800ms; 304 | // } 305 | // &:nth-child(6) { 306 | // animation-delay: 1s; 307 | // } 308 | } 309 | } 310 | @keyframes beat { 311 | 0%, 312 | 100% { 313 | transform: scaleY(1); 314 | } 315 | 50% { 316 | transform: scaleY(.5); 317 | } 318 | } 319 | // 渐变圆形 320 | .gradient-circular { 321 | position: relative; 322 | margin-bottom: 200px; 323 | width: 4px; 324 | height: 200px; 325 | li { 326 | --Θ: calc(var(--line-index) / var(--line-count) * 1turn); 327 | position: absolute; 328 | left: 0; 329 | top: 0; 330 | width: 100%; 331 | height: 100%; 332 | background-color: #3c9; 333 | filter: hue-rotate(var(--Θ)); 334 | transform-origin: center bottom; 335 | transform: rotate(var(--Θ)); 336 | } 337 | } 338 | // 气泡对话框 339 | .bubble-box { 340 | position: relative; 341 | border-radius: 5px; 342 | width: 200px; 343 | height: 50px; 344 | background-color: #f90; 345 | line-height: 50px; 346 | text-align: center; 347 | font-size: 20px; 348 | color: #fff; 349 | &::after { 350 | position: absolute; 351 | left: 100%; 352 | top: 50%; 353 | margin-top: -5px; 354 | border: 5px solid transparent; 355 | border-left-color: #f90; 356 | content: ""; 357 | } 358 | } 359 | // 带边框气泡对话框 360 | .bubble-empty-box { 361 | position: relative; 362 | border: 2px solid #f90; 363 | border-radius: 5px; 364 | width: 200px; 365 | height: 50px; 366 | line-height: 46px; 367 | text-align: center; 368 | font-size: 20px; 369 | color: #f90; 370 | &::before { 371 | position: absolute; 372 | left: 100%; 373 | top: 50%; 374 | margin: -5px 0 0 2px; 375 | border: 5px solid transparent; 376 | border-left-color: #f90; 377 | content: ""; 378 | } 379 | &::after { 380 | position: absolute; 381 | left: 100%; 382 | top: 50%; 383 | margin-top: -4px; 384 | border: 4px solid transparent; 385 | border-left-color: #fff; 386 | content: ""; 387 | } 388 | } 389 | // 动感心形 390 | .heart-shape { 391 | position: relative; 392 | width: 200px; 393 | height: 200px; 394 | background-color: #f66; 395 | transform: rotate(45deg); 396 | &::before, 397 | &::after { 398 | position: absolute; 399 | left: 0; 400 | top: 0; 401 | border-radius: 100%; 402 | width: 100%; 403 | height: 100%; 404 | background-color: #f66; 405 | content: ""; 406 | } 407 | &::before { 408 | transform: translateX(-50%); 409 | } 410 | &::after { 411 | transform: translateY(-50%); 412 | } 413 | } 414 | // 渐变动感心形 415 | .gradient-heart-shape { 416 | position: relative; 417 | width: 200px; 418 | height: 200px; 419 | background-image: linear-gradient(to bottom, #09f, #f66); 420 | box-shadow: 0 0 20px rgba(#000, .8); 421 | transform: rotate(45deg); 422 | &::before, 423 | &::after { 424 | position: absolute; 425 | left: 0; 426 | top: 0; 427 | border-radius: 100%; 428 | width: 100%; 429 | height: 100%; 430 | content: ""; 431 | } 432 | &::before { 433 | background-image: linear-gradient(to bottom, #09f, #f66); 434 | transform: translateX(-50%); 435 | } 436 | &::after { 437 | background-image: linear-gradient(to bottom, #3c9, #09f 50%, transparent 50%, transparent); 438 | transform: translateY(-50%); 439 | } 440 | } 441 | // 悬浮提示 442 | $color-list: #f66 #66f #f90 #09f #9c3 #3c9; 443 | .hover-tips { 444 | display: flex; 445 | justify-content: space-between; 446 | width: 200px; 447 | li { 448 | position: relative; 449 | padding: 2px; 450 | border: 2px solid transparent; 451 | border-radius: 100%; 452 | width: 24px; 453 | height: 24px; 454 | background-clip: content-box; 455 | cursor: pointer; 456 | transition: all 300ms; 457 | &::before, 458 | &::after { 459 | position: absolute; 460 | left: 50%; 461 | bottom: 100%; 462 | opacity: 0; 463 | transform: translate3d(0, -30px, 0); 464 | transition: all 300ms; 465 | } 466 | &::before { 467 | margin: 0 0 12px -35px; 468 | border-radius: 5px; 469 | width: 70px; 470 | height: 30px; 471 | background-color: rgba(#000, .5); 472 | line-height: 30px; 473 | text-align: center; 474 | color: #fff; 475 | content: attr(data-name); 476 | } 477 | &::after { 478 | margin-left: -6px; 479 | border: 6px solid transparent; 480 | border-top-color: rgba(#000, .5); 481 | width: 0; 482 | height: 0; 483 | content: ""; 484 | } 485 | @each $color in $color-list { 486 | $index: index($color-list, $color); 487 | &:nth-child(#{$index}) { 488 | background-color: $color; 489 | &:hover { 490 | border-color: $color; 491 | } 492 | } 493 | } 494 | &:hover { 495 | &::before, 496 | &::after { 497 | opacity: 1; 498 | transform: translate3d(0, 0, 0); 499 | } 500 | } 501 | } 502 | } 503 | // 状态悬浮球 504 | .state-ball { 505 | overflow: hidden; 506 | position: relative; 507 | padding: 5px; 508 | border: 3px solid #3c9; 509 | border-radius: 100%; 510 | width: 150px; 511 | height: 150px; 512 | background-color: #fff; 513 | &::before, 514 | &::after { 515 | position: absolute; 516 | left: 50%; 517 | bottom: 5px; 518 | z-index: 9; 519 | margin-left: -100px; 520 | width: 200px; 521 | height: 200px; 522 | content: ""; 523 | } 524 | &::before { 525 | margin-bottom: calc(var(--offset) * 1.34px); 526 | border-radius: 45%; 527 | background-color: rgba(#fff, .5); 528 | animation: rotate 10s linear -5s infinite; 529 | } 530 | &::after { 531 | margin-bottom: calc(var(--offset) * 1.34px + 10px); 532 | border-radius: 40%; 533 | background-color: rgba(#fff, .8); 534 | animation: rotate 15s infinite; 535 | } 536 | .wave { 537 | position: relative; 538 | border-radius: 100%; 539 | width: 100%; 540 | height: 100%; 541 | background-image: linear-gradient(to bottom, #af8 13%, #3c9 91%); 542 | } 543 | .progress::after { 544 | display: flex; 545 | position: absolute; 546 | left: 0; 547 | top: 0; 548 | z-index: 99; 549 | justify-content: center; 550 | align-items: center; 551 | width: 100%; 552 | height: 100%; 553 | font-weight: bold; 554 | font-size: 16px; 555 | color: #09f; 556 | content: counter(progress) "%"; 557 | counter-reset: progress var(--offset); 558 | } 559 | } 560 | @keyframes rotate { 561 | to { 562 | transform: rotate(1turn); 563 | } 564 | } 565 | // 标签导航 566 | .active { 567 | background-color: #3c9; 568 | color: #fff; 569 | } 570 | .tab-navbar { 571 | display: flex; 572 | overflow: hidden; 573 | flex-direction: column-reverse; 574 | border-radius: 10px; 575 | width: 300px; 576 | height: 400px; 577 | input { 578 | &:nth-child(1):checked { 579 | & ~ nav label:nth-child(1) { 580 | @extend .active; 581 | } 582 | & ~ main ul { 583 | background-color: #f66; 584 | transform: translate3d(0, 0, 0); 585 | } 586 | } 587 | &:nth-child(2):checked { 588 | & ~ nav label:nth-child(2) { 589 | @extend .active; 590 | } 591 | & ~ main ul { 592 | background-color: #66f; 593 | transform: translate3d(-25%, 0, 0); 594 | } 595 | } 596 | &:nth-child(3):checked { 597 | & ~ nav label:nth-child(3) { 598 | @extend .active; 599 | } 600 | & ~ main ul { 601 | background-color: #f90; 602 | transform: translate3d(-50%, 0, 0); 603 | } 604 | } 605 | &:nth-child(4):checked { 606 | & ~ nav label:nth-child(4) { 607 | @extend .active; 608 | } 609 | & ~ main ul { 610 | background-color: #09f; 611 | transform: translate3d(-75%, 0, 0); 612 | } 613 | } 614 | } 615 | nav { 616 | display: flex; 617 | height: 40px; 618 | background-color: #f0f0f0; 619 | line-height: 40px; 620 | text-align: center; 621 | label { 622 | flex: 1; 623 | cursor: pointer; 624 | transition: all 300ms; 625 | } 626 | } 627 | main { 628 | flex: 1; 629 | ul { 630 | display: flex; 631 | flex-wrap: nowrap; 632 | width: 400%; 633 | height: 100%; 634 | transition: all 300ms; 635 | } 636 | li { 637 | display: flex; 638 | justify-content: center; 639 | align-items: center; 640 | flex: 1; 641 | font-weight: bold; 642 | font-size: 20px; 643 | color: #fff; 644 | } 645 | } 646 | } -------------------------------------------------------------------------------- /icss/index.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | body { 3 | overflow: hidden; 4 | height: 100vh; 5 | } 6 | 7 | .fullscreen-layout { 8 | display: -webkit-box; 9 | display: -ms-flexbox; 10 | display: flex; 11 | -webkit-box-orient: vertical; 12 | -webkit-box-direction: normal; 13 | -ms-flex-direction: column; 14 | flex-direction: column; 15 | width: 400px; 16 | height: 400px; 17 | } 18 | 19 | .fullscreen-layout header { 20 | height: 50px; 21 | background-color: #f66; 22 | } 23 | 24 | .fullscreen-layout footer { 25 | height: 50px; 26 | background-color: #66f; 27 | } 28 | 29 | .fullscreen-layout main { 30 | -webkit-box-flex: 1; 31 | -ms-flex: 1; 32 | flex: 1; 33 | background-color: #3c9; 34 | } 35 | 36 | .two-column-layout { 37 | display: -webkit-box; 38 | display: -ms-flexbox; 39 | display: flex; 40 | width: 400px; 41 | height: 400px; 42 | } 43 | 44 | .two-column-layout .left { 45 | width: 100px; 46 | background-color: #f66; 47 | } 48 | 49 | .two-column-layout .right { 50 | -webkit-box-flex: 1; 51 | -ms-flex: 1; 52 | flex: 1; 53 | background-color: #66f; 54 | } 55 | 56 | .three-column-layout { 57 | display: -webkit-box; 58 | display: -ms-flexbox; 59 | display: flex; 60 | width: 400px; 61 | height: 400px; 62 | } 63 | 64 | .three-column-layout .left { 65 | width: 50px; 66 | background-color: #f66; 67 | } 68 | 69 | .three-column-layout .center { 70 | width: 100px; 71 | background-color: #66f; 72 | } 73 | 74 | .three-column-layout .right { 75 | -webkit-box-flex: 1; 76 | -ms-flex: 1; 77 | flex: 1; 78 | background-color: #3c9; 79 | } 80 | 81 | .grail-layout-x { 82 | padding: 0 100px; 83 | width: 400px; 84 | height: 400px; 85 | } 86 | 87 | .grail-layout-x .left { 88 | float: left; 89 | margin-left: -100px; 90 | width: 100px; 91 | height: 100%; 92 | background-color: #f66; 93 | } 94 | 95 | .grail-layout-x .right { 96 | float: right; 97 | margin-right: -100px; 98 | width: 100px; 99 | height: 100%; 100 | background-color: #66f; 101 | } 102 | 103 | .grail-layout-x .center { 104 | height: 100%; 105 | background-color: #3c9; 106 | } 107 | 108 | .grail-layout-y { 109 | width: 400px; 110 | height: 400px; 111 | } 112 | 113 | .grail-layout-y .left { 114 | float: left; 115 | width: 100px; 116 | height: 100%; 117 | background-color: #f66; 118 | } 119 | 120 | .grail-layout-y .right { 121 | float: right; 122 | width: 100px; 123 | height: 100%; 124 | background-color: #66f; 125 | } 126 | 127 | .grail-layout-y .center { 128 | margin: 0 100px; 129 | height: 100%; 130 | background-color: #3c9; 131 | } 132 | 133 | .grail-layout { 134 | display: -webkit-box; 135 | display: -ms-flexbox; 136 | display: flex; 137 | width: 400px; 138 | height: 400px; 139 | } 140 | 141 | .grail-layout .left { 142 | width: 100px; 143 | background-color: #f66; 144 | } 145 | 146 | .grail-layout .center { 147 | -webkit-box-flex: 1; 148 | -ms-flex: 1; 149 | flex: 1; 150 | background-color: #3c9; 151 | } 152 | 153 | .grail-layout .right { 154 | width: 100px; 155 | background-color: #66f; 156 | } 157 | 158 | .one { 159 | background-color: #f66; 160 | } 161 | 162 | .two { 163 | background-color: #66f; 164 | } 165 | 166 | .three { 167 | background-color: #f90; 168 | } 169 | 170 | .four { 171 | background-color: #09f; 172 | } 173 | 174 | .average-layout { 175 | display: -webkit-box; 176 | display: -ms-flexbox; 177 | display: flex; 178 | width: 400px; 179 | height: 400px; 180 | } 181 | 182 | .average-layout div { 183 | -webkit-box-flex: 1; 184 | -ms-flex: 1; 185 | flex: 1; 186 | } 187 | 188 | .center-layout { 189 | display: -webkit-box; 190 | display: -ms-flexbox; 191 | display: flex; 192 | width: 400px; 193 | height: 400px; 194 | background-color: #f66; 195 | } 196 | 197 | .center-layout div { 198 | margin: auto; 199 | width: 100px; 200 | height: 100px; 201 | background-color: #66f; 202 | } 203 | 204 | .triangle { 205 | border: 50px solid transparent; 206 | width: 0; 207 | height: 0; 208 | } 209 | 210 | .triangle + .triangle { 211 | margin-left: 50px; 212 | } 213 | 214 | .triangle.left { 215 | border-right-color: #f66; 216 | } 217 | 218 | .triangle.right { 219 | border-left-color: #f66; 220 | } 221 | 222 | .triangle.top { 223 | border-bottom-color: #f66; 224 | } 225 | 226 | .triangle.bottom { 227 | border-top-color: #f66; 228 | } 229 | 230 | .triangle.left-top { 231 | border-left-color: #f66; 232 | border-top-color: #f66; 233 | } 234 | 235 | .triangle.left-bottom { 236 | border-left-color: #f66; 237 | border-bottom-color: #f66; 238 | } 239 | 240 | .triangle.right-top { 241 | border-right-color: #f66; 242 | border-top-color: #f66; 243 | } 244 | 245 | .triangle.right-bottom { 246 | border-right-color: #f66; 247 | border-bottom-color: #f66; 248 | } 249 | 250 | .strip-loading { 251 | display: -webkit-box; 252 | display: -ms-flexbox; 253 | display: flex; 254 | -webkit-box-pack: center; 255 | -ms-flex-pack: center; 256 | justify-content: center; 257 | -webkit-box-align: center; 258 | -ms-flex-align: center; 259 | align-items: center; 260 | width: 200px; 261 | height: 200px; 262 | } 263 | 264 | .strip-loading li { 265 | --time: calc((var(--line-index) - 1) * 200ms); 266 | border-radius: 3px; 267 | width: 6px; 268 | height: 30px; 269 | background-color: #f66; 270 | -webkit-animation: beat 1.5s ease-in-out var(--time) infinite; 271 | animation: beat 1.5s ease-in-out var(--time) infinite; 272 | } 273 | 274 | .strip-loading li + li { 275 | margin-left: 5px; 276 | } 277 | 278 | @-webkit-keyframes beat { 279 | 0%, 280 | 100% { 281 | -webkit-transform: scaleY(1); 282 | transform: scaleY(1); 283 | } 284 | 50% { 285 | -webkit-transform: scaleY(0.5); 286 | transform: scaleY(0.5); 287 | } 288 | } 289 | 290 | @keyframes beat { 291 | 0%, 292 | 100% { 293 | -webkit-transform: scaleY(1); 294 | transform: scaleY(1); 295 | } 296 | 50% { 297 | -webkit-transform: scaleY(0.5); 298 | transform: scaleY(0.5); 299 | } 300 | } 301 | 302 | .gradient-circular { 303 | position: relative; 304 | margin-bottom: 200px; 305 | width: 4px; 306 | height: 200px; 307 | } 308 | 309 | .gradient-circular li { 310 | --Θ: calc(var(--line-index) / var(--line-count) * 1turn); 311 | position: absolute; 312 | left: 0; 313 | top: 0; 314 | width: 100%; 315 | height: 100%; 316 | background-color: #3c9; 317 | -webkit-filter: hue-rotate(var(--Θ)); 318 | filter: hue-rotate(var(--Θ)); 319 | -webkit-transform-origin: center bottom; 320 | transform-origin: center bottom; 321 | -webkit-transform: rotate(var(--Θ)); 322 | transform: rotate(var(--Θ)); 323 | } 324 | 325 | .bubble-box { 326 | position: relative; 327 | border-radius: 5px; 328 | width: 200px; 329 | height: 50px; 330 | background-color: #f90; 331 | line-height: 50px; 332 | text-align: center; 333 | font-size: 20px; 334 | color: #fff; 335 | } 336 | 337 | .bubble-box::after { 338 | position: absolute; 339 | left: 100%; 340 | top: 50%; 341 | margin-top: -5px; 342 | border: 5px solid transparent; 343 | border-left-color: #f90; 344 | content: ""; 345 | } 346 | 347 | .bubble-empty-box { 348 | position: relative; 349 | border: 2px solid #f90; 350 | border-radius: 5px; 351 | width: 200px; 352 | height: 50px; 353 | line-height: 46px; 354 | text-align: center; 355 | font-size: 20px; 356 | color: #f90; 357 | } 358 | 359 | .bubble-empty-box::before { 360 | position: absolute; 361 | left: 100%; 362 | top: 50%; 363 | margin: -5px 0 0 2px; 364 | border: 5px solid transparent; 365 | border-left-color: #f90; 366 | content: ""; 367 | } 368 | 369 | .bubble-empty-box::after { 370 | position: absolute; 371 | left: 100%; 372 | top: 50%; 373 | margin-top: -4px; 374 | border: 4px solid transparent; 375 | border-left-color: #fff; 376 | content: ""; 377 | } 378 | 379 | .heart-shape { 380 | position: relative; 381 | width: 200px; 382 | height: 200px; 383 | background-color: #f66; 384 | -webkit-transform: rotate(45deg); 385 | transform: rotate(45deg); 386 | } 387 | 388 | .heart-shape::before, .heart-shape::after { 389 | position: absolute; 390 | left: 0; 391 | top: 0; 392 | border-radius: 100%; 393 | width: 100%; 394 | height: 100%; 395 | background-color: #f66; 396 | content: ""; 397 | } 398 | 399 | .heart-shape::before { 400 | -webkit-transform: translateX(-50%); 401 | transform: translateX(-50%); 402 | } 403 | 404 | .heart-shape::after { 405 | -webkit-transform: translateY(-50%); 406 | transform: translateY(-50%); 407 | } 408 | 409 | .gradient-heart-shape { 410 | position: relative; 411 | width: 200px; 412 | height: 200px; 413 | background-image: -webkit-gradient(linear, left top, left bottom, from(#09f), to(#f66)); 414 | background-image: linear-gradient(to bottom, #09f, #f66); 415 | -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 416 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 417 | -webkit-transform: rotate(45deg); 418 | transform: rotate(45deg); 419 | } 420 | 421 | .gradient-heart-shape::before, .gradient-heart-shape::after { 422 | position: absolute; 423 | left: 0; 424 | top: 0; 425 | border-radius: 100%; 426 | width: 100%; 427 | height: 100%; 428 | content: ""; 429 | } 430 | 431 | .gradient-heart-shape::before { 432 | background-image: -webkit-gradient(linear, left top, left bottom, from(#09f), to(#f66)); 433 | background-image: linear-gradient(to bottom, #09f, #f66); 434 | -webkit-transform: translateX(-50%); 435 | transform: translateX(-50%); 436 | } 437 | 438 | .gradient-heart-shape::after { 439 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c9), color-stop(50%, #09f), color-stop(50%, transparent), to(transparent)); 440 | background-image: linear-gradient(to bottom, #3c9, #09f 50%, transparent 50%, transparent); 441 | -webkit-transform: translateY(-50%); 442 | transform: translateY(-50%); 443 | } 444 | 445 | .hover-tips { 446 | display: -webkit-box; 447 | display: -ms-flexbox; 448 | display: flex; 449 | -webkit-box-pack: justify; 450 | -ms-flex-pack: justify; 451 | justify-content: space-between; 452 | width: 200px; 453 | } 454 | 455 | .hover-tips li { 456 | position: relative; 457 | padding: 2px; 458 | border: 2px solid transparent; 459 | border-radius: 100%; 460 | width: 24px; 461 | height: 24px; 462 | background-clip: content-box; 463 | cursor: pointer; 464 | -webkit-transition: all 300ms; 465 | transition: all 300ms; 466 | } 467 | 468 | .hover-tips li::before, .hover-tips li::after { 469 | position: absolute; 470 | left: 50%; 471 | bottom: 100%; 472 | opacity: 0; 473 | -webkit-transform: translate3d(0, -30px, 0); 474 | transform: translate3d(0, -30px, 0); 475 | -webkit-transition: all 300ms; 476 | transition: all 300ms; 477 | } 478 | 479 | .hover-tips li::before { 480 | margin: 0 0 12px -35px; 481 | border-radius: 5px; 482 | width: 70px; 483 | height: 30px; 484 | background-color: rgba(0, 0, 0, 0.5); 485 | line-height: 30px; 486 | text-align: center; 487 | color: #fff; 488 | content: attr(data-name); 489 | } 490 | 491 | .hover-tips li::after { 492 | margin-left: -6px; 493 | border: 6px solid transparent; 494 | border-top-color: rgba(0, 0, 0, 0.5); 495 | width: 0; 496 | height: 0; 497 | content: ""; 498 | } 499 | 500 | .hover-tips li:nth-child(1) { 501 | background-color: #f66; 502 | } 503 | 504 | .hover-tips li:nth-child(1):hover { 505 | border-color: #f66; 506 | } 507 | 508 | .hover-tips li:nth-child(2) { 509 | background-color: #66f; 510 | } 511 | 512 | .hover-tips li:nth-child(2):hover { 513 | border-color: #66f; 514 | } 515 | 516 | .hover-tips li:nth-child(3) { 517 | background-color: #f90; 518 | } 519 | 520 | .hover-tips li:nth-child(3):hover { 521 | border-color: #f90; 522 | } 523 | 524 | .hover-tips li:nth-child(4) { 525 | background-color: #09f; 526 | } 527 | 528 | .hover-tips li:nth-child(4):hover { 529 | border-color: #09f; 530 | } 531 | 532 | .hover-tips li:nth-child(5) { 533 | background-color: #9c3; 534 | } 535 | 536 | .hover-tips li:nth-child(5):hover { 537 | border-color: #9c3; 538 | } 539 | 540 | .hover-tips li:nth-child(6) { 541 | background-color: #3c9; 542 | } 543 | 544 | .hover-tips li:nth-child(6):hover { 545 | border-color: #3c9; 546 | } 547 | 548 | .hover-tips li:hover::before, .hover-tips li:hover::after { 549 | opacity: 1; 550 | -webkit-transform: translate3d(0, 0, 0); 551 | transform: translate3d(0, 0, 0); 552 | } 553 | 554 | .state-ball { 555 | overflow: hidden; 556 | position: relative; 557 | padding: 5px; 558 | border: 3px solid #3c9; 559 | border-radius: 100%; 560 | width: 150px; 561 | height: 150px; 562 | background-color: #fff; 563 | } 564 | 565 | .state-ball::before, .state-ball::after { 566 | position: absolute; 567 | left: 50%; 568 | bottom: 5px; 569 | z-index: 9; 570 | margin-left: -100px; 571 | width: 200px; 572 | height: 200px; 573 | content: ""; 574 | } 575 | 576 | .state-ball::before { 577 | margin-bottom: calc(var(--offset) * 1.34px); 578 | border-radius: 45%; 579 | background-color: rgba(255, 255, 255, 0.5); 580 | -webkit-animation: rotate 10s linear -5s infinite; 581 | animation: rotate 10s linear -5s infinite; 582 | } 583 | 584 | .state-ball::after { 585 | margin-bottom: calc(var(--offset) * 1.34px + 10px); 586 | border-radius: 40%; 587 | background-color: rgba(255, 255, 255, 0.8); 588 | -webkit-animation: rotate 15s infinite; 589 | animation: rotate 15s infinite; 590 | } 591 | 592 | .state-ball .wave { 593 | position: relative; 594 | border-radius: 100%; 595 | width: 100%; 596 | height: 100%; 597 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(13%, #af8), color-stop(91%, #3c9)); 598 | background-image: linear-gradient(to bottom, #af8 13%, #3c9 91%); 599 | } 600 | 601 | .state-ball .progress::after { 602 | display: -webkit-box; 603 | display: -ms-flexbox; 604 | display: flex; 605 | position: absolute; 606 | left: 0; 607 | top: 0; 608 | z-index: 99; 609 | -webkit-box-pack: center; 610 | -ms-flex-pack: center; 611 | justify-content: center; 612 | -webkit-box-align: center; 613 | -ms-flex-align: center; 614 | align-items: center; 615 | width: 100%; 616 | height: 100%; 617 | font-weight: bold; 618 | font-size: 16px; 619 | color: #09f; 620 | content: counter(progress) "%"; 621 | counter-reset: progress var(--offset); 622 | } 623 | 624 | @-webkit-keyframes rotate { 625 | to { 626 | -webkit-transform: rotate(1turn); 627 | transform: rotate(1turn); 628 | } 629 | } 630 | 631 | @keyframes rotate { 632 | to { 633 | -webkit-transform: rotate(1turn); 634 | transform: rotate(1turn); 635 | } 636 | } 637 | 638 | .active, .tab-navbar input:nth-child(1):checked ~ nav label:nth-child(1), .tab-navbar input:nth-child(2):checked ~ nav label:nth-child(2), .tab-navbar input:nth-child(3):checked ~ nav label:nth-child(3), .tab-navbar input:nth-child(4):checked ~ nav label:nth-child(4) { 639 | background-color: #3c9; 640 | color: #fff; 641 | } 642 | 643 | .tab-navbar { 644 | display: -webkit-box; 645 | display: -ms-flexbox; 646 | display: flex; 647 | overflow: hidden; 648 | -webkit-box-orient: vertical; 649 | -webkit-box-direction: reverse; 650 | -ms-flex-direction: column-reverse; 651 | flex-direction: column-reverse; 652 | border-radius: 10px; 653 | width: 300px; 654 | height: 400px; 655 | } 656 | 657 | .tab-navbar input:nth-child(1):checked ~ main ul { 658 | background-color: #f66; 659 | -webkit-transform: translate3d(0, 0, 0); 660 | transform: translate3d(0, 0, 0); 661 | } 662 | 663 | .tab-navbar input:nth-child(2):checked ~ main ul { 664 | background-color: #66f; 665 | -webkit-transform: translate3d(-25%, 0, 0); 666 | transform: translate3d(-25%, 0, 0); 667 | } 668 | 669 | .tab-navbar input:nth-child(3):checked ~ main ul { 670 | background-color: #f90; 671 | -webkit-transform: translate3d(-50%, 0, 0); 672 | transform: translate3d(-50%, 0, 0); 673 | } 674 | 675 | .tab-navbar input:nth-child(4):checked ~ main ul { 676 | background-color: #09f; 677 | -webkit-transform: translate3d(-75%, 0, 0); 678 | transform: translate3d(-75%, 0, 0); 679 | } 680 | 681 | .tab-navbar nav { 682 | display: -webkit-box; 683 | display: -ms-flexbox; 684 | display: flex; 685 | height: 40px; 686 | background-color: #f0f0f0; 687 | line-height: 40px; 688 | text-align: center; 689 | } 690 | 691 | .tab-navbar nav label { 692 | -webkit-box-flex: 1; 693 | -ms-flex: 1; 694 | flex: 1; 695 | cursor: pointer; 696 | -webkit-transition: all 300ms; 697 | transition: all 300ms; 698 | } 699 | 700 | .tab-navbar main { 701 | -webkit-box-flex: 1; 702 | -ms-flex: 1; 703 | flex: 1; 704 | } 705 | 706 | .tab-navbar main ul { 707 | display: -webkit-box; 708 | display: -ms-flexbox; 709 | display: flex; 710 | -ms-flex-wrap: nowrap; 711 | flex-wrap: nowrap; 712 | width: 400%; 713 | height: 100%; 714 | -webkit-transition: all 300ms; 715 | transition: all 300ms; 716 | } 717 | 718 | .tab-navbar main li { 719 | display: -webkit-box; 720 | display: -ms-flexbox; 721 | display: flex; 722 | -webkit-box-pack: center; 723 | -ms-flex-pack: center; 724 | justify-content: center; 725 | -webkit-box-align: center; 726 | -ms-flex-align: center; 727 | align-items: center; 728 | -webkit-box-flex: 1; 729 | -ms-flex: 1; 730 | flex: 1; 731 | font-weight: bold; 732 | font-size: 20px; 733 | color: #fff; 734 | } 735 | /*# sourceMappingURL=index.css.map */ --------------------------------------------------------------------------------