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\":\"GRdgKgV\",\"auto_save\":true},\"hashid\":\"GRdgKgV\",\"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\":62925785,\"user_id\":5928893,\"html\":\"<main>\\n <article>\\n <header>\\n <h1>Cats</h1>\\n <i>felis catus</i>\\n <img src='https://assets.codepen.io/5928893/cat--resized.png' alt=\\\"cat\\\" width=\\\"200\\\" height=\\\"200\\\" />\\n </header>\\n <div class=\\\"divider\\\"></div>\\n <p>\\n Be a <a href=\\\"#\\\" data-popoverhovertarget=\\\"nyan-cat\\\">nyan cat</a>, feel great about it, be annoying 24/7 poop rainbows in litter box all day climb into cupboard and lick the salt off rice cakes scratch at the door then walk away\\n </p>\\n <p>\\n Mice attack curtains love you, then bite you try to hold own back foot to clean it but foot reflexively kicks you in face, go into a rage and bite own foot, hard cat mojo hide head under blanket so no one can see. Stare at ceiling scratch leg; meow for can opener to feed me bite off human's toes but lick human with sandpaper tongue and break lamps and curl up into a ball but scratch the <a href=\\\"#\\\" data-popoverhovertarget=\\\"postman\\\">postman</a> wake up lick paw wake up owner meow meow, so sun bathe.\\n </p>\\n <p>\\n Kitty loves pigs bite plants, cattt catt cattty cat being a cat purr for no reason get video posted to <a href=\\\"#\\\" data-popoverhovertarget=\\\"internet\\\">internet</a> for chasing red dot for eat an easter feather as if it were a bird then burp victoriously, but tender. And sometimes switches in french and say \\\"miaou\\\" just because well why not. Twitch tail in permanent irritation.\\n </p>\\n </article>\\n</main>\\n<div id=\\\"nyan-cat\\\" class=\\\"elevation-1\\\" popover>\\n <picture>\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/nyan-cat.webp\\\" />\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/nyan-cat.gif\\\" />\\n <img src=\\\"https://assets.codepen.io/5928893/nyan-cat.png\\\" alt=\\\"nyan cat\\\" width=\\\"150\\\">\\n </picture>\\n <div class=\\\"popup-text\\\">Nyan Cat</div>\\n</div>\\n<div id=\\\"postman\\\" class=\\\"elevation-1\\\" popover>\\n <picture>\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/postman.webp\\\" />\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/postman.gif\\\" />\\n <img src=\\\"https://assets.codepen.io/5928893/postman.png\\\" alt=\\\"Postman Pat\\\" width=\\\"150\\\">\\n </picture>\\n <div class=\\\"popup-text\\\">Postman</div>\\n</div>\\n<div id=\\\"internet\\\" class=\\\"elevation-1\\\" popover>\\n <picture>\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/internet.webp\\\" />\\n <source media=\\\"(prefers-reduced-motion: no-preference)\\\" srcset=\\\"https://assets.codepen.io/5928893/internet.gif\\\" />\\n <img src=\\\"https://assets.codepen.io/5928893/internet.png\\\" alt=\\\"Cat using keyboard\\\" width=\\\"150\\\">\\n </picture>\\n <div class=\\\"popup-text\\\">Internet</div>\\n</div>\",\"css\":\"@layer demo {\\n [popover] {\\n top: calc(var(--bottom) * 1px);\\n background: var(--surface-2);\\n margin: 0;\\n border: 0;\\n padding: 0;\\n overflow: hidden;\\n border-radius: var(--radius-2);\\n transition: opacity 0.2s, transform 0.2s;\\n opacity: var(--open, 0);\\n box-shadow: var(--shadow-4);\\n transform: translateX(calc(var(--width) * var(--offset)))\\n translateY(calc((1 - var(--open, 0)) * 5%));\\n }\\n\\n .popup-text {\\n padding: var(--size-4);\\n font-weight: var(--font-weight-6);\\n }\\n\\n [popover]:open {\\n --open: 1;\\n }\\n\\n [popover].left {\\n --offset: -0.25px;\\n left: calc(var(--right) * 1px);\\n }\\n [popover].right {\\n --offset: -0.75px;\\n left: calc(var(--left) * 1px);\\n }\\n\\n a {\\n color: var(--indigo-4);\\n }\\n}\\n\\n@layer base {\\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 overflow: auto;\\n font-family: \\\"Google Sans\\\", sans-serif, system-ui;\\n }\\n\\n :where([popover]) {\\n margin: auto;\\n border-width: initial;\\n border-style: solid;\\n }\\n\\n span {\\n display: inline-block;\\n translate: 0 60%;\\n }\\n\\n header {\\n display: grid;\\n grid-template-columns: 1fr auto;\\n grid-template-rows: 1fr 1fr;\\n align-content: center;\\n justify-content: center;\\n }\\n\\n header img {\\n grid-column: 2;\\n grid-row: 1 / -1;\\n object-fit: cover;\\n height: 100%;\\n }\\n\\n article > * + * {\\n margin-top: var(--size-4);\\n }\\n\\n h1 {\\n margin: 0;\\n align-self: end;\\n }\\n\\n article {\\n padding: var(--size-4);\\n padding-bottom: var(--size-12);\\n }\\n\\n .divider {\\n background: var(--text-2);\\n }\\n}\\n\",\"js\":\"const HOVER_TRIGGERS = document.querySelectorAll(\\\"[data-popoverhovertarget]\\\");\\n\\nconst SHOW = (trigger, tooltip) => () => {\\n const {\\n top,\\n bottom,\\n left,\\n right,\\n width,\\n height\\n } = trigger.getBoundingClientRect();\\n tooltip.style.setProperty(\\\"--top\\\", top);\\n tooltip.style.setProperty(\\\"--right\\\", right);\\n tooltip.style.setProperty(\\\"--bottom\\\", bottom);\\n tooltip.style.setProperty(\\\"--left\\\", left);\\n tooltip.style.setProperty(\\\"--width\\\", width);\\n tooltip.style.setProperty(\\\"--height\\\", height);\\n\\n tooltip.className = left > window.innerWidth * 0.5 ? \\\"right\\\" : \\\"left\\\";\\n\\n if (!tooltip.matches(\\\":open\\\")) tooltip.showPopover();\\n};\\n\\nHOVER_TRIGGERS.forEach((TRIGGER) => {\\n const POPUP = document.querySelector(\\n `#${TRIGGER.getAttribute(\\\"data-popoverhovertarget\\\")}`\\n );\\n const SHOW_POP = SHOW(TRIGGER, POPUP);\\n TRIGGER.addEventListener(\\\"pointerenter\\\", SHOW_POP);\\n TRIGGER.addEventListener(\\\"focus\\\", SHOW_POP);\\n});\\n\\nconst closePopUps = () =>\\n document.querySelectorAll(\\\"[popover]\\\").forEach((pop) => {\\n if (pop.matches(\\\":open\\\")) pop.hidePopover();\\n });\\nwindow.addEventListener(\\\"resize\\\", closePopUps);\\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-09-03T19:43:48.441Z\",\"updated_at\":\"2022-11-04T11:58:09.717Z\",\"title\":\"17. Wiki-style tooltip pop-ups\",\"description\":\"\",\"slug_hash\":\"GRdgKgV\",\"head\":\"\",\"private\":false,\"has_animation\":false,\"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\":\"018304e1-76d9-76ae-8f92-11cf4db43c94\",\"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"}