react+prism实现多边形css生成效果代码
代码语言:html
所属分类:布局界面
代码描述:react+prism实现多边形css生成效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> /* PrismJS 1.23.0 https://prismjs.com/download.html#themes=prism-tomorrow&languages=css+css-extras&plugins=line-numbers+inline-color+toolbar+copy-to-clipboard */ /** * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML * Based on https://github.com/chriskempson/tomorrow-theme * @author Rose Pritchard */ code[class*="language-"], pre[class*="language-"] { color: #ccc; background: none; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1em; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; -webkit-hyphens: none; -ms-hyphens: none; hyphens: none; } /* Code blocks */ pre[class*="language-"] { padding: 2rem; margin: 0; overflow: auto; outline: transparent; } :not(pre) > code[class*="language-"], pre[class*="language-"] { background: #2d2d2d; } /* Inline code */ :not(pre) > code[class*="language-"] { padding: 0.1em; border-radius: 0.3em; white-space: normal; } pre { height: 100%; display: flex; align-items: center; } .token.comment, .token.block-comment, .token.prolog, .token.doctype, .token.cdata { color: #999; } .token.punctuation { color: #ccc; } .token.tag, .token.attr-name, .token.namespace, .token.deleted { color: #e2777a; } .token.function-name { color: #6196cc; } .token.boolean, .token.number, .token.function { color: #f08d49; } .token.property, .token.class-name, .token.constant, .token.symbol { color: #f8c555; } .token.selector, .token.important, .token.atrule, .token.keyword, .token.builtin { color: #cc99cd; } .token.string, .token.char, .token.attr-value, .token.regex, .token.variable { color: #7ec699; } .token.operator, .token.entity, .token.url { color: #67cdcc; } .token.important, .token.bold { font-weight: bold; } .token.italic { font-style: italic; } .token.entity { cursor: help; } .token.inserted { color: #008000; } pre[class*="language-"].line-numbers { position: relative; padding-left: 3.8em; counter-reset: linenumber; } pre[class*="language-"].line-numbers > code { position: relative; white-space: inherit; } .line-numbers .line-numbers-rows { position: absolute; pointer-events: none; top: 0; font-size: 100%; left: -3.8em; width: 3em; /* works for line-numbers below 1000 lines */ letter-spacing: -1px; border-right: 1px solid #999; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .line-numbers-rows > span { display: block; counter-increment: linenumber; } .line-numbers-rows > span:before { content: counter(linenumber); color: #999; display: block; padding-right: 0.8em; text-align: right; } span.inline-color-wrapper { /* * The background image is the following SVG inline in base 64: * * <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"> * <path fill="gray" d="M0 0h2v2H0z"/> * <path fill="white" d="M0 0h1v1H0zM1 1h1v1H1z"/> * </svg> * * SVG-inlining explained: * https://stackoverflow.com/a/21626701/7595472 */ background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4="); /* This is to prevent visual glitches where one pixel from the repeating pattern could be seen. */ background-position: center; background-size: 110%; display: inline-block; height: 1.333ch; width: 1.333ch; margin: 0 0.333ch; box-sizing: border-box; border: 1px solid #fff; outline: 1px solid rgba(0,0,0,0.5); overflow: hidden; } span.inline-color { display: block; /* To prevent visual glitches again */ height: 120%; width: 120%; } div.code-toolbar { height: 100%; position: relative; } div.code-toolbar > .toolbar { position: absolute; top: 0.3em; right: 0.2em; opacity: 1; } div.code-toolbar:hover > .toolbar { opacity: 1; } /* Separate line b/c rules are thrown out if selector is invalid. IE11 and old Edge versions don't support :focus-within. */ div.code-toolbar:focus-within > .toolbar { opacity: 1; } div.code-toolbar > .toolbar .toolbar-item { display: inline-block; } div.code-toolbar > .toolbar a { cursor: pointer; } div.code-toolbar > .toolbar button { background: none; border: 0; color: inherit; font: inherit; line-height: normal; overflow: visible; padding: 0; -webkit-user-select: none; /* for button */ -moz-user-select: none; -ms-user-select: none; } div.code-toolbar > .toolbar a, div.code-toolbar > .toolbar button { color: #bbb; font-size: 1rem; padding: 0.5rem; font-family: sans-serif; background: #404040; border-radius: 0.5em; outline: transparent; cursor: pointer; } div.code-toolbar > .toolbar a:hover, div.code-toolbar > .toolbar a:focus, div.code-toolbar > .toolbar button:hover, div.code-toolbar > .toolbar button:focus, div.code-toolbar > .toolbar span:hover, div.code-toolbar > .toolbar span:focus { background: #666; text-decoration: none; } * { box-sizing: border-box; } body { min-height: 100vh; display: flex; align-items: center; justify-content: center; flex-direction: column; background: hsl(var(--hue, 10), 90%, 90%); } #hue, #saturation, #lightness { width: 200px; } label { font-family: sans-serif; font-weight: bold; color: #242424; } .controls { display: flex; align-items: center; justify-content: center; } select { font-family: sans-serif; padding: 0.5rem; background: #fafafa; border: 2px solid hsl(var(--hue, 10), 80%, 25%); -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 15px 25px 15px 15px; cursor: pointer; font-size: 1rem; outline: transparent; } .select-wrapper { position: relative; } .select-wrapper:after { content: ""; position: absolute; height: 20px; right: 8px; top: 54%; width: 16px; transform: translate(0, -50%); background: hsl(var(--hue, 10), 80%, 35%); clip-path: polygon(0 10%, 50% 80%, 100% 10%); -webkit-clip-path: polygon(0 10%, 50% 80%, 100% 10%); } .result { display: grid; align-items: center; grid-template-columns: 1fr auto; border-radius: 10px; overflow: hidden; box-shadow: 0 2rem 3rem -2rem #1a1a1a; margin-bottom: 3rem; background: #fff; } .result__render { height: 200px; width: 200px; display: flex; align-items: center; justify-content: center; } .clipped { height: 85%; width: 85%; filter: drop-shadow(0 0 4px hsl(var(--hue, 10), 80%, 34%)); position: relative; } .clipped:after { content: ''; background: hsl(var(--hue, 10), 80%, 64%); height: 100%; width: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); -webkit-clip-path: var(--clip, none); clip-path: var(--clip, none); transition: background 0.15s ease-in-out, -webkit-clip-path 0.15s ease-in-out; transition: clip-path 0.15s ease-in-out, background 0.15s ease-in-out; transition: clip-path 0.15s ease-in-out, background 0.15s ease-in-out, -webkit-clip-path 0.15s ease-in-out; } </style> </head> <body > <div id="app"></div> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/prism.js"></script> <script type="module"> import React, { useRef, useEffect, useState } from 'https://cdn.skypack.dev/react'; import { render } from 'https://cdn.skypack.dev/react-dom'; const { Prism } = window; const ROOT_NODE = document.querySelector('#app'); const CLIPS = [ { label: 'Triangle Up', code: `polygon(50% 0, 7% 75%, 93% 75%)`, clip: 'polygon(50% 0, 7% 75%, 93% 75%, 93% 75%, 93% 75%, 93% 75%, 93% 75%, 93% 75%, 93% 75%, 93% 75%)', hue: Math.random() * 360 }, { label: 'Triangle Left', code: `polygon(75% 7%, 0% 50%, 75% 93%)`, clip: 'polygon(75% 7%, 0% 50%, 75% 93%, 75% 93%, 75% 93%, 75% 93%, 75% 93%, 75% 93%, 75% 93%, 75% 93%)', hue: Math.random() * 360 }, { label: 'Triangle Down', code: `polygon(93% 25%, 7% 25%, 50% 100%)`, clip: 'polygon(93% 25%, 7% 25%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%)', hue: Math.random() * 360 }, { label: 'Triangle Right', code: `polygon(100% 50%, 25% 7%, 25% 93%)`, clip: 'polygon(100% 50%, 25% 7%, 25% 93%, 25% 93%, 25% 93%, 25% 93%, 25% 93%, 25% 93%, 25% 93%, 25% 93%)', hue: Math.random() * 360 }, { label: 'Triangle Top Left', .........完整代码请登录后点击上方下载按钮下载查看
网友评论0