HTML
CSS
JS
Result
Skip Results Iframe
EDIT ON
Live
Live
Live
This Pen is owned by
web.dev
on
CodePen
.
See more by @web-dot-dev on CodePen
External CSS
https://codepen.io/web-dot-dev/pen/XWqWYgB.css
https://codepen.io/web-dot-dev/pen/ZExZWBQ.css
External JavaScript
https://codepen.io/web-dot-dev/pen/XWqWYgB.js
https://codepen.io/web-dot-dev/pen/ZExZWBQ.js
{"__browser":{"country":"US","device":"unknown_device","mobile":false,"name":"unknown browser","platform":"unknown_platform","version":"0"},"__constants":{},"__CPDATA":{"domain_iframe":"https://cdpn.io","environment":"production","host":"codepen.io","iframe_allow":"accelerometer; ambient-light-sensor; camera; display-capture; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr; web-share","iframe_sandbox":"allow-forms allow-modals allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation allow-downloads allow-presentation"},"__graphql":{"data":{"data":null,"errors":[{"message":"Cannot return null for non-nullable field Query.sessionUser"}]},"url":"https://codepen.io/graphql","api":"cprails"},"__pay_stripe_public_key":"pk_live_2GndomDfiklqpSNQn8FrGuwZSMIMzha7DkLJqlYe7IR0ihKAlKdiHg68JJc5eVPt68rzAjzAAVXcUwjySHRCsgjQQ00gtRBUFNH","__pay_braintree_env":"production","__boomboom":{"serve_url":"https://cdpn.io/cpe/boomboom","store_url":"https://codepen.io/cpe/boomboom/store"},"__pageType":"embed","__item":"{\"editor_settings\":{\"auto_run\":true,\"autocomplete\":false,\"code_folding\":true,\"css_pre_processor\":\"none\",\"css_prefix\":\"neither\",\"css_starter\":\"neither\",\"emmet_active\":true,\"font_size\":14,\"font_type\":\"system\",\"format_on_save\":true,\"html_pre_processor\":\"none\",\"indent_with\":\"spaces\",\"js_pre_processor\":\"none\",\"key_bindings\":\"normal\",\"line_numbers\":true,\"line_wrapping\":true,\"match_brackets\":true,\"snippets\":{\"markupSnippets\":{},\"stylesheetSnippets\":{}},\"tab_size\":2,\"theme\":\"twilight\",\"id\":\"jOzRMVK\",\"auto_save\":true},\"hashid\":\"jOzRMVK\",\"itemType\":\"pen\",\"resources\":[{\"url\":\"https://codepen.io/web-dot-dev/pen/XWqWYgB.css\",\"order\":0,\"resource_type\":\"css\",\"par_content\":\"\"},{\"url\":\"https://codepen.io/web-dot-dev/pen/XWqWYgB.js\",\"order\":0,\"resource_type\":\"js\",\"par_content\":\"\"},{\"url\":\"https://codepen.io/web-dot-dev/pen/ZExZWBQ.css\",\"order\":1,\"resource_type\":\"css\",\"par_content\":\"\"},{\"url\":\"https://codepen.io/web-dot-dev/pen/ZExZWBQ.js\",\"order\":1,\"resource_type\":\"js\",\"par_content\":\"\"}],\"tags\":[],\"id\":62719095,\"user_id\":5928893,\"html\":\"<main>\\n <div id=\\\"hover-pop-up\\\" popover>\\n <svg class=\\\"hovercraft\\\" viewBox=\\\"0 0 100 58\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n <path class=\\\"hovercraft__stream\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" d=\\\"M1 9h7M1 17h7M1 25h7\\\" />\\n <path d=\\\"M12 8h42c18.778 0 34 15.222 34 34v14H12V8Z\\\" fill=\\\"#D9D9D9\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" />\\n <path fill=\\\"#E12727\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" d=\\\"M12 1h21v38H12z\\\" />\\n <rect x=\\\"1\\\" y=\\\"34\\\" width=\\\"98\\\" height=\\\"23\\\" rx=\\\"11.5\\\" fill=\\\"#8F8F8F\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" />\\n <rect x=\\\"7\\\" y=\\\"37\\\" width=\\\"22\\\" height=\\\"7\\\" rx=\\\"3.5\\\" fill=\\\"#fff\\\" />\\n <rect x=\\\"37\\\" y=\\\"14\\\" width=\\\"14\\\" height=\\\"14\\\" rx=\\\"1\\\" fill=\\\"#A0D5EB\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" />\\n <path d=\\\"M58.908 14.103c1.56.135 3.87.446 6.264 1.157 2.402.714 4.82 1.812 6.655 3.48 2.71 2.463 5.168 5.17 6.754 7.243.622.813 1.086 1.5 1.38 2.017H58.994A.995.995 0 0 1 58 27V15c0-.566.438-.938.908-.897Z\\\" fill=\\\"#A0D5EB\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" />\\n <rect x=\\\"15\\\" y=\\\"4\\\" width=\\\"10\\\" height=\\\"4\\\" rx=\\\"2\\\" fill=\\\"#fff\\\" />\\n </svg>\\n <div>Craft!</div>\\n </div>\\n <div popoverhovertarget=\\\"hover-pop-up\\\">Hover...</h1>\\n</main>\",\"css\":\"@layer normalize, open-props, base, mdl, demo;\\n\\n@layer demo {\\n [popover] {\\n padding: var(--size-4);\\n }\\n [popover] {\\n --hide: 1;\\n transform: translate(-50%, calc((100 + (25 * (1 - var(--hide)))) * -1%))\\n scale(calc(1 - var(--hide)));\\n position: fixed;\\n top: calc(50% - (var(--font-size-4) * 0.5));\\n left: 50%;\\n margin: 0;\\n text-align: center;\\n overflow: visible;\\n border: 0;\\n border-radius: var(--radius-2);\\n transform-origin: 50% 100%;\\n }\\n\\n [popover]::backdrop {\\n background: hsl(210 80% 50% / 0.25);\\n opacity: calc(1 - var(--hide, 1));\\n }\\n\\n [popover]:before {\\n content: \\\"\\\";\\n width: 25%;\\n aspect-ratio: 1;\\n position: absolute;\\n top: 100%;\\n left: 50%;\\n border-width: inherit;\\n border-style: inherit;\\n background: white;\\n transform: translate(-50%, -50%) rotate(45deg);\\n z-index: -1;\\n }\\n\\n [popover] > * + * {\\n margin-top: var(--size-2);\\n }\\n\\n [popoverhovertarget] {\\n pop-up-show-delay: 1s;\\n }\\n\\n [popover] {\\n pop-up-hide-delay: 1s;\\n }\\n\\n [popover]:open,\\n [popover]:open::backdrop {\\n --hide: 0;\\n }\\n\\n @media (prefers-reduced-motion: no-preference) {\\n [popover]:open .hovercraft {\\n animation: hover 0.25s infinite linear;\\n }\\n\\n [popover]:open .hovercraft__stream {\\n animation: stream 1s infinite;\\n }\\n\\n [popover] {\\n transition: transform 0.2s;\\n }\\n\\n [popover]::backdrop {\\n transition: opacity 0.2s;\\n }\\n }\\n\\n @keyframes stream {\\n 0% {\\n transform: translateX(10px);\\n }\\n 100% {\\n transform: translateX(-10px);\\n }\\n }\\n\\n @keyframes hover {\\n 50% {\\n transform: translateY(-20%);\\n }\\n }\\n\\n div {\\n font-size: var(--font-size-4);\\n font-weight: var(--font-weight-9);\\n }\\n}\\n\\n@layer base {\\n :root {\\n --primary-color: hsl(280 100% 50% / 0.75);\\n --shine: hsl(0 0% 100% / 0.75);\\n --speed: 1s;\\n }\\n\\n *,\\n *:after,\\n *:before {\\n box-sizing: border-box;\\n }\\n\\n body {\\n display: grid;\\n place-items: center;\\n min-height: 100vh;\\n font-family: \\\"Google Sans\\\", sans-serif, system-ui;\\n align-content: center;\\n }\\n\\n :where([popover]) {\\n margin: auto;\\n border-width: initial;\\n border-style: solid;\\n }\\n}\\n\",\"js\":\"// Polyfill\\nlet hoverTimer;\\nconst HOVER_TRIGGERS = document.querySelectorAll(\\\"[popoverhovertarget]\\\");\\nconst tearDown = () => {\\n if (hoverTimer) clearTimeout(hoverTimer);\\n};\\nHOVER_TRIGGERS.forEach((trigger) => {\\n const popup = document.querySelector(\\n `#${trigger.getAttribute(\\\"popoverhovertarget\\\")}`\\n );\\n trigger.addEventListener(\\\"pointerenter\\\", () => {\\n hoverTimer = setTimeout(() => {\\n if (!popup.matches(\\\":open\\\")) popup.showPopover();\\n }, 500);\\n trigger.addEventListener(\\\"pointerleave\\\", tearDown);\\n });\\n});\\n\",\"html_pre_processor\":\"none\",\"css_pre_processor\":\"none\",\"js_pre_processor\":\"none\",\"html_classes\":\"popup-support\",\"css_starter\":\"neither\",\"js_library\":null,\"created_at\":\"2022-08-23T19:29:39.199Z\",\"updated_at\":\"2022-11-04T11:36:21.402Z\",\"title\":\"7. Hover on/off Pop-up [Polyfilled (Sort of)]\",\"description\":\"\",\"slug_hash\":\"jOzRMVK\",\"head\":\"\",\"private\":false,\"has_animation\":true,\"team_id\":0,\"css_prefix\":\"neither\",\"template\":false,\"parent_id\":0,\"comments_count\":0,\"custom_screenshot_filename\":null,\"loves_count\":0,\"pick\":false,\"popularity_score\":0,\"views_count\":0,\"pick_visible_at\":null,\"cpid\":\"0182cc2e-8d7f-75cd-8df1-10d7ee92c099\",\"is_new_editor_pen\":false,\"pen_hash\":null}","__processorsMap":{"autoprefixer":"autoprefixer-10","babel":"babel-7","coffeescript":"coffeescript-2","format-1":"format-1","flutter":"flutter-1","haml":"haml-4","less":"less-3","lint-1":"lint-1","livescript":"livescript-1","markdown":"markdown-11","postcss":"postcss-7","pug":"pug-2","sass":"sass-1","scss":"sass-1","sass-ruby-3":"sass-ruby-3","sass-ruby-compass-3":"sass-ruby-compass-3","slim":"slim-3","stylus":"stylus-0","typescript":"typescript-4","vue":"vue-2","vue3":"vue-3"},"__favicon_mask_icon":"https://cpwebassets.codepen.io/assets/favicon/logo-pin-b4b4269c16397ad2f0f7a01bcdf513a1994f4c94b8af2f191c09eb0d601762b1.svg","__favicon_shortcut_icon":"https://cpwebassets.codepen.io/assets/favicon/favicon-aec34940fbc1a6e787974dcd360f2c6b63348d4b1f4e06c77743096d55480f33.ico","__path_to_iframe_console_runner":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeConsoleRunner-6d8bf8b4b479137260842506acbb12717dace0823c023e08b96360e60b0840d9.js","__path_to_iframe_refresh_css":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeRefreshCSS-44fe83e49b63affec96918c9af88c0d80b209a862cf87ac46bc933074b8c557d.js","__path_to_iframe_runtime_errors":"https://cpwebassets.codepen.io/assets/editor/iframe/iframeRuntimeErrors-4f205f2c14e769b448bcf477de2938c681660d5038bc464e3700256713ebe261.js","__path_to_processor_worker":"https://cpwebassets.codepen.io/assets/packs/router.js","__path_to_stop_execution_on_timeout":"https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-2c7831bb44f98c1391d6a4ffda0e1fd302503391ca806e7fcc7b9b87197aec26.js","__pen_normalize_css_url":"https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css","__pen_prefix_free_url":"https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js","__pen_reset_css_url":"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css","__path_to_infinite_loop_detection":"https://cpwebassets.codepen.io/assets/packs/js/infiniteLoopDetection-f0d5935eb4c2121dfc41.js"}