Updated snippet cards (WIP)

This commit is contained in:
Angelos Chalaris
2019-08-23 13:48:48 +03:00
parent 6990b61e44
commit d12e35a5c8
55 changed files with 456 additions and 501 deletions

BIN
assets/NotoSans-Bold.ttf Normal file

Binary file not shown.

View File

@ -7,12 +7,11 @@
"attributes": { "attributes": {
"text": "Creates a bouncing loader animation.\n\n", "text": "Creates a bouncing loader animation.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0c6a234337b2d3d49f4bc097f59d768026ed6afdfe555853cdcbfef1b06665a8" "hash": "9ddb53b4f0d4d889f585ce69e46dc403ccd12f40dff305134bccf8b8a399bb7a"
} }
}, },
{ {
@ -22,12 +21,11 @@
"attributes": { "attributes": {
"text": "Resets the box-model so that `width`s and `height`s are not affected by their `border`s or `padding`.\n\n", "text": "Resets the box-model so that `width`s and `height`s are not affected by their `border`s or `padding`.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "a67133bc7bf6d831340501643c7efede36b09a7f36516e0cc7fb7d3ff06ee7bd" "hash": "f435b9fcc289760199b4b4781e608438b866887fa91394e94063b42f3841fab7"
} }
}, },
{ {
@ -37,12 +35,11 @@
"attributes": { "attributes": {
"text": "Creates a border animation on hover.\n\n", "text": "Creates a border animation on hover.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8d6a2be5e5ab8ef0d99640d53841e097c0867e51d069852953327fb680451f87" "hash": "ff6401cc784b92a9672e74968719c029de224c29fcfdc3eaeaa764274108f648"
} }
}, },
{ {
@ -52,12 +49,11 @@
"attributes": { "attributes": {
"text": "The function calc() allows to define CSS values with the use of mathematical expressions, the value adopted for the property is the result of a mathematical expression.\n\n", "text": "The function calc() allows to define CSS values with the use of mathematical expressions, the value adopted for the property is the result of a mathematical expression.\n\n",
"tags": [ "tags": [
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "cb08d9b461777b0aac912b2ef76eb996881d00f8f95952dbc252cd79c7fb1284" "hash": "dc3464c5df00866bdea869d2e02f1a3f040f97301259020828df9951de9ada8c"
} }
}, },
{ {
@ -67,12 +63,11 @@
"attributes": { "attributes": {
"text": "Creates a circle shape with pure CSS.\n\n", "text": "Creates a circle shape with pure CSS.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "cbe2b2d3f3341efcd50d6e0eae249c23f6c267509a17f33341cd09850d316fe6" "hash": "1a068c6a0209bfd1e7155326fb219f7590193e3b81802dfecc6d705e9705adf8"
} }
}, },
{ {
@ -82,12 +77,11 @@
"attributes": { "attributes": {
"text": "Ensures that an element self-clears its children.\n\n###### Note: This is only useful if you are still using float to build layouts. Please consider using a modern approach with flexbox layout or grid layout.\n\n", "text": "Ensures that an element self-clears its children.\n\n###### Note: This is only useful if you are still using float to build layouts. Please consider using a modern approach with flexbox layout or grid layout.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "246d8d9c39d53c0e93a3c6fa6cfaa2b8c09282b37d7dbbe8fef44d5a3c585076" "hash": "9479dfb4ec61a01045f480c93e21829b08017765585edbc511a653d5791e2f87"
} }
}, },
{ {
@ -97,12 +91,11 @@
"attributes": { "attributes": {
"text": "Given an element of variable width, it will ensure its height remains proportionate in a responsive fashion\n(i.e., its width to height ratio remains constant).\n\n", "text": "Given an element of variable width, it will ensure its height remains proportionate in a responsive fashion\n(i.e., its width to height ratio remains constant).\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "16ed56f599f8187c3d19e9475a37d567588ddab04bfb430b123a64d792b1f1a9" "hash": "f94bb8368d8074d3d00ca449841b16d0fd4c4267a4abf373c43f41f2b9b6bcd1"
} }
}, },
{ {
@ -113,12 +106,11 @@
"text": "Counters are, in essence, variables maintained by CSS whose values may be incremented by CSS rules to track how many times they're used.\n\n", "text": "Counters are, in essence, variables maintained by CSS whose values may be incremented by CSS rules to track how many times they're used.\n\n",
"tags": [ "tags": [
"visual", "visual",
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "16e70353ec2e154408ffb6827c02df34f47289a471337a428cdc68631e45568a" "hash": "9d12a06e8dfbe67458098bb9e5fb4041a5ebd7cf5d652940ddbb8ae6f49a58dd"
} }
}, },
{ {
@ -128,12 +120,11 @@
"attributes": { "attributes": {
"text": "Customizes the scrollbar style for the document and elements with scrollable overflow, on WebKit platforms.\n\n", "text": "Customizes the scrollbar style for the document and elements with scrollable overflow, on WebKit platforms.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7052930103a4ff5084d310007c05f14a156e90eb0850e816be4db0fd67f5617a" "hash": "bf63836daec92d4b85128faff57480f8297c4005a25c70ee93da97bd54eaa7bf"
} }
}, },
{ {
@ -143,12 +134,11 @@
"attributes": { "attributes": {
"text": "Changes the styling of text selection.\n\n", "text": "Changes the styling of text selection.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "20ac12fac7af2490421ed8ea3bef0a8e014d7d9188afffa3ddcc370475fb0ba1" "hash": "7095b8bab3e1b3736bf0b8a8a4e429d905bceaf2aec83983377d6151e9a0f660"
} }
}, },
{ {
@ -158,12 +148,11 @@
"attributes": { "attributes": {
"text": "CSS variables that contain specific values to be reused throughout a document.\n\n", "text": "CSS variables that contain specific values to be reused throughout a document.\n\n",
"tags": [ "tags": [
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2093cf1daa7f3fc21cc66665ad22c33a5de59ed5fbfb849e65890df32b97846b" "hash": "b07f694e77ae7a8c107c78aa6c4b27d1d1ef0bae5cab96a7a2fe49d48296a8aa"
} }
}, },
{ {
@ -173,12 +162,11 @@
"attributes": { "attributes": {
"text": "Makes the content unselectable.\n\n", "text": "Makes the content unselectable.\n\n",
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "496c33ca13c2bf703547c306630d57418c3aad84c281fb48a68da16d080ceb60" "hash": "6b99a98dfec252430da591aed665c0310b013710546c6c2d7bc4259bd7709a4a"
} }
}, },
{ {
@ -188,12 +176,11 @@
"attributes": { "attributes": {
"text": "Vertically and horizontally centers a child element within its parent element using `display: table` (as an alternative to `flexbox`).\n\n", "text": "Vertically and horizontally centers a child element within its parent element using `display: table` (as an alternative to `flexbox`).\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2054a899b88b3cc37a367cac149a20dbd32f8596c96cd67417751327861777b2" "hash": "08682925f9ae378097e8b3cc1d2a66f9afdcdd4bd052e2f379e03a124a1a613d"
} }
}, },
{ {
@ -203,12 +190,11 @@
"attributes": { "attributes": {
"text": "Creates a donut spinner that can be used to indicate the loading of content.\n\n", "text": "Creates a donut spinner that can be used to indicate the loading of content.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "d8a8e563acca4e4e132b61a13190409b505c8688872bf9db2db1355d110b6195" "hash": "b7aa7db9756605dfa39631fd05139fb668b910030b71d5046c4149ac2d152b21"
} }
}, },
{ {
@ -218,12 +204,11 @@
"attributes": { "attributes": {
"text": "Creates a shadow similar to `box-shadow` but based on the colors of the element itself.\n\n", "text": "Creates a shadow similar to `box-shadow` but based on the colors of the element itself.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "125c57e66fac5a5f0f231889d6cc2bbab0c8693070254386140468ec39045556" "hash": "355f4fabe546f389f59a9cf08b825dca636a471a1413b753d20ea7f1f471428a"
} }
}, },
{ {
@ -233,12 +218,11 @@
"attributes": { "attributes": {
"text": "Variables that can be reused for `transition-timing-function` properties, more\npowerful than the built-in `ease`, `ease-in`, `ease-out` and `ease-in-out`.\n\n", "text": "Variables that can be reused for `transition-timing-function` properties, more\npowerful than the built-in `ease`, `ease-in`, `ease-out` and `ease-in-out`.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "db00cde15c23534842a4a43a274eacc7052e9ad224c0ae3dd62eccbbe74ddb4a" "hash": "48d8123982a07c883c2b8a844a1d57c0e1efb5b4f6e3e828b982c54ee8d6b6fa"
} }
}, },
{ {
@ -248,12 +232,11 @@
"attributes": { "attributes": {
"text": "Creates an effect where text appears to be \"etched\" or engraved into the background.\n\n", "text": "Creates an effect where text appears to be \"etched\" or engraved into the background.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2db756cdd03d0512450b58790fc8a73bb103ea5e0aa22a65cd101f7545cab824" "hash": "e86bdd1cef913538b157fc7fa052d989d6777be0552d9b6e9ebb474f1629d8fe"
} }
}, },
{ {
@ -263,12 +246,11 @@
"attributes": { "attributes": {
"text": "Evenly distributes child elements within a parent element.\n\n", "text": "Evenly distributes child elements within a parent element.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "76a06249df2acaee078959fb44d8bfa721c5e0511774c3c60acef5d60305e2d7" "hash": "1204bc1df035e1c0d0b3808669a3a3d19201d7bc10500d8242c86fdd68a2a4d9"
} }
}, },
{ {
@ -279,12 +261,11 @@
"text": "Changes the fit and position of an image within its container while preserving its aspect ratio. Previously only possible using a background image and the `background-size` property.\n\n", "text": "Changes the fit and position of an image within its container while preserving its aspect ratio. Previously only possible using a background image and the `background-size` property.\n\n",
"tags": [ "tags": [
"layout", "layout",
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "79cb705dc7ae6fbde94fac8dc3b273dda73be7a4739a2cdf9f160ad6f678133a" "hash": "5d09d5e54b7436f047db61223cff15dce2f17f6cffe5e71e0f9061337de3068e"
} }
}, },
{ {
@ -294,12 +275,11 @@
"attributes": { "attributes": {
"text": "Horizontally and vertically centers a child element within a parent element using `flexbox`.\n\n", "text": "Horizontally and vertically centers a child element within a parent element using `flexbox`.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "ec62036188c484a98e832c45535eafbf528020f116a5aac0c853b56f6b91162e" "hash": "9b17338858339d7bb228e85fc7f8609b4728c9ba2107a636c486779c9c696c0c"
} }
}, },
{ {
@ -310,12 +290,11 @@
"text": "Changes the appearance of a form if any of its children are focused.\n\n", "text": "Changes the appearance of a form if any of its children are focused.\n\n",
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "54bae820fad9b5c0aee1d88fc696e02e232d7739e6de81a8674f025f22125f3b" "hash": "6fd9c086b06248408f3934b3d21b513dc751ab023defea1841b03a5a9503fff3"
} }
}, },
{ {
@ -325,12 +304,11 @@
"attributes": { "attributes": {
"text": "The :fullscreen CSS pseudo-class represents an element that's displayed when the browser is in fullscreen mode.\n\n", "text": "The :fullscreen CSS pseudo-class represents an element that's displayed when the browser is in fullscreen mode.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2bb108851d15d46749ba4f1caa2ba08d4754a2ee988e812280925c637f610d40" "hash": "bc28c8d11259e58cb448d898b3ed31e8fc5b22e9840eee14c392368685755787"
} }
}, },
{ {
@ -340,12 +318,11 @@
"attributes": { "attributes": {
"text": "Vertically centers an element in another.\n\n", "text": "Vertically centers an element in another.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "bf4b9426520f568c95484ddeab7f6d691a7f25420bc895c1788a9ffe6eead33a" "hash": "1e9448a7a3fdfda03eb9a43715bd508ea0ce84eaebedf147043fba2f586dc8dc"
} }
}, },
{ {
@ -355,12 +332,11 @@
"attributes": { "attributes": {
"text": "Gives text a gradient color.\n\n", "text": "Gives text a gradient color.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "f29c32b68609dd40c32b6be5afef2ec8ab6b73ef7499ad05e96e1b743caaf100" "hash": "974db536cfe1022d46c3a3fbec5f599a961de986a694c21fa9f493c880263f0d"
} }
}, },
{ {
@ -370,12 +346,11 @@
"attributes": { "attributes": {
"text": "Horizontally and vertically centers a child element within a parent element using `grid`.\n\n", "text": "Horizontally and vertically centers a child element within a parent element using `grid`.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "167267471e09e52f20ed40ffb23b8efa1cfba6434fea5b7c82810c62c8ba5ee0" "hash": "6435b7dc7a403884583c6ed2062dce4e2a43d144578c5d4f6b3ab0882ca959f4"
} }
}, },
{ {
@ -385,12 +360,11 @@
"attributes": { "attributes": {
"text": "Gives an element a border equal to 1 native device pixel in width, which can look\nvery sharp and crisp.\n\n", "text": "Gives an element a border equal to 1 native device pixel in width, which can look\nvery sharp and crisp.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "501822aef899472f65db52bd2c60477fcdc7318027f54d8e3fbd08b5c67f6cda" "hash": "89a7003fb239612b9ce94ebfaff95bc6bf88fec6990ab6256fff7b2ddfa6d42f"
} }
}, },
{ {
@ -400,12 +374,11 @@
"attributes": { "attributes": {
"text": "Transitions an element's height from `0` to `auto` when its height is unknown.\n\n", "text": "Transitions an element's height from `0` to `auto` when its height is unknown.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "edc0f7207e7c9acb83df27d45f55b68197e0a9b9e3d6e59ac25b8551c3797190" "hash": "737b2ca54126cbcb200496d2c61a12ab5e43b9f09a084cfc8cc4f7afa242ad43"
} }
}, },
{ {
@ -415,12 +388,11 @@
"attributes": { "attributes": {
"text": "Creates a shadow box around the text when it is hovered.\n\n", "text": "Creates a shadow box around the text when it is hovered.\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8fc3c2c5fc4248b2ec6bfdbc96cb5912936ccd5865d88da7a3a041a32168968a" "hash": "b0e6bab9cb552d038d24121cfff46c630e6feeb073b3af6f055e9418c511e63b"
} }
}, },
{ {
@ -430,12 +402,11 @@
"attributes": { "attributes": {
"text": "Creates an animated underline effect when the text is hovered over.\n\n<small>**Credit:** https://flatuicolors.com/</small>\n\n", "text": "Creates an animated underline effect when the text is hovered over.\n\n<small>**Credit:** https://flatuicolors.com/</small>\n\n",
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "df7cfeabadd1c3c58a0c14108397ecc645d190be7336835f0fc5ceda88f572af" "hash": "9a97ba2c7f2f28ff9047373a3046d95eb7a9ff03de42d23568d669d61f30c6f1"
} }
}, },
{ {
@ -445,12 +416,11 @@
"attributes": { "attributes": {
"text": "Take advantage of available viewport space by giving the last element the remaining available space in current viewport, even when resizing the window.\n\n", "text": "Take advantage of available viewport space by giving the last element the remaining available space in current viewport, even when resizing the window.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e07fc6f0476a46c201812b41c2fa4eb5adef8ab7f5d538db33d0f64cc3efc02d" "hash": "2f925cc190a9744532de97bb4add65e53cc0b2f3833760f4e7263f5df17cfad5"
} }
}, },
{ {
@ -461,12 +431,11 @@
"text": "A hover effect where the gradient follows the mouse cursor.\n\n<small class=\"snippet__credit\">**Credit:** [Tobias Reich](https://codepen.io/electerious/pen/MQrRxX)</small>\n\n", "text": "A hover effect where the gradient follows the mouse cursor.\n\n<small class=\"snippet__credit\">**Credit:** [Tobias Reich](https://codepen.io/electerious/pen/MQrRxX)</small>\n\n",
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "707e50fd348545fc1f9950ef9cda9e74b28ffe57098cc2849c72358c4bf7bea6" "hash": "e4bc55e29230bb5888832fb886187080da35bafb48d150c0ce82c9d846d700ba"
} }
}, },
{ {
@ -476,12 +445,11 @@
"attributes": { "attributes": {
"text": "The `:not` psuedo selector is useful for styling a group of elements, while leaving the last (or specified) element unstyled.\n\n", "text": "The `:not` psuedo selector is useful for styling a group of elements, while leaving the last (or specified) element unstyled.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0a634e271a55ca9480038feab950d33671b0fc07c09615cd39603279bd2cb0d0" "hash": "129748a7f6e0ee74a87e4ff4c62df53c40359c57047586c887fad9fc76872c04"
} }
}, },
{ {
@ -492,12 +460,11 @@
"text": "A bulletproof way to completely hide an element visually and positionally in the DOM while still allowing it to be accessed by JavaScript and readable by screen readers. This method is very useful for accessibility ([ADA](https://adata.org/learn-about-ada)) development when more context is needed for visually-impaired users. As an alternative to `display: none` which is not readable by screen readers or `visibility: hidden` which takes up physical space in the DOM.\n\n", "text": "A bulletproof way to completely hide an element visually and positionally in the DOM while still allowing it to be accessed by JavaScript and readable by screen readers. This method is very useful for accessibility ([ADA](https://adata.org/learn-about-ada)) development when more context is needed for visually-impaired users. As an alternative to `display: none` which is not readable by screen readers or `visibility: hidden` which takes up physical space in the DOM.\n\n",
"tags": [ "tags": [
"layout", "layout",
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "000a1fd47f9dafba64a625aefc689e33592adf69c8c5ecffb6de68a83f0218aa" "hash": "233e33b59ef7be00766dd0034ab54c6e788af637d761e71efb5c552153a9d163"
} }
}, },
{ {
@ -507,12 +474,11 @@
"attributes": { "attributes": {
"text": "Adds a fading gradient to an overflowing element to better indicate there is more content to be scrolled.\n\n", "text": "Adds a fading gradient to an overflowing element to better indicate there is more content to be scrolled.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2726e4a58683d1e52e8797d60210b4c528dd9000e88953b13523ee3c57fd0084" "hash": "938536c0407ce1d5edcf443ec9a51bdb22815662175ffdd372f5a7bc1446c865"
} }
}, },
{ {
@ -522,12 +488,11 @@
"attributes": { "attributes": {
"text": "Reveals an interactive popout menu on hover and focus.\n\n", "text": "Reveals an interactive popout menu on hover and focus.\n\n",
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8f5c19fb14ee8039e93ff0f3185cb0d27971dd2509f6100fdfd290478211a42b" "hash": "c4ac484b5e94d0c326d1ac122ba9d9f98b71cd3ab3cce1cd3077fbd6e1afe4ee"
} }
}, },
{ {
@ -537,12 +502,11 @@
"attributes": { "attributes": {
"text": "A nicer alternative to `text-decoration: underline` or `<u></u>` where descenders do not clip the underline.\nNatively implemented as `text-decoration-skip-ink: auto` but it has less control over the underline.\n\n", "text": "A nicer alternative to `text-decoration: underline` or `<u></u>` where descenders do not clip the underline.\nNatively implemented as `text-decoration-skip-ink: auto` but it has less control over the underline.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e9372af4e851200e9994e6f753502789693fd4d0d6438bf5b89db9d33a25cb18" "hash": "f91299fbd8d5233de42e09ef7c381a1cce23a83288f9e619f153af22a1275fd2"
} }
}, },
{ {
@ -552,12 +516,11 @@
"attributes": { "attributes": {
"text": "Resets all styles to default values with one property. This will not affect `direction` and `unicode-bidi` properties.\n\n", "text": "Resets all styles to default values with one property. This will not affect `direction` and `unicode-bidi` properties.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "46ba1a8080054a9a5e541a3c5ae2ecdfb6edd124fbfb33de78b9ccd160509b93" "hash": "1e52c4cc2c03669576b53d4be44357e6fea843cffd671419c881b31c927c9170"
} }
}, },
{ {
@ -567,12 +530,11 @@
"attributes": { "attributes": {
"text": "Uses an SVG shape to separate two different blocks to create more a interesting visual appearance compared to standard horizontal separation.\n\n", "text": "Uses an SVG shape to separate two different blocks to create more a interesting visual appearance compared to standard horizontal separation.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "1ce90fc518399c775df1af832345729bdde2a3c12bbdd2fd66c40b9c57a65aa1" "hash": "75e712c07e184d8dbf34818ba245f5b1a4273dfb491a21262b88042ef9e42d6c"
} }
}, },
{ {
@ -582,12 +544,11 @@
"attributes": { "attributes": {
"text": "Fades out the siblings of a hovered item.\n\n", "text": "Fades out the siblings of a hovered item.\n\n",
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8bb55371c003c5304cc1689ea4f1e364fa59a58c6edbc46f63c325cfb2b1f820" "hash": "c4b3ad85a5137635283abe843a9f180027bd751c40be9ca465b0b3e3f52b9fe9"
} }
}, },
{ {
@ -597,12 +558,11 @@
"attributes": { "attributes": {
"text": "Uses the native font of the operating system to get close to a native app feel.\n\n", "text": "Uses the native font of the operating system to get close to a native app feel.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "d32aacb7116aa37895cb5f4f8da6276efa1ce4636b5c892059ff77ccb6218b87" "hash": "23cfcc3319fd473b39269b2745abb7f52752a970307fc561159275208d04a554"
} }
}, },
{ {
@ -613,12 +573,11 @@
"text": "Creates a toggle switch with CSS only.\n\n", "text": "Creates a toggle switch with CSS only.\n\n",
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0f67d565434719c7ee63647c5c342a0df9b5835de1850059f4a8ed2f6c19fb4c" "hash": "e29182514bd83550705267a43d21eec8886ed011c6259f2b3efec9862541f90e"
} }
}, },
{ {
@ -628,12 +587,11 @@
"attributes": { "attributes": {
"text": "Vertically and horizontally centers a child element within its parent element using `position: absolute` and `transform: translate()` (as an alternative to `flexbox` or `display: table`). Similar to `flexbox`, this method does not require you to know the height or width of your parent or child so it is ideal for responsive applications.\n\n", "text": "Vertically and horizontally centers a child element within its parent element using `position: absolute` and `transform: translate()` (as an alternative to `flexbox` or `display: table`). Similar to `flexbox`, this method does not require you to know the height or width of your parent or child so it is ideal for responsive applications.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "5775ecfc218a8c8c1e31bebba5c53f35af9f9a84d48c626d3ee1df5b9858dfec" "hash": "377d480a141a8890f793ef28212d7ed9d60c9d6831286bcea703ab43daca73ce"
} }
}, },
{ {
@ -643,12 +601,11 @@
"attributes": { "attributes": {
"text": "Creates a triangle shape with pure CSS.\n\n", "text": "Creates a triangle shape with pure CSS.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "93ce75702b921beed512604212061414bbd46c3012cfb5250b19d2a9303cf075" "hash": "08382966ae74825502676c0bcdb77426abbf6202d813f5dfd6679d864fc1292e"
} }
}, },
{ {
@ -658,12 +615,11 @@
"attributes": { "attributes": {
"text": "If the text is longer than one line, it will be truncated for `n` lines and end with an gradient fade.\n\n", "text": "If the text is longer than one line, it will be truncated for `n` lines and end with an gradient fade.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e327691cb68125b87ef38e5b0b997de119a798a9212647bef285caf0d07dc389" "hash": "ab94193bfb305844badfe15bda3594e75c40ac9660c11c06efd750119a916f8e"
} }
}, },
{ {
@ -673,12 +629,11 @@
"attributes": { "attributes": {
"text": "If the text is longer than one line, it will be truncated and end with an ellipsis `…`.\n\n", "text": "If the text is longer than one line, it will be truncated and end with an ellipsis `…`.\n\n",
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7835da22bad23fadb280dbe0c7d4431407524c89486ad3555e134dcbfd819272" "hash": "0fbe2c0df9663735aed522286556ac0383756ab0a1a5f673bb81dcb42f89d4d1"
} }
}, },
{ {
@ -688,12 +643,11 @@
"attributes": { "attributes": {
"text": "Creates a striped list with alternating background colors, which is useful for differentiating siblings that have content spread across a wide row.\n\n", "text": "Creates a striped list with alternating background colors, which is useful for differentiating siblings that have content spread across a wide row.\n\n",
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7562a49fa58e85a92eac0e931d746975ccc86f7ea249517b8e2809b6681a4a76" "hash": "43bc0cd7776468f3b74791017349ef278921c8ded7ba0bd7788d2b01bdb68c7a"
} }
} }
], ],

View File

@ -13,18 +13,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"bouncing-loader\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>", "html": "<div class=\"bouncing-loader\">\n <div></div>\n <div></div>\n <div></div>\n</div>",
"css": "@keyframes bouncing-loader {\r\n to {\r\n opacity: 0.1;\r\n transform: translate3d(0, -1rem, 0);\r\n }\r\n}\r\n.bouncing-loader {\r\n display: flex;\r\n justify-content: center;\r\n}\r\n.bouncing-loader > div {\r\n width: 1rem;\r\n height: 1rem;\r\n margin: 3rem 0.2rem;\r\n background: #8385aa;\r\n border-radius: 50%;\r\n animation: bouncing-loader 0.6s infinite alternate;\r\n}\r\n.bouncing-loader > div:nth-child(2) {\r\n animation-delay: 0.2s;\r\n}\r\n.bouncing-loader > div:nth-child(3) {\r\n animation-delay: 0.4s;\r\n}", "css": "@keyframes bouncing-loader {\n to {\n opacity: 0.1;\n transform: translate3d(0, -1rem, 0);\n }\n}\n.bouncing-loader {\n display: flex;\n justify-content: center;\n}\n.bouncing-loader > div {\n width: 1rem;\n height: 1rem;\n margin: 3rem 0.2rem;\n background: #8385aa;\n border-radius: 50%;\n animation: bouncing-loader 0.6s infinite alternate;\n}\n.bouncing-loader > div:nth-child(2) {\n animation-delay: 0.2s;\n}\n.bouncing-loader > div:nth-child(3) {\n animation-delay: 0.4s;\n}",
"js": "", "js": "",
"scopedCss": "@keyframes bouncing-loader {\n to {\n opacity: 0.1;\n transform: translate3d(0, -1rem, 0); } }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader {\n display: flex;\n justify-content: center; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div {\n width: 1rem;\n height: 1rem;\n margin: 3rem 0.2rem;\n background: #8385aa;\n border-radius: 50%;\n animation: bouncing-loader 0.6s infinite alternate; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div:nth-child(2) {\n animation-delay: 0.2s; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div:nth-child(3) {\n animation-delay: 0.4s; }\n" "scopedCss": "@keyframes bouncing-loader {\n to {\n opacity: 0.1;\n transform: translate3d(0, -1rem, 0); } }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader {\n display: flex;\n justify-content: center; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div {\n width: 1rem;\n height: 1rem;\n margin: 3rem 0.2rem;\n background: #8385aa;\n border-radius: 50%;\n animation: bouncing-loader 0.6s infinite alternate; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div:nth-child(2) {\n animation-delay: 0.2s; }\n\n[data-scope=\"bouncing-loader\"] .bouncing-loader > div:nth-child(3) {\n animation-delay: 0.4s; }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0c6a234337b2d3d49f4bc097f59d768026ed6afdfe555853cdcbfef1b06665a8" "hash": "9ddb53b4f0d4d889f585ce69e46dc403ccd12f40dff305134bccf8b8a399bb7a"
} }
}, },
{ {
@ -40,18 +39,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"box\">border-box</div>\r\n<div class=\"box content-box\">content-box</div>", "html": "<div class=\"box\">border-box</div>\n<div class=\"box content-box\">content-box</div>",
"css": "html {\r\n box-sizing: border-box;\r\n}\r\n*,\r\n*::before,\r\n*::after {\r\n box-sizing: inherit;\r\n}\r\n.box {\r\n display: inline-block;\r\n width: 150px;\r\n height: 150px;\r\n padding: 10px;\r\n background: tomato;\r\n color: white;\r\n border: 10px solid red;\r\n}\r\n.content-box {\r\n box-sizing: content-box;\r\n}", "css": "html {\n box-sizing: border-box;\n}\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n.box {\n display: inline-block;\n width: 150px;\n height: 150px;\n padding: 10px;\n background: tomato;\n color: white;\n border: 10px solid red;\n}\n.content-box {\n box-sizing: content-box;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"box-sizing-reset\"] html {\n box-sizing: border-box; }\n\n[data-scope=\"box-sizing-reset\"] *,\n[data-scope=\"box-sizing-reset\"] *::before,\n[data-scope=\"box-sizing-reset\"] *::after {\n box-sizing: inherit; }\n\n[data-scope=\"box-sizing-reset\"] .box {\n display: inline-block;\n width: 150px;\n height: 150px;\n padding: 10px;\n background: tomato;\n color: white;\n border: 10px solid red; }\n\n[data-scope=\"box-sizing-reset\"] .content-box {\n box-sizing: content-box; }\n" "scopedCss": "[data-scope=\"box-sizing-reset\"] html {\n box-sizing: border-box; }\n\n[data-scope=\"box-sizing-reset\"] *,\n[data-scope=\"box-sizing-reset\"] *::before,\n[data-scope=\"box-sizing-reset\"] *::after {\n box-sizing: inherit; }\n\n[data-scope=\"box-sizing-reset\"] .box {\n display: inline-block;\n width: 150px;\n height: 150px;\n padding: 10px;\n background: tomato;\n color: white;\n border: 10px solid red; }\n\n[data-scope=\"box-sizing-reset\"] .content-box {\n box-sizing: content-box; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "a67133bc7bf6d831340501643c7efede36b09a7f36516e0cc7fb7d3ff06ee7bd" "hash": "f435b9fcc289760199b4b4781e608438b866887fa91394e94063b42f3841fab7"
} }
}, },
{ {
@ -68,17 +66,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"button-border\"><button class=\"button\">Submit</button></div>", "html": "<div class=\"button-border\"><button class=\"button\">Submit</button></div>",
"css": ".button {\r\n background-color: #c47135;\r\n border: none;\r\n color: #ffffff;\r\n outline: none;\r\n padding: 12px 40px 10px;\r\n position: relative;\r\n}\r\n.button:before,\r\n.button:after {\r\n border: 0 solid transparent;\r\n transition: all 0.25s;\r\n content: '';\r\n height: 24px;\r\n position: absolute;\r\n width: 24px;\r\n}\r\n.button:before {\r\n border-top: 2px solid #c47135;\r\n left: 0px;\r\n top: -5px;\r\n}\r\n.button:after {\r\n border-bottom: 2px solid #c47135;\r\n bottom: -5px;\r\n right: 0px;\r\n}\r\n.button:hover {\r\n background-color: #c47135;\r\n}\r\n.button:hover:before,\r\n.button:hover:after {\r\n height: 100%;\r\n width: 100%;\r\n}", "css": ".button {\n background-color: #c47135;\n border: none;\n color: #ffffff;\n outline: none;\n padding: 12px 40px 10px;\n position: relative;\n}\n.button:before,\n.button:after {\n border: 0 solid transparent;\n transition: all 0.25s;\n content: '';\n height: 24px;\n position: absolute;\n width: 24px;\n}\n.button:before {\n border-top: 2px solid #c47135;\n left: 0px;\n top: -5px;\n}\n.button:after {\n border-bottom: 2px solid #c47135;\n bottom: -5px;\n right: 0px;\n}\n.button:hover {\n background-color: #c47135;\n}\n.button:hover:before,\n.button:hover:after {\n height: 100%;\n width: 100%;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"button-border-animation\"] .button {\n background-color: #c47135;\n border: none;\n color: #ffffff;\n outline: none;\n padding: 12px 40px 10px;\n position: relative; }\n\n[data-scope=\"button-border-animation\"] .button:before,\n[data-scope=\"button-border-animation\"] .button:after {\n border: 0 solid transparent;\n transition: all 0.25s;\n content: '';\n height: 24px;\n position: absolute;\n width: 24px; }\n\n[data-scope=\"button-border-animation\"] .button:before {\n border-top: 2px solid #c47135;\n left: 0px;\n top: -5px; }\n\n[data-scope=\"button-border-animation\"] .button:after {\n border-bottom: 2px solid #c47135;\n bottom: -5px;\n right: 0px; }\n\n[data-scope=\"button-border-animation\"] .button:hover {\n background-color: #c47135; }\n\n[data-scope=\"button-border-animation\"] .button:hover:before,\n[data-scope=\"button-border-animation\"] .button:hover:after {\n height: 100%;\n width: 100%; }\n" "scopedCss": "[data-scope=\"button-border-animation\"] .button {\n background-color: #c47135;\n border: none;\n color: #ffffff;\n outline: none;\n padding: 12px 40px 10px;\n position: relative; }\n\n[data-scope=\"button-border-animation\"] .button:before,\n[data-scope=\"button-border-animation\"] .button:after {\n border: 0 solid transparent;\n transition: all 0.25s;\n content: '';\n height: 24px;\n position: absolute;\n width: 24px; }\n\n[data-scope=\"button-border-animation\"] .button:before {\n border-top: 2px solid #c47135;\n left: 0px;\n top: -5px; }\n\n[data-scope=\"button-border-animation\"] .button:after {\n border-bottom: 2px solid #c47135;\n bottom: -5px;\n right: 0px; }\n\n[data-scope=\"button-border-animation\"] .button:hover {\n background-color: #c47135; }\n\n[data-scope=\"button-border-animation\"] .button:hover:before,\n[data-scope=\"button-border-animation\"] .button:hover:after {\n height: 100%;\n width: 100%; }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8d6a2be5e5ab8ef0d99640d53841e097c0867e51d069852953327fb680451f87" "hash": "ff6401cc784b92a9672e74968719c029de224c29fcfdc3eaeaa764274108f648"
} }
}, },
{ {
@ -95,17 +92,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"box-example\"></div>", "html": "<div class=\"box-example\"></div>",
"css": ".box-example {\r\n height: 280px;\r\n background: #222 url('https://image.ibb.co/fUL9nS/wolf.png') no-repeat;\r\n background-position: calc(100% - 20px) calc(100% - 20px);\r\n}", "css": ".box-example {\n height: 280px;\n background: #222 url('https://image.ibb.co/fUL9nS/wolf.png') no-repeat;\n background-position: calc(100% - 20px) calc(100% - 20px);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"calc\"] .box-example {\n height: 280px;\n background: #222 url(\"https://image.ibb.co/fUL9nS/wolf.png\") no-repeat;\n background-position: calc(100% - 20px) calc(100% - 20px); }\n" "scopedCss": "[data-scope=\"calc\"] .box-example {\n height: 280px;\n background: #222 url(\"https://image.ibb.co/fUL9nS/wolf.png\") no-repeat;\n background-position: calc(100% - 20px) calc(100% - 20px); }\n"
}, },
"tags": [ "tags": [
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "cb08d9b461777b0aac912b2ef76eb996881d00f8f95952dbc252cd79c7fb1284" "hash": "dc3464c5df00866bdea869d2e02f1a3f040f97301259020828df9951de9ada8c"
} }
}, },
{ {
@ -122,17 +118,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"circle\"></div>", "html": "<div class=\"circle\"></div>",
"css": ".circle {\r\n border-radius: 50%;\r\n width: 2rem;\r\n height: 2rem;\r\n background: #333;\r\n}", "css": ".circle {\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n background: #333;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"circle\"] .circle {\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n background: #333; }\n" "scopedCss": "[data-scope=\"circle\"] .circle {\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n background: #333; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "cbe2b2d3f3341efcd50d6e0eae249c23f6c267509a17f33341cd09850d316fe6" "hash": "1a068c6a0209bfd1e7155326fb219f7590193e3b81802dfecc6d705e9705adf8"
} }
}, },
{ {
@ -148,18 +143,17 @@
"supportPercentage": null "supportPercentage": null
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"clearfix\">\r\n <div class=\"floated\">float a</div>\r\n <div class=\"floated\">float b</div>\r\n <div class=\"floated\">float c</div>\r\n</div>", "html": "<div class=\"clearfix\">\n <div class=\"floated\">float a</div>\n <div class=\"floated\">float b</div>\n <div class=\"floated\">float c</div>\n</div>",
"css": ".clearfix::after {\r\n content: '';\r\n display: block;\r\n clear: both;\r\n}\r\n\r\n.floated {\r\n float: left;\r\n}", "css": ".clearfix::after {\n content: '';\n display: block;\n clear: both;\n}\n\n.floated {\n float: left;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"clearfix\"] .clearfix::after {\n content: '';\n display: block;\n clear: both; }\n\n[data-scope=\"clearfix\"] .floated {\n float: left; }\n" "scopedCss": "[data-scope=\"clearfix\"] .clearfix::after {\n content: '';\n display: block;\n clear: both; }\n\n[data-scope=\"clearfix\"] .floated {\n float: left; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "246d8d9c39d53c0e93a3c6fa6cfaa2b8c09282b37d7dbbe8fef44d5a3c585076" "hash": "9479dfb4ec61a01045f480c93e21829b08017765585edbc511a653d5791e2f87"
} }
}, },
{ {
@ -176,17 +170,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"constant-width-to-height-ratio\"></div>", "html": "<div class=\"constant-width-to-height-ratio\"></div>",
"css": ".constant-width-to-height-ratio {\r\n background: #333;\r\n width: 50%;\r\n}\r\n.constant-width-to-height-ratio::before {\r\n content: '';\r\n padding-top: 100%;\r\n float: left;\r\n}\r\n.constant-width-to-height-ratio::after {\r\n content: '';\r\n display: block;\r\n clear: both;\r\n}", "css": ".constant-width-to-height-ratio {\n background: #333;\n width: 50%;\n}\n.constant-width-to-height-ratio::before {\n content: '';\n padding-top: 100%;\n float: left;\n}\n.constant-width-to-height-ratio::after {\n content: '';\n display: block;\n clear: both;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio {\n background: #333;\n width: 50%; }\n\n[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio::before {\n content: '';\n padding-top: 100%;\n float: left; }\n\n[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio::after {\n content: '';\n display: block;\n clear: both; }\n" "scopedCss": "[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio {\n background: #333;\n width: 50%; }\n\n[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio::before {\n content: '';\n padding-top: 100%;\n float: left; }\n\n[data-scope=\"constant-width-to-height-ratio\"] .constant-width-to-height-ratio::after {\n content: '';\n display: block;\n clear: both; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "16ed56f599f8187c3d19e9475a37d567588ddab04bfb430b123a64d792b1f1a9" "hash": "f94bb8368d8074d3d00ca449841b16d0fd4c4267a4abf373c43f41f2b9b6bcd1"
} }
}, },
{ {
@ -202,19 +195,18 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<ul>\r\n <li>List item</li>\r\n <li>List item</li>\r\n <li>\r\n List item\r\n <ul>\r\n <li>List item</li>\r\n <li>List item</li>\r\n <li>List item</li>\r\n </ul>\r\n </li>\r\n</ul>", "html": "<ul>\n <li>List item</li>\n <li>List item</li>\n <li>\n List item\n <ul>\n <li>List item</li>\n <li>List item</li>\n <li>List item</li>\n </ul>\n </li>\n</ul>",
"css": "ul {\r\n counter-reset: counter;\r\n}\r\n\r\nli::before {\r\n counter-increment: counter;\r\n content: counters(counter, '.') ' ';\r\n}", "css": "ul {\n counter-reset: counter;\n}\n\nli::before {\n counter-increment: counter;\n content: counters(counter, '.') ' ';\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"counter\"] ul {\n counter-reset: counter; }\n\n[data-scope=\"counter\"] li::before {\n counter-increment: counter;\n content: counters(counter, \".\") \" \"; }\n" "scopedCss": "[data-scope=\"counter\"] ul {\n counter-reset: counter; }\n\n[data-scope=\"counter\"] li::before {\n counter-increment: counter;\n content: counters(counter, \".\") \" \"; }\n"
}, },
"tags": [ "tags": [
"visual", "visual",
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "16e70353ec2e154408ffb6827c02df34f47289a471337a428cdc68631e45568a" "hash": "9d12a06e8dfbe67458098bb9e5fb4041a5ebd7cf5d652940ddbb8ae6f49a58dd"
} }
}, },
{ {
@ -230,18 +222,17 @@
"supportPercentage": 97.69 "supportPercentage": 97.69
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"custom-scrollbar\">\r\n <p>\r\n Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\r\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\r\n molestias tempora velit natus. Quas, assumenda nisi. <br />\r\n Quisquam enim qui iure, consequatur velit sit?\r\n </p>\r\n</div>", "html": "<div class=\"custom-scrollbar\">\n <p>\n Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\n molestias tempora velit natus. Quas, assumenda nisi. <br />\n Quisquam enim qui iure, consequatur velit sit?\n </p>\n</div>",
"css": ".custom-scrollbar {\r\n height: 70px;\r\n overflow-y: scroll;\r\n}\r\n\r\n/* To style the document scrollbar, remove `.custom-scrollbar` */\r\n\r\n.custom-scrollbar::-webkit-scrollbar {\r\n width: 8px;\r\n}\r\n\r\n.custom-scrollbar::-webkit-scrollbar-track {\r\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\r\n border-radius: 10px;\r\n}\r\n\r\n.custom-scrollbar::-webkit-scrollbar-thumb {\r\n border-radius: 10px;\r\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);\r\n}", "css": ".custom-scrollbar {\n height: 70px;\n overflow-y: scroll;\n}\n\n/* To style the document scrollbar, remove `.custom-scrollbar` */\n\n.custom-scrollbar::-webkit-scrollbar {\n width: 8px;\n}\n\n.custom-scrollbar::-webkit-scrollbar-track {\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\n border-radius: 10px;\n}\n\n.custom-scrollbar::-webkit-scrollbar-thumb {\n border-radius: 10px;\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"custom-scrollbar\"] {\n /* To style the document scrollbar, remove `.custom-scrollbar` */ }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar {\n height: 70px;\n overflow-y: scroll; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar {\n width: 8px; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar-track {\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\n border-radius: 10px; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar-thumb {\n border-radius: 10px;\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5); }\n" "scopedCss": "[data-scope=\"custom-scrollbar\"] {\n /* To style the document scrollbar, remove `.custom-scrollbar` */ }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar {\n height: 70px;\n overflow-y: scroll; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar {\n width: 8px; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar-track {\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\n border-radius: 10px; }\n [data-scope=\"custom-scrollbar\"] .custom-scrollbar::-webkit-scrollbar-thumb {\n border-radius: 10px;\n box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5); }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7052930103a4ff5084d310007c05f14a156e90eb0850e816be4db0fd67f5617a" "hash": "bf63836daec92d4b85128faff57480f8297c4005a25c70ee93da97bd54eaa7bf"
} }
}, },
{ {
@ -258,17 +249,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"custom-text-selection\">Select some of this text.</p>", "html": "<p class=\"custom-text-selection\">Select some of this text.</p>",
"css": "::selection {\r\n background: aquamarine;\r\n color: black;\r\n}\r\n.custom-text-selection::selection {\r\n background: deeppink;\r\n color: white;\r\n}", "css": "::selection {\n background: aquamarine;\n color: black;\n}\n.custom-text-selection::selection {\n background: deeppink;\n color: white;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"custom-text-selection\"] ::selection {\n background: aquamarine;\n color: black; }\n\n[data-scope=\"custom-text-selection\"] .custom-text-selection::selection {\n background: deeppink;\n color: white; }\n" "scopedCss": "[data-scope=\"custom-text-selection\"] ::selection {\n background: aquamarine;\n color: black; }\n\n[data-scope=\"custom-text-selection\"] .custom-text-selection::selection {\n background: deeppink;\n color: white; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "20ac12fac7af2490421ed8ea3bef0a8e014d7d9188afffa3ddcc370475fb0ba1" "hash": "7095b8bab3e1b3736bf0b8a8a4e429d905bceaf2aec83983377d6151e9a0f660"
} }
}, },
{ {
@ -285,17 +275,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"custom-variables\">CSS is awesome!</p>", "html": "<p class=\"custom-variables\">CSS is awesome!</p>",
"css": ":root {\r\n /* Place variables within here to use the variables globally. */\r\n}\r\n\r\n.custom-variables {\r\n --some-color: #da7800;\r\n --some-keyword: italic;\r\n --some-size: 1.25em;\r\n --some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;\r\n color: var(--some-color);\r\n font-size: var(--some-size);\r\n font-style: var(--some-keyword);\r\n text-shadow: var(--some-complex-value);\r\n}", "css": ":root {\n /* Place variables within here to use the variables globally. */\n}\n\n.custom-variables {\n --some-color: #da7800;\n --some-keyword: italic;\n --some-size: 1.25em;\n --some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;\n color: var(--some-color);\n font-size: var(--some-size);\n font-style: var(--some-keyword);\n text-shadow: var(--some-complex-value);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"custom-variables\"] :root {\n /* Place variables within here to use the variables globally. */ }\n\n[data-scope=\"custom-variables\"] .custom-variables {\n --some-color: #da7800;\n --some-keyword: italic;\n --some-size: 1.25em;\n --some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;\n color: var(--some-color);\n font-size: var(--some-size);\n font-style: var(--some-keyword);\n text-shadow: var(--some-complex-value); }\n" "scopedCss": "[data-scope=\"custom-variables\"] :root {\n /* Place variables within here to use the variables globally. */ }\n\n[data-scope=\"custom-variables\"] .custom-variables {\n --some-color: #da7800;\n --some-keyword: italic;\n --some-size: 1.25em;\n --some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;\n color: var(--some-color);\n font-size: var(--some-size);\n font-style: var(--some-keyword);\n text-shadow: var(--some-complex-value); }\n"
}, },
"tags": [ "tags": [
"other", "other"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2093cf1daa7f3fc21cc66665ad22c33a5de59ed5fbfb849e65890df32b97846b" "hash": "b07f694e77ae7a8c107c78aa6c4b27d1d1ef0bae5cab96a7a2fe49d48296a8aa"
} }
}, },
{ {
@ -311,18 +300,17 @@
"supportPercentage": 97.51 "supportPercentage": 97.51
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p>You can select me.</p>\r\n<p class=\"unselectable\">You can't select me!</p>", "html": "<p>You can select me.</p>\n<p class=\"unselectable\">You can't select me!</p>",
"css": ".unselectable {\r\n user-select: none;\r\n}", "css": ".unselectable {\n user-select: none;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"disable-selection\"] .unselectable {\n user-select: none; }\n" "scopedCss": "[data-scope=\"disable-selection\"] .unselectable {\n user-select: none; }\n"
}, },
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "496c33ca13c2bf703547c306630d57418c3aad84c281fb48a68da16d080ceb60" "hash": "6b99a98dfec252430da591aed665c0310b013710546c6c2d7bc4259bd7709a4a"
} }
}, },
{ {
@ -338,18 +326,17 @@
"supportPercentage": null "supportPercentage": null
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"container\">\r\n <div class=\"center\"><span>Centered content</span></div>\r\n</div>", "html": "<div class=\"container\">\n <div class=\"center\"><span>Centered content</span></div>\n</div>",
"css": ".container {\r\n border: 1px solid #333;\r\n height: 250px;\r\n width: 250px;\r\n}\r\n\r\n.center {\r\n display: table;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n\r\n.center > span {\r\n display: table-cell;\r\n text-align: center;\r\n vertical-align: middle;\r\n}", "css": ".container {\n border: 1px solid #333;\n height: 250px;\n width: 250px;\n}\n\n.center {\n display: table;\n height: 100%;\n width: 100%;\n}\n\n.center > span {\n display: table-cell;\n text-align: center;\n vertical-align: middle;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"display-table-centering\"] .container {\n border: 1px solid #333;\n height: 250px;\n width: 250px; }\n\n[data-scope=\"display-table-centering\"] .center {\n display: table;\n height: 100%;\n width: 100%; }\n\n[data-scope=\"display-table-centering\"] .center > span {\n display: table-cell;\n text-align: center;\n vertical-align: middle; }\n" "scopedCss": "[data-scope=\"display-table-centering\"] .container {\n border: 1px solid #333;\n height: 250px;\n width: 250px; }\n\n[data-scope=\"display-table-centering\"] .center {\n display: table;\n height: 100%;\n width: 100%; }\n\n[data-scope=\"display-table-centering\"] .center > span {\n display: table-cell;\n text-align: center;\n vertical-align: middle; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2054a899b88b3cc37a367cac149a20dbd32f8596c96cd67417751327861777b2" "hash": "08682925f9ae378097e8b3cc1d2a66f9afdcdd4bd052e2f379e03a124a1a613d"
} }
}, },
{ {
@ -366,17 +353,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"donut\"></div>", "html": "<div class=\"donut\"></div>",
"css": "@keyframes donut-spin {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n.donut {\r\n display: inline-block;\r\n border: 4px solid rgba(0, 0, 0, 0.1);\r\n border-left-color: #7983ff;\r\n border-radius: 50%;\r\n width: 30px;\r\n height: 30px;\r\n animation: donut-spin 1.2s linear infinite;\r\n}", "css": "@keyframes donut-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.donut {\n display: inline-block;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-left-color: #7983ff;\n border-radius: 50%;\n width: 30px;\n height: 30px;\n animation: donut-spin 1.2s linear infinite;\n}",
"js": "", "js": "",
"scopedCss": "@keyframes donut-spin {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n[data-scope=\"donut-spinner\"] .donut {\n display: inline-block;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-left-color: #7983ff;\n border-radius: 50%;\n width: 30px;\n height: 30px;\n animation: donut-spin 1.2s linear infinite; }\n" "scopedCss": "@keyframes donut-spin {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n[data-scope=\"donut-spinner\"] .donut {\n display: inline-block;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-left-color: #7983ff;\n border-radius: 50%;\n width: 30px;\n height: 30px;\n animation: donut-spin 1.2s linear infinite; }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "d8a8e563acca4e4e132b61a13190409b505c8688872bf9db2db1355d110b6195" "hash": "b7aa7db9756605dfa39631fd05139fb668b910030b71d5046c4149ac2d152b21"
} }
}, },
{ {
@ -393,17 +379,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"dynamic-shadow\"></div>", "html": "<div class=\"dynamic-shadow\"></div>",
"css": ".dynamic-shadow {\r\n position: relative;\r\n width: 10rem;\r\n height: 10rem;\r\n background: linear-gradient(75deg, #6d78ff, #00ffb8);\r\n z-index: 1;\r\n}\r\n.dynamic-shadow::after {\r\n content: '';\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n background: inherit;\r\n top: 0.5rem;\r\n filter: blur(0.4rem);\r\n opacity: 0.7;\r\n z-index: -1;\r\n}", "css": ".dynamic-shadow {\n position: relative;\n width: 10rem;\n height: 10rem;\n background: linear-gradient(75deg, #6d78ff, #00ffb8);\n z-index: 1;\n}\n.dynamic-shadow::after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n background: inherit;\n top: 0.5rem;\n filter: blur(0.4rem);\n opacity: 0.7;\n z-index: -1;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"dynamic-shadow\"] .dynamic-shadow {\n position: relative;\n width: 10rem;\n height: 10rem;\n background: linear-gradient(75deg, #6d78ff, #00ffb8);\n z-index: 1; }\n\n[data-scope=\"dynamic-shadow\"] .dynamic-shadow::after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n background: inherit;\n top: 0.5rem;\n filter: blur(0.4rem);\n opacity: 0.7;\n z-index: -1; }\n" "scopedCss": "[data-scope=\"dynamic-shadow\"] .dynamic-shadow {\n position: relative;\n width: 10rem;\n height: 10rem;\n background: linear-gradient(75deg, #6d78ff, #00ffb8);\n z-index: 1; }\n\n[data-scope=\"dynamic-shadow\"] .dynamic-shadow::after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n background: inherit;\n top: 0.5rem;\n filter: blur(0.4rem);\n opacity: 0.7;\n z-index: -1; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "125c57e66fac5a5f0f231889d6cc2bbab0c8693070254386140468ec39045556" "hash": "355f4fabe546f389f59a9cf08b825dca636a471a1413b753d20ea7f1f471428a"
} }
}, },
{ {
@ -420,17 +405,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"easing-variables\">Hover</div>", "html": "<div class=\"easing-variables\">Hover</div>",
"css": ":root {\r\n /* Place variables in here to use globally */\r\n}\r\n\r\n.easing-variables {\r\n --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);\r\n --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);\r\n --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);\r\n --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);\r\n --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);\r\n --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);\r\n\r\n --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);\r\n --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);\r\n --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);\r\n --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);\r\n --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);\r\n --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);\r\n\r\n --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);\r\n --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);\r\n --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);\r\n --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);\r\n --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);\r\n --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);\r\n display: inline-block;\r\n width: 75px;\r\n height: 75px;\r\n padding: 10px;\r\n color: white;\r\n line-height: 50px;\r\n text-align: center;\r\n background: #333;\r\n transition: transform 1s var(--ease-out-quart);\r\n}\r\n\r\n.easing-variables:hover {\r\n transform: rotate(45deg);\r\n}", "css": ":root {\n /* Place variables in here to use globally */\n}\n\n.easing-variables {\n --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);\n --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);\n --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);\n --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);\n\n --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);\n --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);\n --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);\n --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);\n --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);\n\n --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);\n --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);\n --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);\n --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);\n --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);\n display: inline-block;\n width: 75px;\n height: 75px;\n padding: 10px;\n color: white;\n line-height: 50px;\n text-align: center;\n background: #333;\n transition: transform 1s var(--ease-out-quart);\n}\n\n.easing-variables:hover {\n transform: rotate(45deg);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"easing-variables\"] :root {\n /* Place variables in here to use globally */ }\n\n[data-scope=\"easing-variables\"] .easing-variables {\n --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);\n --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);\n --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);\n --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);\n --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);\n --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);\n --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);\n --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);\n --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);\n --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);\n --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);\n --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);\n --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);\n --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);\n display: inline-block;\n width: 75px;\n height: 75px;\n padding: 10px;\n color: white;\n line-height: 50px;\n text-align: center;\n background: #333;\n transition: transform 1s var(--ease-out-quart); }\n\n[data-scope=\"easing-variables\"] .easing-variables:hover {\n transform: rotate(45deg); }\n" "scopedCss": "[data-scope=\"easing-variables\"] :root {\n /* Place variables in here to use globally */ }\n\n[data-scope=\"easing-variables\"] .easing-variables {\n --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);\n --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);\n --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);\n --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);\n --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);\n --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);\n --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);\n --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);\n --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);\n --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);\n --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);\n --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);\n --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);\n --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);\n --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);\n display: inline-block;\n width: 75px;\n height: 75px;\n padding: 10px;\n color: white;\n line-height: 50px;\n text-align: center;\n background: #333;\n transition: transform 1s var(--ease-out-quart); }\n\n[data-scope=\"easing-variables\"] .easing-variables:hover {\n transform: rotate(45deg); }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "db00cde15c23534842a4a43a274eacc7052e9ad224c0ae3dd62eccbbe74ddb4a" "hash": "48d8123982a07c883c2b8a844a1d57c0e1efb5b4f6e3e828b982c54ee8d6b6fa"
} }
}, },
{ {
@ -447,17 +431,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"etched-text\">I appear etched into the background.</p>", "html": "<p class=\"etched-text\">I appear etched into the background.</p>",
"css": ".etched-text {\r\n text-shadow: 0 2px white;\r\n font-size: 1.5rem;\r\n font-weight: bold;\r\n color: #b8bec5;\r\n}", "css": ".etched-text {\n text-shadow: 0 2px white;\n font-size: 1.5rem;\n font-weight: bold;\n color: #b8bec5;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"etched-text\"] .etched-text {\n text-shadow: 0 2px white;\n font-size: 1.5rem;\n font-weight: bold;\n color: #b8bec5; }\n" "scopedCss": "[data-scope=\"etched-text\"] .etched-text {\n text-shadow: 0 2px white;\n font-size: 1.5rem;\n font-weight: bold;\n color: #b8bec5; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2db756cdd03d0512450b58790fc8a73bb103ea5e0aa22a65cd101f7545cab824" "hash": "e86bdd1cef913538b157fc7fa052d989d6777be0552d9b6e9ebb474f1629d8fe"
} }
}, },
{ {
@ -473,18 +456,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"evenly-distributed-children\">\r\n <p>Item1</p>\r\n <p>Item2</p>\r\n <p>Item3</p>\r\n</div>", "html": "<div class=\"evenly-distributed-children\">\n <p>Item1</p>\n <p>Item2</p>\n <p>Item3</p>\n</div>",
"css": ".evenly-distributed-children {\r\n display: flex;\r\n justify-content: space-between;\r\n}", "css": ".evenly-distributed-children {\n display: flex;\n justify-content: space-between;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"evenly-distributed-children\"] .evenly-distributed-children {\n display: flex;\n justify-content: space-between; }\n" "scopedCss": "[data-scope=\"evenly-distributed-children\"] .evenly-distributed-children {\n display: flex;\n justify-content: space-between; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "76a06249df2acaee078959fb44d8bfa721c5e0511774c3c60acef5d60305e2d7" "hash": "1204bc1df035e1c0d0b3808669a3a3d19201d7bc10500d8242c86fdd68a2a4d9"
} }
}, },
{ {
@ -500,19 +482,18 @@
"supportPercentage": 99.5 "supportPercentage": 99.5
}, },
"codeBlocks": { "codeBlocks": {
"html": "<img class=\"image image-contain\" src=\"https://picsum.photos/600/200\" />\r\n<img class=\"image image-cover\" src=\"https://picsum.photos/600/200\" />", "html": "<img class=\"image image-contain\" src=\"https://picsum.photos/600/200\" />\n<img class=\"image image-cover\" src=\"https://picsum.photos/600/200\" />",
"css": ".image {\r\n background: #34495e;\r\n border: 1px solid #34495e;\r\n width: 200px;\r\n height: 200px;\r\n}\r\n\r\n.image-contain {\r\n object-fit: contain;\r\n object-position: center;\r\n}\r\n\r\n.image-cover {\r\n object-fit: cover;\r\n object-position: right top;\r\n}", "css": ".image {\n background: #34495e;\n border: 1px solid #34495e;\n width: 200px;\n height: 200px;\n}\n\n.image-contain {\n object-fit: contain;\n object-position: center;\n}\n\n.image-cover {\n object-fit: cover;\n object-position: right top;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"fit-image-in-container\"] .image {\n background: #34495e;\n border: 1px solid #34495e;\n width: 200px;\n height: 200px; }\n\n[data-scope=\"fit-image-in-container\"] .image-contain {\n object-fit: contain;\n object-position: center; }\n\n[data-scope=\"fit-image-in-container\"] .image-cover {\n object-fit: cover;\n object-position: right top; }\n" "scopedCss": "[data-scope=\"fit-image-in-container\"] .image {\n background: #34495e;\n border: 1px solid #34495e;\n width: 200px;\n height: 200px; }\n\n[data-scope=\"fit-image-in-container\"] .image-contain {\n object-fit: contain;\n object-position: center; }\n\n[data-scope=\"fit-image-in-container\"] .image-cover {\n object-fit: cover;\n object-position: right top; }\n"
}, },
"tags": [ "tags": [
"layout", "layout",
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "79cb705dc7ae6fbde94fac8dc3b273dda73be7a4739a2cdf9f160ad6f678133a" "hash": "5d09d5e54b7436f047db61223cff15dce2f17f6cffe5e71e0f9061337de3068e"
} }
}, },
{ {
@ -529,17 +510,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"flexbox-centering\"><div class=\"child\">Centered content.</div></div>", "html": "<div class=\"flexbox-centering\"><div class=\"child\">Centered content.</div></div>",
"css": ".flexbox-centering {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100px;\r\n}", "css": ".flexbox-centering {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100px;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"flexbox-centering\"] .flexbox-centering {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100px; }\n" "scopedCss": "[data-scope=\"flexbox-centering\"] .flexbox-centering {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100px; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "ec62036188c484a98e832c45535eafbf528020f116a5aac0c853b56f6b91162e" "hash": "9b17338858339d7bb228e85fc7f8609b4728c9ba2107a636c486779c9c696c0c"
} }
}, },
{ {
@ -555,19 +535,18 @@
"supportPercentage": 85.39 "supportPercentage": 85.39
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"focus-within\">\r\n <form>\r\n <label for=\"given_name\">Given Name:</label> <input id=\"given_name\" type=\"text\" /> <br />\r\n <label for=\"family_name\">Family Name:</label> <input id=\"family_name\" type=\"text\" />\r\n </form>\r\n</div>", "html": "<div class=\"focus-within\">\n <form>\n <label for=\"given_name\">Given Name:</label> <input id=\"given_name\" type=\"text\" /> <br />\n <label for=\"family_name\">Family Name:</label> <input id=\"family_name\" type=\"text\" />\n </form>\n</div>",
"css": "form {\r\n border: 3px solid #2d98da;\r\n color: #000000;\r\n padding: 4px;\r\n}\r\n\r\nform:focus-within {\r\n background: #f7b731;\r\n color: #000000;\r\n}", "css": "form {\n border: 3px solid #2d98da;\n color: #000000;\n padding: 4px;\n}\n\nform:focus-within {\n background: #f7b731;\n color: #000000;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"focus-within\"] form {\n border: 3px solid #2d98da;\n color: #000000;\n padding: 4px; }\n\n[data-scope=\"focus-within\"] form:focus-within {\n background: #f7b731;\n color: #000000; }\n" "scopedCss": "[data-scope=\"focus-within\"] form {\n border: 3px solid #2d98da;\n color: #000000;\n padding: 4px; }\n\n[data-scope=\"focus-within\"] form:focus-within {\n background: #f7b731;\n color: #000000; }\n"
}, },
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "54bae820fad9b5c0aee1d88fc696e02e232d7739e6de81a8674f025f22125f3b" "hash": "6fd9c086b06248408f3934b3d21b513dc751ab023defea1841b03a5a9503fff3"
} }
}, },
{ {
@ -583,18 +562,17 @@
"supportPercentage": 99.11 "supportPercentage": 99.11
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"container\">\r\n <p><em>Click the button below to enter the element into fullscreen mode. </em></p>\r\n <div class=\"element\" id=\"element\"><p>I change color in fullscreen mode!</p></div>\r\n <br />\r\n <button onclick=\"var el = document.getElementById('element'); el.requestFullscreen();\">\r\n Go Full Screen!\r\n </button>\r\n</div>", "html": "<div class=\"container\">\n <p><em>Click the button below to enter the element into fullscreen mode. </em></p>\n <div class=\"element\" id=\"element\"><p>I change color in fullscreen mode!</p></div>\n <br />\n <button onclick=\"var el = document.getElementById('element'); el.requestFullscreen();\">\n Go Full Screen!\n </button>\n</div>",
"css": ".container {\r\n margin: 40px auto;\r\n max-width: 700px;\r\n}\r\n\r\n.element {\r\n padding: 20px;\r\n height: 300px;\r\n width: 100%;\r\n background-color: skyblue;\r\n}\r\n\r\n.element p {\r\n text-align: center;\r\n color: white;\r\n font-size: 3em;\r\n}\r\n\r\n.element:-ms-fullscreen p {\r\n visibility: visible;\r\n}\r\n\r\n.element:fullscreen {\r\n background-color: #e4708a;\r\n width: 100vw;\r\n height: 100vh;\r\n}", "css": ".container {\n margin: 40px auto;\n max-width: 700px;\n}\n\n.element {\n padding: 20px;\n height: 300px;\n width: 100%;\n background-color: skyblue;\n}\n\n.element p {\n text-align: center;\n color: white;\n font-size: 3em;\n}\n\n.element:-ms-fullscreen p {\n visibility: visible;\n}\n\n.element:fullscreen {\n background-color: #e4708a;\n width: 100vw;\n height: 100vh;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"fullscreen\"] .container {\n margin: 40px auto;\n max-width: 700px; }\n\n[data-scope=\"fullscreen\"] .element {\n padding: 20px;\n height: 300px;\n width: 100%;\n background-color: skyblue; }\n\n[data-scope=\"fullscreen\"] .element p {\n text-align: center;\n color: white;\n font-size: 3em; }\n\n[data-scope=\"fullscreen\"] .element:-ms-fullscreen p {\n visibility: visible; }\n\n[data-scope=\"fullscreen\"] .element:fullscreen {\n background-color: #e4708a;\n width: 100vw;\n height: 100vh; }\n" "scopedCss": "[data-scope=\"fullscreen\"] .container {\n margin: 40px auto;\n max-width: 700px; }\n\n[data-scope=\"fullscreen\"] .element {\n padding: 20px;\n height: 300px;\n width: 100%;\n background-color: skyblue; }\n\n[data-scope=\"fullscreen\"] .element p {\n text-align: center;\n color: white;\n font-size: 3em; }\n\n[data-scope=\"fullscreen\"] .element:-ms-fullscreen p {\n visibility: visible; }\n\n[data-scope=\"fullscreen\"] .element:fullscreen {\n background-color: #e4708a;\n width: 100vw;\n height: 100vh; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2bb108851d15d46749ba4f1caa2ba08d4754a2ee988e812280925c637f610d40" "hash": "bc28c8d11259e58cb448d898b3ed31e8fc5b22e9840eee14c392368685755787"
} }
}, },
{ {
@ -610,18 +588,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"ghost-trick\">\r\n <div class=\"ghosting\"><p>Vertically centered without changing the position property.</p></div>\r\n</div>", "html": "<div class=\"ghost-trick\">\n <div class=\"ghosting\"><p>Vertically centered without changing the position property.</p></div>\n</div>",
"css": ".ghosting {\r\n height: 300px;\r\n background: #0ff;\r\n}\r\n\r\n.ghosting:before {\r\n content: '';\r\n display: inline-block;\r\n height: 100%;\r\n vertical-align: middle;\r\n}\r\n\r\np {\r\n display: inline-block;\r\n vertical-align: middle;\r\n}", "css": ".ghosting {\n height: 300px;\n background: #0ff;\n}\n\n.ghosting:before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n}\n\np {\n display: inline-block;\n vertical-align: middle;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"ghost-trick\"] .ghosting {\n height: 300px;\n background: #0ff; }\n\n[data-scope=\"ghost-trick\"] .ghosting:before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle; }\n\n[data-scope=\"ghost-trick\"] p {\n display: inline-block;\n vertical-align: middle; }\n" "scopedCss": "[data-scope=\"ghost-trick\"] .ghosting {\n height: 300px;\n background: #0ff; }\n\n[data-scope=\"ghost-trick\"] .ghosting:before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle; }\n\n[data-scope=\"ghost-trick\"] p {\n display: inline-block;\n vertical-align: middle; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "bf4b9426520f568c95484ddeab7f6d691a7f25420bc895c1788a9ffe6eead33a" "hash": "1e9448a7a3fdfda03eb9a43715bd508ea0ce84eaebedf147043fba2f586dc8dc"
} }
}, },
{ {
@ -638,17 +615,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"gradient-text\">Gradient text</p>", "html": "<p class=\"gradient-text\">Gradient text</p>",
"css": ".gradient-text {\r\n background: -webkit-linear-gradient(pink, red);\r\n -webkit-text-fill-color: transparent;\r\n -webkit-background-clip: text;\r\n}", "css": ".gradient-text {\n background: -webkit-linear-gradient(pink, red);\n -webkit-text-fill-color: transparent;\n -webkit-background-clip: text;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"gradient-text\"] .gradient-text {\n background: -webkit-linear-gradient(pink, red);\n -webkit-text-fill-color: transparent;\n -webkit-background-clip: text; }\n" "scopedCss": "[data-scope=\"gradient-text\"] .gradient-text {\n background: -webkit-linear-gradient(pink, red);\n -webkit-text-fill-color: transparent;\n -webkit-background-clip: text; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "f29c32b68609dd40c32b6be5afef2ec8ab6b73ef7499ad05e96e1b743caaf100" "hash": "974db536cfe1022d46c3a3fbec5f599a961de986a694c21fa9f493c880263f0d"
} }
}, },
{ {
@ -665,17 +641,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"grid-centering\"><div class=\"child\">Centered content.</div></div>", "html": "<div class=\"grid-centering\"><div class=\"child\">Centered content.</div></div>",
"css": ".grid-centering {\r\n display: grid;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100px;\r\n}", "css": ".grid-centering {\n display: grid;\n justify-content: center;\n align-items: center;\n height: 100px;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"grid-centering\"] .grid-centering {\n display: grid;\n justify-content: center;\n align-items: center;\n height: 100px; }\n" "scopedCss": "[data-scope=\"grid-centering\"] .grid-centering {\n display: grid;\n justify-content: center;\n align-items: center;\n height: 100px; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "167267471e09e52f20ed40ffb23b8efa1cfba6434fea5b7c82810c62c8ba5ee0" "hash": "6435b7dc7a403884583c6ed2062dce4e2a43d144578c5d4f6b3ab0882ca959f4"
} }
}, },
{ {
@ -692,17 +667,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"hairline-border\">text</div>", "html": "<div class=\"hairline-border\">text</div>",
"css": ".hairline-border {\r\n box-shadow: 0 0 0 1px;\r\n}\r\n\r\n@media (min-resolution: 2dppx) {\r\n .hairline-border {\r\n box-shadow: 0 0 0 0.5px;\r\n }\r\n}\r\n\r\n@media (min-resolution: 3dppx) {\r\n .hairline-border {\r\n box-shadow: 0 0 0 0.33333333px;\r\n }\r\n}\r\n\r\n@media (min-resolution: 4dppx) {\r\n .hairline-border {\r\n box-shadow: 0 0 0 0.25px;\r\n }\r\n}", "css": ".hairline-border {\n box-shadow: 0 0 0 1px;\n}\n\n@media (min-resolution: 2dppx) {\n .hairline-border {\n box-shadow: 0 0 0 0.5px;\n }\n}\n\n@media (min-resolution: 3dppx) {\n .hairline-border {\n box-shadow: 0 0 0 0.33333333px;\n }\n}\n\n@media (min-resolution: 4dppx) {\n .hairline-border {\n box-shadow: 0 0 0 0.25px;\n }\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 1px; }\n\n@media (min-resolution: 2dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.5px; } }\n\n@media (min-resolution: 3dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.33333333px; } }\n\n@media (min-resolution: 4dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.25px; } }\n" "scopedCss": "[data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 1px; }\n\n@media (min-resolution: 2dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.5px; } }\n\n@media (min-resolution: 3dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.33333333px; } }\n\n@media (min-resolution: 4dppx) {\n [data-scope=\"hairline-border\"] .hairline-border {\n box-shadow: 0 0 0 0.25px; } }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "501822aef899472f65db52bd2c60477fcdc7318027f54d8e3fbd08b5c67f6cda" "hash": "89a7003fb239612b9ce94ebfaff95bc6bf88fec6990ab6256fff7b2ddfa6d42f"
} }
}, },
{ {
@ -718,18 +692,17 @@
"supportPercentage": 96.51 "supportPercentage": 96.51
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"trigger\">\r\n Hover me to see a height transition.\r\n <div class=\"el\">content</div>\r\n</div>", "html": "<div class=\"trigger\">\n Hover me to see a height transition.\n <div class=\"el\">content</div>\n</div>",
"css": ".el {\r\n transition: max-height 0.5s;\r\n overflow: hidden;\r\n max-height: 0;\r\n}\r\n\r\n.trigger:hover > .el {\r\n max-height: var(--max-height);\r\n}", "css": ".el {\n transition: max-height 0.5s;\n overflow: hidden;\n max-height: 0;\n}\n\n.trigger:hover > .el {\n max-height: var(--max-height);\n}",
"js": "var el = document.querySelector('.el')\r\nvar height = el.scrollHeight\r\nel.style.setProperty('--max-height', height + 'px')", "js": "var el = document.querySelector('.el')\nvar height = el.scrollHeight\nel.style.setProperty('--max-height', height + 'px')",
"scopedCss": "[data-scope=\"height-transition\"] .el {\n transition: max-height 0.5s;\n overflow: hidden;\n max-height: 0; }\n\n[data-scope=\"height-transition\"] .trigger:hover > .el {\n max-height: var(--max-height); }\n" "scopedCss": "[data-scope=\"height-transition\"] .el {\n transition: max-height 0.5s;\n overflow: hidden;\n max-height: 0; }\n\n[data-scope=\"height-transition\"] .trigger:hover > .el {\n max-height: var(--max-height); }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "edc0f7207e7c9acb83df27d45f55b68197e0a9b9e3d6e59ac25b8551c3797190" "hash": "737b2ca54126cbcb200496d2c61a12ab5e43b9f09a084cfc8cc4f7afa242ad43"
} }
}, },
{ {
@ -746,17 +719,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"hover-shadow-box-animation\">Box it!</p>", "html": "<p class=\"hover-shadow-box-animation\">Box it!</p>",
"css": ".hover-shadow-box-animation {\r\n display: inline-block;\r\n vertical-align: middle;\r\n transform: perspective(1px) translateZ(0);\r\n box-shadow: 0 0 1px transparent;\r\n margin: 10px;\r\n transition-duration: 0.3s;\r\n transition-property: box-shadow, transform;\r\n}\r\n.hover-shadow-box-animation:hover,\r\n.hover-shadow-box-animation:focus,\r\n.hover-shadow-box-animation:active {\r\n box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);\r\n transform: scale(1.2);\r\n}", "css": ".hover-shadow-box-animation {\n display: inline-block;\n vertical-align: middle;\n transform: perspective(1px) translateZ(0);\n box-shadow: 0 0 1px transparent;\n margin: 10px;\n transition-duration: 0.3s;\n transition-property: box-shadow, transform;\n}\n.hover-shadow-box-animation:hover,\n.hover-shadow-box-animation:focus,\n.hover-shadow-box-animation:active {\n box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);\n transform: scale(1.2);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation {\n display: inline-block;\n vertical-align: middle;\n transform: perspective(1px) translateZ(0);\n box-shadow: 0 0 1px transparent;\n margin: 10px;\n transition-duration: 0.3s;\n transition-property: box-shadow, transform; }\n\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:hover,\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:focus,\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:active {\n box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);\n transform: scale(1.2); }\n" "scopedCss": "[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation {\n display: inline-block;\n vertical-align: middle;\n transform: perspective(1px) translateZ(0);\n box-shadow: 0 0 1px transparent;\n margin: 10px;\n transition-duration: 0.3s;\n transition-property: box-shadow, transform; }\n\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:hover,\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:focus,\n[data-scope=\"hover-shadow-box-animation\"] .hover-shadow-box-animation:active {\n box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);\n transform: scale(1.2); }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8fc3c2c5fc4248b2ec6bfdbc96cb5912936ccd5865d88da7a3a041a32168968a" "hash": "b0e6bab9cb552d038d24121cfff46c630e6feeb073b3af6f055e9418c511e63b"
} }
}, },
{ {
@ -773,17 +745,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"hover-underline-animation\">Hover this text to see the effect!</p>", "html": "<p class=\"hover-underline-animation\">Hover this text to see the effect!</p>",
"css": ".hover-underline-animation {\r\n display: inline-block;\r\n position: relative;\r\n color: #0087ca;\r\n}\r\n.hover-underline-animation::after {\r\n content: '';\r\n position: absolute;\r\n width: 100%;\r\n transform: scaleX(0);\r\n height: 2px;\r\n bottom: 0;\r\n left: 0;\r\n background-color: #0087ca;\r\n transform-origin: bottom right;\r\n transition: transform 0.25s ease-out;\r\n}\r\n.hover-underline-animation:hover::after {\r\n transform: scaleX(1);\r\n transform-origin: bottom left;\r\n}", "css": ".hover-underline-animation {\n display: inline-block;\n position: relative;\n color: #0087ca;\n}\n.hover-underline-animation::after {\n content: '';\n position: absolute;\n width: 100%;\n transform: scaleX(0);\n height: 2px;\n bottom: 0;\n left: 0;\n background-color: #0087ca;\n transform-origin: bottom right;\n transition: transform 0.25s ease-out;\n}\n.hover-underline-animation:hover::after {\n transform: scaleX(1);\n transform-origin: bottom left;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"hover-underline-animation\"] .hover-underline-animation {\n display: inline-block;\n position: relative;\n color: #0087ca; }\n\n[data-scope=\"hover-underline-animation\"] .hover-underline-animation::after {\n content: '';\n position: absolute;\n width: 100%;\n transform: scaleX(0);\n height: 2px;\n bottom: 0;\n left: 0;\n background-color: #0087ca;\n transform-origin: bottom right;\n transition: transform 0.25s ease-out; }\n\n[data-scope=\"hover-underline-animation\"] .hover-underline-animation:hover::after {\n transform: scaleX(1);\n transform-origin: bottom left; }\n" "scopedCss": "[data-scope=\"hover-underline-animation\"] .hover-underline-animation {\n display: inline-block;\n position: relative;\n color: #0087ca; }\n\n[data-scope=\"hover-underline-animation\"] .hover-underline-animation::after {\n content: '';\n position: absolute;\n width: 100%;\n transform: scaleX(0);\n height: 2px;\n bottom: 0;\n left: 0;\n background-color: #0087ca;\n transform-origin: bottom right;\n transition: transform 0.25s ease-out; }\n\n[data-scope=\"hover-underline-animation\"] .hover-underline-animation:hover::after {\n transform: scaleX(1);\n transform-origin: bottom left; }\n"
}, },
"tags": [ "tags": [
"animation", "animation"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "df7cfeabadd1c3c58a0c14108397ecc645d190be7336835f0fc5ceda88f572af" "hash": "9a97ba2c7f2f28ff9047373a3046d95eb7a9ff03de42d23568d669d61f30c6f1"
} }
}, },
{ {
@ -799,18 +770,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"container\">\r\n <div>Div 1</div>\r\n <div>Div 2</div>\r\n <div>Div 3</div>\r\n</div>", "html": "<div class=\"container\">\n <div>Div 1</div>\n <div>Div 2</div>\n <div>Div 3</div>\n</div>",
"css": "html,\r\nbody {\r\n height: 100%;\r\n margin: 0;\r\n}\r\n\r\n.container {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.container > div:last-child {\r\n background-color: tomato;\r\n flex: 1;\r\n}", "css": "html,\nbody {\n height: 100%;\n margin: 0;\n}\n\n.container {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.container > div:last-child {\n background-color: tomato;\n flex: 1;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"last-item-with-remaining-available-height\"] html,\n[data-scope=\"last-item-with-remaining-available-height\"] body {\n height: 100%;\n margin: 0; }\n\n[data-scope=\"last-item-with-remaining-available-height\"] .container {\n height: 100%;\n display: flex;\n flex-direction: column; }\n\n[data-scope=\"last-item-with-remaining-available-height\"] .container > div:last-child {\n background-color: tomato;\n flex: 1; }\n" "scopedCss": "[data-scope=\"last-item-with-remaining-available-height\"] html,\n[data-scope=\"last-item-with-remaining-available-height\"] body {\n height: 100%;\n margin: 0; }\n\n[data-scope=\"last-item-with-remaining-available-height\"] .container {\n height: 100%;\n display: flex;\n flex-direction: column; }\n\n[data-scope=\"last-item-with-remaining-available-height\"] .container > div:last-child {\n background-color: tomato;\n flex: 1; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e07fc6f0476a46c201812b41c2fa4eb5adef8ab7f5d538db33d0f64cc3efc02d" "hash": "2f925cc190a9744532de97bb4add65e53cc0b2f3833760f4e7263f5df17cfad5"
} }
}, },
{ {
@ -827,18 +797,17 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<button class=\"mouse-cursor-gradient-tracking\"><span>Hover me</span></button>", "html": "<button class=\"mouse-cursor-gradient-tracking\"><span>Hover me</span></button>",
"css": ".mouse-cursor-gradient-tracking {\r\n position: relative;\r\n background: #7983ff;\r\n padding: 0.5rem 1rem;\r\n font-size: 1.2rem;\r\n border: none;\r\n color: white;\r\n cursor: pointer;\r\n outline: none;\r\n overflow: hidden;\r\n}\r\n\r\n.mouse-cursor-gradient-tracking span {\r\n position: relative;\r\n}\r\n\r\n.mouse-cursor-gradient-tracking::before {\r\n --size: 0;\r\n content: '';\r\n position: absolute;\r\n left: var(--x);\r\n top: var(--y);\r\n width: var(--size);\r\n height: var(--size);\r\n background: radial-gradient(circle closest-side, pink, transparent);\r\n transform: translate(-50%, -50%);\r\n transition: width 0.2s ease, height 0.2s ease;\r\n}\r\n\r\n.mouse-cursor-gradient-tracking:hover::before {\r\n --size: 200px;\r\n}", "css": ".mouse-cursor-gradient-tracking {\n position: relative;\n background: #7983ff;\n padding: 0.5rem 1rem;\n font-size: 1.2rem;\n border: none;\n color: white;\n cursor: pointer;\n outline: none;\n overflow: hidden;\n}\n\n.mouse-cursor-gradient-tracking span {\n position: relative;\n}\n\n.mouse-cursor-gradient-tracking::before {\n --size: 0;\n content: '';\n position: absolute;\n left: var(--x);\n top: var(--y);\n width: var(--size);\n height: var(--size);\n background: radial-gradient(circle closest-side, pink, transparent);\n transform: translate(-50%, -50%);\n transition: width 0.2s ease, height 0.2s ease;\n}\n\n.mouse-cursor-gradient-tracking:hover::before {\n --size: 200px;\n}",
"js": "var btn = document.querySelector('.mouse-cursor-gradient-tracking')\r\nbtn.onmousemove = function(e) {\r\n var x = e.pageX - btn.offsetLeft - btn.offsetParent.offsetLeft\r\n var y = e.pageY - btn.offsetTop - btn.offsetParent.offsetTop\r\n btn.style.setProperty('--x', x + 'px')\r\n btn.style.setProperty('--y', y + 'px')\r\n}", "js": "var btn = document.querySelector('.mouse-cursor-gradient-tracking')\nbtn.onmousemove = function(e) {\n var x = e.pageX - btn.offsetLeft - btn.offsetParent.offsetLeft\n var y = e.pageY - btn.offsetTop - btn.offsetParent.offsetTop\n btn.style.setProperty('--x', x + 'px')\n btn.style.setProperty('--y', y + 'px')\n}",
"scopedCss": "[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking {\n position: relative;\n background: #7983ff;\n padding: 0.5rem 1rem;\n font-size: 1.2rem;\n border: none;\n color: white;\n cursor: pointer;\n outline: none;\n overflow: hidden; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking span {\n position: relative; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking::before {\n --size: 0;\n content: '';\n position: absolute;\n left: var(--x);\n top: var(--y);\n width: var(--size);\n height: var(--size);\n background: radial-gradient(circle closest-side, pink, transparent);\n transform: translate(-50%, -50%);\n transition: width 0.2s ease, height 0.2s ease; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking:hover::before {\n --size: 200px; }\n" "scopedCss": "[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking {\n position: relative;\n background: #7983ff;\n padding: 0.5rem 1rem;\n font-size: 1.2rem;\n border: none;\n color: white;\n cursor: pointer;\n outline: none;\n overflow: hidden; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking span {\n position: relative; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking::before {\n --size: 0;\n content: '';\n position: absolute;\n left: var(--x);\n top: var(--y);\n width: var(--size);\n height: var(--size);\n background: radial-gradient(circle closest-side, pink, transparent);\n transform: translate(-50%, -50%);\n transition: width 0.2s ease, height 0.2s ease; }\n\n[data-scope=\"mouse-cursor-gradient-tracking\"] .mouse-cursor-gradient-tracking:hover::before {\n --size: 200px; }\n"
}, },
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "707e50fd348545fc1f9950ef9cda9e74b28ffe57098cc2849c72358c4bf7bea6" "hash": "e4bc55e29230bb5888832fb886187080da35bafb48d150c0ce82c9d846d700ba"
} }
}, },
{ {
@ -854,18 +823,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<ul class=\"css-not-selector-shortcut\">\r\n <li>One</li>\r\n <li>Two</li>\r\n <li>Three</li>\r\n <li>Four</li>\r\n</ul>", "html": "<ul class=\"css-not-selector-shortcut\">\n <li>One</li>\n <li>Two</li>\n <li>Three</li>\n <li>Four</li>\n</ul>",
"css": ".css-not-selector-shortcut {\r\n display: flex;\r\n}\r\n\r\nul {\r\n padding-left: 0;\r\n}\r\n\r\nli {\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0 0.75rem;\r\n}\r\n\r\nli:not(:last-child) {\r\n border-right: 2px solid #d2d5e4;\r\n}", "css": ".css-not-selector-shortcut {\n display: flex;\n}\n\nul {\n padding-left: 0;\n}\n\nli {\n list-style-type: none;\n margin: 0;\n padding: 0 0.75rem;\n}\n\nli:not(:last-child) {\n border-right: 2px solid #d2d5e4;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"not-selector\"] .css-not-selector-shortcut {\n display: flex; }\n\n[data-scope=\"not-selector\"] ul {\n padding-left: 0; }\n\n[data-scope=\"not-selector\"] li {\n list-style-type: none;\n margin: 0;\n padding: 0 0.75rem; }\n\n[data-scope=\"not-selector\"] li:not(:last-child) {\n border-right: 2px solid #d2d5e4; }\n" "scopedCss": "[data-scope=\"not-selector\"] .css-not-selector-shortcut {\n display: flex; }\n\n[data-scope=\"not-selector\"] ul {\n padding-left: 0; }\n\n[data-scope=\"not-selector\"] li {\n list-style-type: none;\n margin: 0;\n padding: 0 0.75rem; }\n\n[data-scope=\"not-selector\"] li:not(:last-child) {\n border-right: 2px solid #d2d5e4; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0a634e271a55ca9480038feab950d33671b0fc07c09615cd39603279bd2cb0d0" "hash": "129748a7f6e0ee74a87e4ff4c62df53c40359c57047586c887fad9fc76872c04"
} }
}, },
{ {
@ -881,19 +849,18 @@
"supportPercentage": null "supportPercentage": null
}, },
"codeBlocks": { "codeBlocks": {
"html": "<a class=\"button\" href=\"http://pantswebsite.com\">\r\n Learn More <span class=\"offscreen\"> about pants</span>\r\n</a>", "html": "<a class=\"button\" href=\"http://pantswebsite.com\">\n Learn More <span class=\"offscreen\"> about pants</span>\n</a>",
"css": ".offscreen {\r\n border: 0;\r\n clip: rect(0 0 0 0);\r\n height: 1px;\r\n margin: -1px;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n width: 1px;\r\n}", "css": ".offscreen {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"offscreen\"] .offscreen {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px; }\n" "scopedCss": "[data-scope=\"offscreen\"] .offscreen {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px; }\n"
}, },
"tags": [ "tags": [
"layout", "layout",
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "000a1fd47f9dafba64a625aefc689e33592adf69c8c5ecffb6de68a83f0218aa" "hash": "233e33b59ef7be00766dd0034ab54c6e788af637d761e71efb5c552153a9d163"
} }
}, },
{ {
@ -909,18 +876,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"overflow-scroll-gradient\">\r\n <div class=\"overflow-scroll-gradient__scroller\">\r\n Lorem ipsum dolor sit amet consectetur adipisicing elit. <br />\r\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\r\n molestias tempora velit natus. Quas, assumenda nisi. <br />\r\n Quisquam enim qui iure, consequatur velit sit? <br />\r\n Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\r\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\r\n molestias tempora velit natus. Quas, assumenda nisi. <br />\r\n Quisquam enim qui iure, consequatur velit sit?\r\n </div>\r\n</div>", "html": "<div class=\"overflow-scroll-gradient\">\n <div class=\"overflow-scroll-gradient__scroller\">\n Lorem ipsum dolor sit amet consectetur adipisicing elit. <br />\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\n molestias tempora velit natus. Quas, assumenda nisi. <br />\n Quisquam enim qui iure, consequatur velit sit? <br />\n Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\n Iure id exercitationem nulla qui repellat laborum vitae, <br />\n molestias tempora velit natus. Quas, assumenda nisi. <br />\n Quisquam enim qui iure, consequatur velit sit?\n </div>\n</div>",
"css": ".overflow-scroll-gradient {\r\n position: relative;\r\n}\r\n.overflow-scroll-gradient::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n width: 240px;\r\n height: 25px;\r\n background: linear-gradient(\r\n rgba(255, 255, 255, 0.001),\r\n white\r\n ); /* transparent keyword is broken in Safari */\r\n pointer-events: none;\r\n}\r\n.overflow-scroll-gradient__scroller {\r\n overflow-y: scroll;\r\n background: white;\r\n width: 240px;\r\n height: 200px;\r\n padding: 15px;\r\n line-height: 1.2;\r\n}", "css": ".overflow-scroll-gradient {\n position: relative;\n}\n.overflow-scroll-gradient::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 240px;\n height: 25px;\n background: linear-gradient(\n rgba(255, 255, 255, 0.001),\n white\n ); /* transparent keyword is broken in Safari */\n pointer-events: none;\n}\n.overflow-scroll-gradient__scroller {\n overflow-y: scroll;\n background: white;\n width: 240px;\n height: 200px;\n padding: 15px;\n line-height: 1.2;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient {\n position: relative; }\n\n[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 240px;\n height: 25px;\n background: linear-gradient(rgba(255, 255, 255, 0.001), white);\n /* transparent keyword is broken in Safari */\n pointer-events: none; }\n\n[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient__scroller {\n overflow-y: scroll;\n background: white;\n width: 240px;\n height: 200px;\n padding: 15px;\n line-height: 1.2; }\n" "scopedCss": "[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient {\n position: relative; }\n\n[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 240px;\n height: 25px;\n background: linear-gradient(rgba(255, 255, 255, 0.001), white);\n /* transparent keyword is broken in Safari */\n pointer-events: none; }\n\n[data-scope=\"overflow-scroll-gradient\"] .overflow-scroll-gradient__scroller {\n overflow-y: scroll;\n background: white;\n width: 240px;\n height: 200px;\n padding: 15px;\n line-height: 1.2; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "2726e4a58683d1e52e8797d60210b4c528dd9000e88953b13523ee3c57fd0084" "hash": "938536c0407ce1d5edcf443ec9a51bdb22815662175ffdd372f5a7bc1446c865"
} }
}, },
{ {
@ -937,17 +903,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"reference\" tabindex=\"0\"><div class=\"popout-menu\">Popout menu</div></div>", "html": "<div class=\"reference\" tabindex=\"0\"><div class=\"popout-menu\">Popout menu</div></div>",
"css": ".reference {\r\n position: relative;\r\n background: tomato;\r\n width: 100px;\r\n height: 100px;\r\n}\r\n.popout-menu {\r\n position: absolute;\r\n visibility: hidden;\r\n left: 100%;\r\n background: #333;\r\n color: white;\r\n padding: 15px;\r\n}\r\n.reference:hover > .popout-menu,\r\n.reference:focus > .popout-menu,\r\n.reference:focus-within > .popout-menu {\r\n visibility: visible;\r\n}", "css": ".reference {\n position: relative;\n background: tomato;\n width: 100px;\n height: 100px;\n}\n.popout-menu {\n position: absolute;\n visibility: hidden;\n left: 100%;\n background: #333;\n color: white;\n padding: 15px;\n}\n.reference:hover > .popout-menu,\n.reference:focus > .popout-menu,\n.reference:focus-within > .popout-menu {\n visibility: visible;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"popout-menu\"] .reference {\n position: relative;\n background: tomato;\n width: 100px;\n height: 100px; }\n\n[data-scope=\"popout-menu\"] .popout-menu {\n position: absolute;\n visibility: hidden;\n left: 100%;\n background: #333;\n color: white;\n padding: 15px; }\n\n[data-scope=\"popout-menu\"] .reference:hover > .popout-menu,\n[data-scope=\"popout-menu\"] .reference:focus > .popout-menu,\n[data-scope=\"popout-menu\"] .reference:focus-within > .popout-menu {\n visibility: visible; }\n" "scopedCss": "[data-scope=\"popout-menu\"] .reference {\n position: relative;\n background: tomato;\n width: 100px;\n height: 100px; }\n\n[data-scope=\"popout-menu\"] .popout-menu {\n position: absolute;\n visibility: hidden;\n left: 100%;\n background: #333;\n color: white;\n padding: 15px; }\n\n[data-scope=\"popout-menu\"] .reference:hover > .popout-menu,\n[data-scope=\"popout-menu\"] .reference:focus > .popout-menu,\n[data-scope=\"popout-menu\"] .reference:focus-within > .popout-menu {\n visibility: visible; }\n"
}, },
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8f5c19fb14ee8039e93ff0f3185cb0d27971dd2509f6100fdfd290478211a42b" "hash": "c4ac484b5e94d0c326d1ac122ba9d9f98b71cd3ab3cce1cd3077fbd6e1afe4ee"
} }
}, },
{ {
@ -964,17 +929,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"pretty-text-underline\">Pretty text underline without clipping descending letters.</p>", "html": "<p class=\"pretty-text-underline\">Pretty text underline without clipping descending letters.</p>",
"css": ".pretty-text-underline {\r\n display: inline;\r\n text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;\r\n background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);\r\n background-position: bottom;\r\n background-repeat: no-repeat;\r\n background-size: 100% 1px;\r\n}\r\n.pretty-text-underline::-moz-selection {\r\n background-color: rgba(0, 150, 255, 0.3);\r\n text-shadow: none;\r\n}\r\n.pretty-text-underline::selection {\r\n background-color: rgba(0, 150, 255, 0.3);\r\n text-shadow: none;\r\n}", "css": ".pretty-text-underline {\n display: inline;\n text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;\n background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);\n background-position: bottom;\n background-repeat: no-repeat;\n background-size: 100% 1px;\n}\n.pretty-text-underline::-moz-selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none;\n}\n.pretty-text-underline::selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"pretty-text-underline\"] .pretty-text-underline {\n display: inline;\n text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;\n background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);\n background-position: bottom;\n background-repeat: no-repeat;\n background-size: 100% 1px; }\n\n[data-scope=\"pretty-text-underline\"] .pretty-text-underline::-moz-selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none; }\n\n[data-scope=\"pretty-text-underline\"] .pretty-text-underline::selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none; }\n" "scopedCss": "[data-scope=\"pretty-text-underline\"] .pretty-text-underline {\n display: inline;\n text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;\n background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);\n background-position: bottom;\n background-repeat: no-repeat;\n background-size: 100% 1px; }\n\n[data-scope=\"pretty-text-underline\"] .pretty-text-underline::-moz-selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none; }\n\n[data-scope=\"pretty-text-underline\"] .pretty-text-underline::selection {\n background-color: rgba(0, 150, 255, 0.3);\n text-shadow: none; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e9372af4e851200e9994e6f753502789693fd4d0d6438bf5b89db9d33a25cb18" "hash": "f91299fbd8d5233de42e09ef7c381a1cce23a83288f9e619f153af22a1275fd2"
} }
}, },
{ {
@ -990,18 +954,17 @@
"supportPercentage": 95.76 "supportPercentage": 95.76
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"reset-all-styles\">\r\n <h5>Title</h5>\r\n <p>\r\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure id exercitationem nulla qui\r\n repellat laborum vitae, molestias tempora velit natus. Quas, assumenda nisi. Quisquam enim qui\r\n iure, consequatur velit sit?\r\n </p>\r\n</div>", "html": "<div class=\"reset-all-styles\">\n <h5>Title</h5>\n <p>\n Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure id exercitationem nulla qui\n repellat laborum vitae, molestias tempora velit natus. Quas, assumenda nisi. Quisquam enim qui\n iure, consequatur velit sit?\n </p>\n</div>",
"css": ".reset-all-styles {\r\n all: initial;\r\n}", "css": ".reset-all-styles {\n all: initial;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"reset-all-styles\"] .reset-all-styles {\n all: initial; }\n" "scopedCss": "[data-scope=\"reset-all-styles\"] .reset-all-styles {\n all: initial; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "46ba1a8080054a9a5e541a3c5ae2ecdfb6edd124fbfb33de78b9ccd160509b93" "hash": "1e52c4cc2c03669576b53d4be44357e6fea843cffd671419c881b31c927c9170"
} }
}, },
{ {
@ -1018,17 +981,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"shape-separator\"></div>", "html": "<div class=\"shape-separator\"></div>",
"css": ".shape-separator {\r\n position: relative;\r\n height: 48px;\r\n background: #333;\r\n}\r\n.shape-separator::after {\r\n content: '';\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E\");\r\n position: absolute;\r\n width: 100%;\r\n height: 12px;\r\n bottom: 0;\r\n}", "css": ".shape-separator {\n position: relative;\n height: 48px;\n background: #333;\n}\n.shape-separator::after {\n content: '';\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E\");\n position: absolute;\n width: 100%;\n height: 12px;\n bottom: 0;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"shape-separator\"] .shape-separator {\n position: relative;\n height: 48px;\n background: #333; }\n\n[data-scope=\"shape-separator\"] .shape-separator::after {\n content: '';\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E\");\n position: absolute;\n width: 100%;\n height: 12px;\n bottom: 0; }\n" "scopedCss": "[data-scope=\"shape-separator\"] .shape-separator {\n position: relative;\n height: 48px;\n background: #333; }\n\n[data-scope=\"shape-separator\"] .shape-separator::after {\n content: '';\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E\");\n position: absolute;\n width: 100%;\n height: 12px;\n bottom: 0; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "1ce90fc518399c775df1af832345729bdde2a3c12bbdd2fd66c40b9c57a65aa1" "hash": "75e712c07e184d8dbf34818ba245f5b1a4273dfb491a21262b88042ef9e42d6c"
} }
}, },
{ {
@ -1044,18 +1006,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"sibling-fade\">\r\n <span>Item 1</span> <span>Item 2</span> <span>Item 3</span> <span>Item 4</span>\r\n <span>Item 5</span> <span>Item 6</span>\r\n</div>", "html": "<div class=\"sibling-fade\">\n <span>Item 1</span> <span>Item 2</span> <span>Item 3</span> <span>Item 4</span>\n <span>Item 5</span> <span>Item 6</span>\n</div>",
"css": "span {\r\n padding: 0 1rem;\r\n transition: opacity 0.2s;\r\n}\r\n\r\n.sibling-fade:hover span:not(:hover) {\r\n opacity: 0.5;\r\n}", "css": "span {\n padding: 0 1rem;\n transition: opacity 0.2s;\n}\n\n.sibling-fade:hover span:not(:hover) {\n opacity: 0.5;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"sibling-fade\"] span {\n padding: 0 1rem;\n transition: opacity 0.2s; }\n\n[data-scope=\"sibling-fade\"] .sibling-fade:hover span:not(:hover) {\n opacity: 0.5; }\n" "scopedCss": "[data-scope=\"sibling-fade\"] span {\n padding: 0 1rem;\n transition: opacity 0.2s; }\n\n[data-scope=\"sibling-fade\"] .sibling-fade:hover span:not(:hover) {\n opacity: 0.5; }\n"
}, },
"tags": [ "tags": [
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "8bb55371c003c5304cc1689ea4f1e364fa59a58c6edbc46f63c325cfb2b1f820" "hash": "c4b3ad85a5137635283abe843a9f180027bd751c40be9ca465b0b3e3f52b9fe9"
} }
}, },
{ {
@ -1072,17 +1033,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"system-font-stack\">This text uses the system font.</p>", "html": "<p class=\"system-font-stack\">This text uses the system font.</p>",
"css": ".system-font-stack {\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu,\r\n Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif;\r\n}", "css": ".system-font-stack {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu,\n Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"system-font-stack\"] .system-font-stack {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu,\r Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif; }\n" "scopedCss": "[data-scope=\"system-font-stack\"] .system-font-stack {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "d32aacb7116aa37895cb5f4f8da6276efa1ce4636b5c892059ff77ccb6218b87" "hash": "23cfcc3319fd473b39269b2745abb7f52752a970307fc561159275208d04a554"
} }
}, },
{ {
@ -1099,18 +1059,17 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<input type=\"checkbox\" id=\"toggle\" class=\"offscreen\" /> <label for=\"toggle\" class=\"switch\"></label>", "html": "<input type=\"checkbox\" id=\"toggle\" class=\"offscreen\" /> <label for=\"toggle\" class=\"switch\"></label>",
"css": ".switch {\r\n position: relative;\r\n display: inline-block;\r\n width: 40px;\r\n height: 20px;\r\n background-color: rgba(0, 0, 0, 0.25);\r\n border-radius: 20px;\r\n transition: all 0.3s;\r\n}\r\n\r\n.switch::after {\r\n content: '';\r\n position: absolute;\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 18px;\r\n background-color: white;\r\n top: 1px;\r\n left: 1px;\r\n transition: all 0.3s;\r\n}\r\n\r\ninput[type='checkbox']:checked + .switch::after {\r\n transform: translateX(20px);\r\n}\r\n\r\ninput[type='checkbox']:checked + .switch {\r\n background-color: #7983ff;\r\n}\r\n\r\n.offscreen {\r\n position: absolute;\r\n left: -9999px;\r\n}", "css": ".switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 20px;\n transition: all 0.3s;\n}\n\n.switch::after {\n content: '';\n position: absolute;\n width: 18px;\n height: 18px;\n border-radius: 18px;\n background-color: white;\n top: 1px;\n left: 1px;\n transition: all 0.3s;\n}\n\ninput[type='checkbox']:checked + .switch::after {\n transform: translateX(20px);\n}\n\ninput[type='checkbox']:checked + .switch {\n background-color: #7983ff;\n}\n\n.offscreen {\n position: absolute;\n left: -9999px;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"toggle-switch\"] .switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 20px;\n transition: all 0.3s; }\n\n[data-scope=\"toggle-switch\"] .switch::after {\n content: '';\n position: absolute;\n width: 18px;\n height: 18px;\n border-radius: 18px;\n background-color: white;\n top: 1px;\n left: 1px;\n transition: all 0.3s; }\n\n[data-scope=\"toggle-switch\"] input[type='checkbox']:checked + .switch::after {\n transform: translateX(20px); }\n\n[data-scope=\"toggle-switch\"] input[type='checkbox']:checked + .switch {\n background-color: #7983ff; }\n\n[data-scope=\"toggle-switch\"] .offscreen {\n position: absolute;\n left: -9999px; }\n" "scopedCss": "[data-scope=\"toggle-switch\"] .switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 20px;\n transition: all 0.3s; }\n\n[data-scope=\"toggle-switch\"] .switch::after {\n content: '';\n position: absolute;\n width: 18px;\n height: 18px;\n border-radius: 18px;\n background-color: white;\n top: 1px;\n left: 1px;\n transition: all 0.3s; }\n\n[data-scope=\"toggle-switch\"] input[type='checkbox']:checked + .switch::after {\n transform: translateX(20px); }\n\n[data-scope=\"toggle-switch\"] input[type='checkbox']:checked + .switch {\n background-color: #7983ff; }\n\n[data-scope=\"toggle-switch\"] .offscreen {\n position: absolute;\n left: -9999px; }\n"
}, },
"tags": [ "tags": [
"visual", "visual",
"interactivity", "interactivity"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "0f67d565434719c7ee63647c5c342a0df9b5835de1850059f4a8ed2f6c19fb4c" "hash": "e29182514bd83550705267a43d21eec8886ed011c6259f2b3efec9862541f90e"
} }
}, },
{ {
@ -1127,17 +1086,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"parent\"><div class=\"child\">Centered content</div></div>", "html": "<div class=\"parent\"><div class=\"child\">Centered content</div></div>",
"css": ".parent {\r\n border: 1px solid #333;\r\n height: 250px;\r\n position: relative;\r\n width: 250px;\r\n}\r\n\r\n.child {\r\n left: 50%;\r\n position: absolute;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n text-align: center;\r\n}", "css": ".parent {\n border: 1px solid #333;\n height: 250px;\n position: relative;\n width: 250px;\n}\n\n.child {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"transform-centering\"] .parent {\n border: 1px solid #333;\n height: 250px;\n position: relative;\n width: 250px; }\n\n[data-scope=\"transform-centering\"] .child {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center; }\n" "scopedCss": "[data-scope=\"transform-centering\"] .parent {\n border: 1px solid #333;\n height: 250px;\n position: relative;\n width: 250px; }\n\n[data-scope=\"transform-centering\"] .child {\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "5775ecfc218a8c8c1e31bebba5c53f35af9f9a84d48c626d3ee1df5b9858dfec" "hash": "377d480a141a8890f793ef28212d7ed9d60c9d6831286bcea703ab43daca73ce"
} }
}, },
{ {
@ -1154,17 +1112,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<div class=\"triangle\"></div>", "html": "<div class=\"triangle\"></div>",
"css": ".triangle {\r\n width: 0;\r\n height: 0;\r\n border-top: 20px solid #333;\r\n border-left: 20px solid transparent;\r\n border-right: 20px solid transparent;\r\n}", "css": ".triangle {\n width: 0;\n height: 0;\n border-top: 20px solid #333;\n border-left: 20px solid transparent;\n border-right: 20px solid transparent;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"triangle\"] .triangle {\n width: 0;\n height: 0;\n border-top: 20px solid #333;\n border-left: 20px solid transparent;\n border-right: 20px solid transparent; }\n" "scopedCss": "[data-scope=\"triangle\"] .triangle {\n width: 0;\n height: 0;\n border-top: 20px solid #333;\n border-left: 20px solid transparent;\n border-right: 20px solid transparent; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "93ce75702b921beed512604212061414bbd46c3012cfb5250b19d2a9303cf075" "hash": "08382966ae74825502676c0bcdb77426abbf6202d813f5dfd6679d864fc1292e"
} }
}, },
{ {
@ -1180,18 +1137,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"truncate-text-multiline\">\r\n Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut\r\n labore et.\r\n</p>", "html": "<p class=\"truncate-text-multiline\">\n Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut\n labore et.\n</p>",
"css": ".truncate-text-multiline {\r\n overflow: hidden;\r\n display: block;\r\n height: 109.2px;\r\n margin: 0 auto;\r\n font-size: 26px;\r\n line-height: 1.4;\r\n width: 400px;\r\n position: relative;\r\n}\r\n\r\n.truncate-text-multiline:after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n right: 0;\r\n width: 150px;\r\n height: 36.4px;\r\n background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%);\r\n}", "css": ".truncate-text-multiline {\n overflow: hidden;\n display: block;\n height: 109.2px;\n margin: 0 auto;\n font-size: 26px;\n line-height: 1.4;\n width: 400px;\n position: relative;\n}\n\n.truncate-text-multiline:after {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 150px;\n height: 36.4px;\n background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%);\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"truncate-text-multiline\"] .truncate-text-multiline {\n overflow: hidden;\n display: block;\n height: 109.2px;\n margin: 0 auto;\n font-size: 26px;\n line-height: 1.4;\n width: 400px;\n position: relative; }\n\n[data-scope=\"truncate-text-multiline\"] .truncate-text-multiline:after {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 150px;\n height: 36.4px;\n background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%); }\n" "scopedCss": "[data-scope=\"truncate-text-multiline\"] .truncate-text-multiline {\n overflow: hidden;\n display: block;\n height: 109.2px;\n margin: 0 auto;\n font-size: 26px;\n line-height: 1.4;\n width: 400px;\n position: relative; }\n\n[data-scope=\"truncate-text-multiline\"] .truncate-text-multiline:after {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 150px;\n height: 36.4px;\n background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%); }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "e327691cb68125b87ef38e5b0b997de119a798a9212647bef285caf0d07dc389" "hash": "ab94193bfb305844badfe15bda3594e75c40ac9660c11c06efd750119a916f8e"
} }
}, },
{ {
@ -1208,17 +1164,16 @@
}, },
"codeBlocks": { "codeBlocks": {
"html": "<p class=\"truncate-text\">If I exceed one line's width, I will be truncated.</p>", "html": "<p class=\"truncate-text\">If I exceed one line's width, I will be truncated.</p>",
"css": ".truncate-text {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n width: 200px;\r\n}", "css": ".truncate-text {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: 200px;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"truncate-text\"] .truncate-text {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: 200px; }\n" "scopedCss": "[data-scope=\"truncate-text\"] .truncate-text {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: 200px; }\n"
}, },
"tags": [ "tags": [
"layout", "layout"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7835da22bad23fadb280dbe0c7d4431407524c89486ad3555e134dcbfd819272" "hash": "0fbe2c0df9663735aed522286556ac0383756ab0a1a5f673bb81dcb42f89d4d1"
} }
}, },
{ {
@ -1234,18 +1189,17 @@
"supportPercentage": 100 "supportPercentage": 100
}, },
"codeBlocks": { "codeBlocks": {
"html": "<ul>\r\n <li>Item 01</li>\r\n <li>Item 02</li>\r\n <li>Item 03</li>\r\n <li>Item 04</li>\r\n <li>Item 05</li>\r\n</ul>", "html": "<ul>\n <li>Item 01</li>\n <li>Item 02</li>\n <li>Item 03</li>\n <li>Item 04</li>\n <li>Item 05</li>\n</ul>",
"css": "li:nth-child(odd) {\r\n background-color: #ddd;\r\n}", "css": "li:nth-child(odd) {\n background-color: #ddd;\n}",
"js": "", "js": "",
"scopedCss": "[data-scope=\"zebra-striped-list\"] li:nth-child(odd) {\n background-color: #ddd; }\n" "scopedCss": "[data-scope=\"zebra-striped-list\"] li:nth-child(odd) {\n background-color: #ddd; }\n"
}, },
"tags": [ "tags": [
"visual", "visual"
"intermediate"
] ]
}, },
"meta": { "meta": {
"hash": "7562a49fa58e85a92eac0e931d746975ccc86f7ea249517b8e2809b6681a4a76" "hash": "43bc0cd7776468f3b74791017349ef278921c8ded7ba0bd7788d2b01bdb68c7a"
} }
} }
], ],

View File

@ -1,6 +1,6 @@
--- ---
title: Bouncing loader title: Bouncing loader
tags: animation,intermediate tags: animation
--- ---
Creates a bouncing loader animation. Creates a bouncing loader animation.

View File

@ -1,6 +1,6 @@
--- ---
title: Box-sizing reset title: Box-sizing reset
tags: layout,intermediate tags: layout
--- ---
Resets the box-model so that `width`s and `height`s are not affected by their `border`s or `padding`. Resets the box-model so that `width`s and `height`s are not affected by their `border`s or `padding`.

View File

@ -1,6 +1,6 @@
--- ---
title: Button border animation title: Button border animation
tags: animation,intermediate tags: animation
--- ---
Creates a border animation on hover. Creates a border animation on hover.

View File

@ -1,6 +1,6 @@
--- ---
title: Calc() title: Calc()
tags: other,intermediate tags: other
--- ---
The function calc() allows to define CSS values with the use of mathematical expressions, the value adopted for the property is the result of a mathematical expression. The function calc() allows to define CSS values with the use of mathematical expressions, the value adopted for the property is the result of a mathematical expression.

View File

@ -1,6 +1,6 @@
--- ---
title: Circle title: Circle
tags: visual,intermediate tags: visual
--- ---
Creates a circle shape with pure CSS. Creates a circle shape with pure CSS.

View File

@ -1,6 +1,6 @@
--- ---
title: Clearfix title: Clearfix
tags: layout,intermediate tags: layout
--- ---
Ensures that an element self-clears its children. Ensures that an element self-clears its children.

View File

@ -1,6 +1,6 @@
--- ---
title: Constant width to height ratio title: Constant width to height ratio
tags: layout,intermediate tags: layout
--- ---
Given an element of variable width, it will ensure its height remains proportionate in a responsive fashion Given an element of variable width, it will ensure its height remains proportionate in a responsive fashion

View File

@ -1,6 +1,6 @@
--- ---
title: Counter title: Counter
tags: visual, other,intermediate tags: visual, other
--- ---
Counters are, in essence, variables maintained by CSS whose values may be incremented by CSS rules to track how many times they're used. Counters are, in essence, variables maintained by CSS whose values may be incremented by CSS rules to track how many times they're used.

View File

@ -1,6 +1,6 @@
--- ---
title: Custom scrollbar title: Custom scrollbar
tags: visual,intermediate tags: visual
--- ---
Customizes the scrollbar style for the document and elements with scrollable overflow, on WebKit platforms. Customizes the scrollbar style for the document and elements with scrollable overflow, on WebKit platforms.

View File

@ -1,6 +1,6 @@
--- ---
title: Custom text selection title: Custom text selection
tags: visual,intermediate tags: visual
--- ---
Changes the styling of text selection. Changes the styling of text selection.

View File

@ -1,6 +1,6 @@
--- ---
title: Custom variables title: Custom variables
tags: other,intermediate tags: other
--- ---
CSS variables that contain specific values to be reused throughout a document. CSS variables that contain specific values to be reused throughout a document.

View File

@ -1,6 +1,6 @@
--- ---
title: Disable selection title: Disable selection
tags: interactivity,intermediate tags: interactivity
--- ---
Makes the content unselectable. Makes the content unselectable.

View File

@ -1,6 +1,6 @@
--- ---
title: Display table centering title: Display table centering
tags: layout,intermediate tags: layout
--- ---
Vertically and horizontally centers a child element within its parent element using `display: table` (as an alternative to `flexbox`). Vertically and horizontally centers a child element within its parent element using `display: table` (as an alternative to `flexbox`).

View File

@ -1,6 +1,6 @@
--- ---
title: Donut spinner title: Donut spinner
tags: animation,intermediate tags: animation
--- ---
Creates a donut spinner that can be used to indicate the loading of content. Creates a donut spinner that can be used to indicate the loading of content.

View File

@ -1,6 +1,6 @@
--- ---
title: Dynamic shadow title: Dynamic shadow
tags: visual,intermediate tags: visual
--- ---
Creates a shadow similar to `box-shadow` but based on the colors of the element itself. Creates a shadow similar to `box-shadow` but based on the colors of the element itself.

View File

@ -1,6 +1,6 @@
--- ---
title: Easing variables title: Easing variables
tags: animation,intermediate tags: animation
--- ---
Variables that can be reused for `transition-timing-function` properties, more Variables that can be reused for `transition-timing-function` properties, more

View File

@ -1,6 +1,6 @@
--- ---
title: Etched text title: Etched text
tags: visual,intermediate tags: visual
--- ---
Creates an effect where text appears to be "etched" or engraved into the background. Creates an effect where text appears to be "etched" or engraved into the background.

View File

@ -1,6 +1,6 @@
--- ---
title: Evenly distributed children title: Evenly distributed children
tags: layout,intermediate tags: layout
--- ---
Evenly distributes child elements within a parent element. Evenly distributes child elements within a parent element.

View File

@ -1,6 +1,6 @@
--- ---
title: Fit image in container title: Fit image in container
tags: layout, visual,intermediate tags: layout, visual
--- ---
Changes the fit and position of an image within its container while preserving its aspect ratio. Previously only possible using a background image and the `background-size` property. Changes the fit and position of an image within its container while preserving its aspect ratio. Previously only possible using a background image and the `background-size` property.

View File

@ -1,6 +1,6 @@
--- ---
title: Flexbox centering title: Flexbox centering
tags: layout,intermediate tags: layout
--- ---
Horizontally and vertically centers a child element within a parent element using `flexbox`. Horizontally and vertically centers a child element within a parent element using `flexbox`.

View File

@ -1,6 +1,6 @@
--- ---
title: Focus Within title: Focus Within
tags: visual, interactivity,intermediate tags: visual, interactivity
--- ---
Changes the appearance of a form if any of its children are focused. Changes the appearance of a form if any of its children are focused.

View File

@ -1,6 +1,6 @@
--- ---
title: Fullscreen title: Fullscreen
tags: visual,intermediate tags: visual
--- ---
The :fullscreen CSS pseudo-class represents an element that's displayed when the browser is in fullscreen mode. The :fullscreen CSS pseudo-class represents an element that's displayed when the browser is in fullscreen mode.

View File

@ -1,6 +1,6 @@
--- ---
title: Ghost trick title: Ghost trick
tags: layout,intermediate tags: layout
--- ---
Vertically centers an element in another. Vertically centers an element in another.

View File

@ -1,6 +1,6 @@
--- ---
title: Gradient text title: Gradient text
tags: visual,intermediate tags: visual
--- ---
Gives text a gradient color. Gives text a gradient color.

View File

@ -1,6 +1,6 @@
--- ---
title: Grid centering title: Grid centering
tags: layout,intermediate tags: layout
--- ---
Horizontally and vertically centers a child element within a parent element using `grid`. Horizontally and vertically centers a child element within a parent element using `grid`.

View File

@ -1,6 +1,6 @@
--- ---
title: Hairline border title: Hairline border
tags: visual,intermediate tags: visual
--- ---
Gives an element a border equal to 1 native device pixel in width, which can look Gives an element a border equal to 1 native device pixel in width, which can look

View File

@ -1,6 +1,6 @@
--- ---
title: Height transition title: Height transition
tags: animation,intermediate tags: animation
--- ---
Transitions an element's height from `0` to `auto` when its height is unknown. Transitions an element's height from `0` to `auto` when its height is unknown.

View File

@ -1,6 +1,6 @@
--- ---
title: Hover shadow box animation title: Hover shadow box animation
tags: animation,intermediate tags: animation
--- ---
Creates a shadow box around the text when it is hovered. Creates a shadow box around the text when it is hovered.

View File

@ -1,6 +1,6 @@
--- ---
title: Hover underline animation title: Hover underline animation
tags: animation,intermediate tags: animation
--- ---
Creates an animated underline effect when the text is hovered over. Creates an animated underline effect when the text is hovered over.

View File

@ -1,6 +1,6 @@
--- ---
title: Last item with remaining available height title: Last item with remaining available height
tags: layout,intermediate tags: layout
--- ---
Take advantage of available viewport space by giving the last element the remaining available space in current viewport, even when resizing the window. Take advantage of available viewport space by giving the last element the remaining available space in current viewport, even when resizing the window.

View File

@ -1,6 +1,6 @@
--- ---
title: Mouse cursor gradient tracking title: Mouse cursor gradient tracking
tags: visual, interactivity,intermediate tags: visual, interactivity
--- ---
A hover effect where the gradient follows the mouse cursor. A hover effect where the gradient follows the mouse cursor.

View File

@ -1,6 +1,6 @@
--- ---
title: :not selector title: :not selector
tags: visual,intermediate tags: visual
--- ---
The `:not` psuedo selector is useful for styling a group of elements, while leaving the last (or specified) element unstyled. The `:not` psuedo selector is useful for styling a group of elements, while leaving the last (or specified) element unstyled.

View File

@ -1,6 +1,6 @@
--- ---
title: Offscreen title: Offscreen
tags: layout, visual,intermediate tags: layout, visual
--- ---
A bulletproof way to completely hide an element visually and positionally in the DOM while still allowing it to be accessed by JavaScript and readable by screen readers. This method is very useful for accessibility ([ADA](https://adata.org/learn-about-ada)) development when more context is needed for visually-impaired users. As an alternative to `display: none` which is not readable by screen readers or `visibility: hidden` which takes up physical space in the DOM. A bulletproof way to completely hide an element visually and positionally in the DOM while still allowing it to be accessed by JavaScript and readable by screen readers. This method is very useful for accessibility ([ADA](https://adata.org/learn-about-ada)) development when more context is needed for visually-impaired users. As an alternative to `display: none` which is not readable by screen readers or `visibility: hidden` which takes up physical space in the DOM.

View File

@ -1,6 +1,6 @@
--- ---
title: Overflow scroll gradient title: Overflow scroll gradient
tags: visual,intermediate tags: visual
--- ---
Adds a fading gradient to an overflowing element to better indicate there is more content to be scrolled. Adds a fading gradient to an overflowing element to better indicate there is more content to be scrolled.

View File

@ -1,6 +1,6 @@
--- ---
title: Popout menu title: Popout menu
tags: interactivity,intermediate tags: interactivity
--- ---
Reveals an interactive popout menu on hover and focus. Reveals an interactive popout menu on hover and focus.

View File

@ -1,6 +1,6 @@
--- ---
title: Pretty text underline title: Pretty text underline
tags: visual,intermediate tags: visual
--- ---
A nicer alternative to `text-decoration: underline` or `<u></u>` where descenders do not clip the underline. A nicer alternative to `text-decoration: underline` or `<u></u>` where descenders do not clip the underline.

View File

@ -1,6 +1,6 @@
--- ---
title: Reset all styles title: Reset all styles
tags: visual,intermediate tags: visual
--- ---
Resets all styles to default values with one property. This will not affect `direction` and `unicode-bidi` properties. Resets all styles to default values with one property. This will not affect `direction` and `unicode-bidi` properties.

View File

@ -1,6 +1,6 @@
--- ---
title: Shape separator title: Shape separator
tags: visual,intermediate tags: visual
--- ---
Uses an SVG shape to separate two different blocks to create more a interesting visual appearance compared to standard horizontal separation. Uses an SVG shape to separate two different blocks to create more a interesting visual appearance compared to standard horizontal separation.

View File

@ -1,6 +1,6 @@
--- ---
title: Sibling fade title: Sibling fade
tags: interactivity,intermediate tags: interactivity
--- ---
Fades out the siblings of a hovered item. Fades out the siblings of a hovered item.

View File

@ -1,6 +1,6 @@
--- ---
title: System font stack title: System font stack
tags: visual,intermediate tags: visual
--- ---
Uses the native font of the operating system to get close to a native app feel. Uses the native font of the operating system to get close to a native app feel.

View File

@ -1,6 +1,6 @@
--- ---
title: Toggle switch title: Toggle switch
tags: visual, interactivity,intermediate tags: visual, interactivity
--- ---
Creates a toggle switch with CSS only. Creates a toggle switch with CSS only.

View File

@ -1,6 +1,6 @@
--- ---
title: Transform centering title: Transform centering
tags: layout,intermediate tags: layout
--- ---
Vertically and horizontally centers a child element within its parent element using `position: absolute` and `transform: translate()` (as an alternative to `flexbox` or `display: table`). Similar to `flexbox`, this method does not require you to know the height or width of your parent or child so it is ideal for responsive applications. Vertically and horizontally centers a child element within its parent element using `position: absolute` and `transform: translate()` (as an alternative to `flexbox` or `display: table`). Similar to `flexbox`, this method does not require you to know the height or width of your parent or child so it is ideal for responsive applications.

View File

@ -1,6 +1,6 @@
--- ---
title: Triangle title: Triangle
tags: visual,intermediate tags: visual
--- ---
Creates a triangle shape with pure CSS. Creates a triangle shape with pure CSS.

View File

@ -1,6 +1,6 @@
--- ---
title: Truncate text multiline title: Truncate text multiline
tags: layout,intermediate tags: layout
--- ---
If the text is longer than one line, it will be truncated for `n` lines and end with an gradient fade. If the text is longer than one line, it will be truncated for `n` lines and end with an gradient fade.

View File

@ -1,6 +1,6 @@
--- ---
title: Truncate text title: Truncate text
tags: layout,intermediate tags: layout
--- ---
If the text is longer than one line, it will be truncated and end with an ellipsis `…`. If the text is longer than one line, it will be truncated and end with an ellipsis `…`.

View File

@ -1,6 +1,6 @@
--- ---
title: Zebra striped list title: Zebra striped list
tags: visual,intermediate tags: visual
--- ---
Creates a striped list with alternating background colors, which is useful for differentiating siblings that have content spread across a wide row. Creates a striped list with alternating background colors, which is useful for differentiating siblings that have content spread across a wide row.

View File

@ -12,35 +12,18 @@ import ReactCSSTransitionReplace from 'react-css-transition-replace';
// =================================================== // ===================================================
// Snippet Card HOC - check components below for more // Snippet Card HOC - check components below for more
// =================================================== // ===================================================
const SnippetCard = ({ short, snippetData, ...rest }) => { const SnippetCard = ({ short, snippetData, ...rest }) =>
let difficulty = snippetData.tags.includes('advanced') short ? (
? 'advanced' <ShortCard snippetData={snippetData} {...rest} />
: snippetData.tags.includes('beginner')
? 'beginner'
: 'intermediate';
return short ? (
<ShortCard snippetData={snippetData} difficulty={difficulty} {...rest} />
) : ( ) : (
<FullCard snippetData={snippetData} difficulty={difficulty} {...rest} /> <FullCard snippetData={snippetData} {...rest} />
);
};
// ===================================================
// Simple card corner for difficulty display
// ===================================================
const CardCorner = ({ difficulty = 'intermediate' }) => (
<div
className={`card-corner ${difficulty}`}
aria-label={difficulty}
title={difficulty}
/>
); );
// =================================================== // ===================================================
// Full snippet view (tags, code, title, description) // Full snippet view (tags, code, title, description)
// =================================================== // ===================================================
const FullCard = ({ snippetData, difficulty, isDarkMode }) => { const FullCard = ({ snippetData, isDarkMode }) => {
const [examplesOpen, setExamplesOpen] = React.useState(false); console.log(snippetData);
const tags = snippetData.tags; const tags = snippetData.tags;
let cardCodeHtml = `${optimizeAllNodes( let cardCodeHtml = `${optimizeAllNodes(
getCodeBlocks(snippetData.html).html, getCodeBlocks(snippetData.html).html,
@ -53,11 +36,13 @@ const FullCard = ({ snippetData, difficulty, isDarkMode }) => {
)}`; )}`;
return ( return (
<div className='card'> <div className='card'>
<CardCorner difficulty={difficulty} /> <h4 className='card-title'>
<h4 className='card-title'>{snippetData.title}</h4> {snippetData.title}&nbsp;&nbsp;
{tags.map(tag => ( {tags.map(tag => (
<span className='tag' key={`tag_${tag}`}>{tag}</span> <span className={`tag tag-${tag}`} key={`tag_${tag}`}>{tag}</span>
))} ))}
</h4>
<div <div
className='card-description' className='card-description'
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
@ -65,20 +50,32 @@ const FullCard = ({ snippetData, difficulty, isDarkMode }) => {
}} }}
/> />
<div className='card-bottom'> <div className='card-bottom'>
<h5 className='card-section-title card-section-html'>HTML</h5>
<pre <pre
className={`card-code language-${config.secondLanguage}`} className={`card-code language-${config.secondLanguage}`}
dangerouslySetInnerHTML={{ __html: cardCodeHtml }} dangerouslySetInnerHTML={{ __html: cardCodeHtml }}
/> />
<h5 className='card-section-title card-section-css'>CSS</h5>
<pre <pre
className={`card-code language-${config.language}`} className={`card-code language-${config.language}`}
dangerouslySetInnerHTML={{ __html: cardCodeCss }} dangerouslySetInnerHTML={{ __html: cardCodeCss }}
/> />
{ {
cardCodeJs && <pre cardCodeJs && <>
<h5 className='card-section-title card-section-js'>JavaScript</h5>
<pre
className={`card-code language-${config.optionalLanguage}`} className={`card-code language-${config.optionalLanguage}`}
dangerouslySetInnerHTML={{ __html: cardCodeJs }} dangerouslySetInnerHTML={{ __html: cardCodeJs }}
/> />
</>
} }
<h5 className='card-section-demo-title'>Demo</h5>
<div className='card-snippet-demo' data-scope={snippetData.id}>
<style>
{snippetData.code.scopedCss}
</style>
<div dangerouslySetInnerHTML={{__html: snippetData.code.html}} />
</div>
{/* <button {/* <button
className='button button-example-toggler' className='button button-example-toggler'
onClick={() => setExamplesOpen(!examplesOpen)} onClick={() => setExamplesOpen(!examplesOpen)}
@ -108,7 +105,6 @@ const FullCard = ({ snippetData, difficulty, isDarkMode }) => {
const ShortCard = ({ const ShortCard = ({
snippetData, snippetData,
withCode = false, withCode = false,
difficulty,
isDarkMode isDarkMode
}) => { }) => {
let cardCodeHtml; let cardCodeHtml;
@ -118,7 +114,6 @@ const ShortCard = ({
)}`; )}`;
return ( return (
<div className='card short'> <div className='card short'>
<CardCorner difficulty={difficulty} />
<h4 className='card-title'> <h4 className='card-title'>
<AniLink <AniLink
paintDrip paintDrip

View File

@ -11,15 +11,18 @@
border-radius: 0.125rem; border-radius: 0.125rem;
padding: 1rem; padding: 1rem;
.card-title { .card-title {
font-size: 1.125rem; font-size: 1.5rem;
line-height: 1.375; line-height: 1.375;
font-weight: 500; font-weight: 700;
margin: 0px 0px 0.125rem; margin: 0px 0px 1.25rem;
color: var(--card-fore-color-light);
a, a:link, a:visited { a, a:link, a:visited {
font-weight: 500; font-weight: 700;
transition: 0.3s ease all; transition: 0.3s ease all;
color: var(--card-fore-color); color: var(--card-fore-color-light);
} }
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--card-border-color);
} }
.card-description { .card-description {
margin: 0.125rem -0.5rem 0.125rem; margin: 0.125rem -0.5rem 0.125rem;
@ -34,13 +37,14 @@
margin-right: -1rem; margin-right: -1rem;
border-radius: 0.125rem; border-radius: 0.125rem;
border-top-left-radius: 22px; border-top-left-radius: 22px;
width: calc(100% - 2rem);
} }
.card-code { .card-code {
position: relative; position: relative;
margin: 1.5rem 0px -1rem 0px; margin: 0.25rem 0px 0rem 1rem;
background: var(--pre-back-color); background: var(--pre-back-color);
width: calc(100% - 36px); width: 100%;
border-radius: 1.375rem 0px 0.125rem 0.125rem; border-radius: 0.25rem;
line-height: 1.15; line-height: 1.15;
padding: 2.25rem 1.125rem 2.25rem; padding: 2.25rem 1.125rem 2.25rem;
} }
@ -73,77 +77,105 @@
} }
} }
} }
&:not(.short) { }
background: linear-gradient(to bottom, var(--card-back-color) 0px, var(--card-back-color) calc(100% - 17px), var(--pre-back-color) calc(100% - 16px));
// Card sections
.card-section-title {
font-size: 0.875rem;
color: var(--card-back-color);
display: inline-block;
padding: 0 0.5rem;
line-height: 2;
border-radius: 0.125rem;
margin: 1.25rem 1rem 0.125rem 1rem;
font-weight: 700;
&.card-section-html {
background-image: linear-gradient(135deg,#ff4c9f,#ff7b74);
}
&.card-section-css {
background-image: linear-gradient(135deg,#7983ff,#5f9de9);
}
&.card-section-js {
background-image: linear-gradient(135deg,#ffb000,#f58818);
} }
} }
// Card expertise corners .card-section-demo-title {
.card-corner { margin: 0.5rem 1rem .5rem;
box-sizing: border-box; color: var(--card-fore-color-light);
position: absolute; font-size: 1rem;
top: 24px; font-weight: 700;
right: 16px; line-height: 2.25;
width: 0.5rem;
height: 0.5rem;
border-radius: 0.5rem;
background: var(--corner-color);
&.beginner {
--corner-color: var(--beginner-color);
}
&.intermediate {
--corner-color: var(--intermediate-color);
}
&.advanced {
--corner-color: var(--advanced-color);
}
&.intermediate, &.advanced {
&::before {
display: block;
position: absolute;
content: '';
top: 0px;
right: 12px;
width: 0.5rem;
height: 0.5rem;
border-radius: 0.5rem;
background: var(--corner-color);
}
}
&.advanced {
&::after {
display: block;
position: absolute;
content: '';
top: 0px;
right: 24px;
width: 0.5rem;
height: 0.5rem;
border-radius: 0.5rem;
background: var(--corner-color);
}
} }
.card-snippet-demo {
width: calc(100% - 0.25rem);
margin: 0.5rem 1rem .5rem;
background: #f5f6f9;
border-radius: .25rem;
padding: .75rem 1.25rem;
} }
// Tags // Tags
:not(.token).tag { :not(.token).tag {
transition: 0.3s ease all; transition: 0.3s ease all;
border: 2px solid var(--tag-border-color); border: 1px solid var(--tag-border-color);
border-radius: 0.25rem; border-radius: 0.125rem;
color: var(--tag-fore-color); color: var(--tag-fore-color);
text-transform: uppercase; text-transform: uppercase;
margin: 0px 0.375rem 0.25rem 0px; margin: 0px 0.375rem 0.25rem 0px;
display: inline-block; display: inline-block;
padding: 0.125rem 0.25rem; padding: 0.125rem 0.5rem;
letter-spacing: 0.25px; letter-spacing: 0.25px;
font-size: 0.625rem; font-size: 0.75rem;
line-height: 1.4; vertical-align: 0.125rem;
font-weight: 500; line-height: 2;
font-weight: 600;
&:first-of-type { &:first-of-type {
margin-top: 0.375rem; margin-top: 0.375rem;
} }
background-repeat: no-repeat;
padding-left: 1.5rem;
background-position-x: 0.375rem;
background-position-y: center;
background-size: 14px;
} }
.tag-animation {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23616B8F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-loader'%3E%3Cline x1='12' y1='2' x2='12' y2='6'%3E%3C/line%3E%3Cline x1='12' y1='18' x2='12' y2='22'%3E%3C/line%3E%3Cline x1='4.93' y1='4.93' x2='7.76' y2='7.76'%3E%3C/line%3E%3Cline x1='16.24' y1='16.24' x2='19.07' y2='19.07'%3E%3C/line%3E%3Cline x1='2' y1='12' x2='6' y2='12'%3E%3C/line%3E%3Cline x1='18' y1='12' x2='22' y2='12'%3E%3C/line%3E%3Cline x1='4.93' y1='19.07' x2='7.76' y2='16.24'%3E%3C/line%3E%3Cline x1='16.24' y1='7.76' x2='19.07' y2='4.93'%3E%3C/line%3E%3C/svg%3E");
}
.tag-visual {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23616B8F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-eye'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3C/svg%3E");
}
.tag-other {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23616B8F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-tag'%3E%3Cpath d='M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'%3E%3C/path%3E%3Cline x1='7' y1='7' x2='7' y2='7'%3E%3C/line%3E%3C/svg%3E");
}
.tag-interactivity {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23616B8F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-edit-2'%3E%3Cpath d='M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z'%3E%3C/path%3E%3C/svg%3E");
}
.tag-layout {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23616B8F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-layout'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='3' y1='9' x2='21' y2='9'%3E%3C/line%3E%3Cline x1='9' y1='21' x2='9' y2='9'%3E%3C/line%3E%3C/svg%3E");
}
.page-container.dark {
.tag-animation {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23BEC1CB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-loader'%3E%3Cline x1='12' y1='2' x2='12' y2='6'%3E%3C/line%3E%3Cline x1='12' y1='18' x2='12' y2='22'%3E%3C/line%3E%3Cline x1='4.93' y1='4.93' x2='7.76' y2='7.76'%3E%3C/line%3E%3Cline x1='16.24' y1='16.24' x2='19.07' y2='19.07'%3E%3C/line%3E%3Cline x1='2' y1='12' x2='6' y2='12'%3E%3C/line%3E%3Cline x1='18' y1='12' x2='22' y2='12'%3E%3C/line%3E%3Cline x1='4.93' y1='19.07' x2='7.76' y2='16.24'%3E%3C/line%3E%3Cline x1='16.24' y1='7.76' x2='19.07' y2='4.93'%3E%3C/line%3E%3C/svg%3E");
}
.tag-visual {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23BEC1CB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-eye'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3C/svg%3E");
}
.tag-other {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23BEC1CB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-tag'%3E%3Cpath d='M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'%3E%3C/path%3E%3Cline x1='7' y1='7' x2='7' y2='7'%3E%3C/line%3E%3C/svg%3E");
}
.tag-interactivity {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23BEC1CB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-edit-2'%3E%3Cpath d='M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z'%3E%3C/path%3E%3C/svg%3E");
}
.tag-layout {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23BEC1CB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-layout'%3E%3Crect x='3' y='3' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='3' y1='9' x2='21' y2='9'%3E%3C/line%3E%3Cline x1='9' y1='21' x2='9' y2='9'%3E%3C/line%3E%3C/svg%3E");
}
}
// Animation for card example // Animation for card example
.roll-up-height { .roll-up-height {
transition: height 0.3s ease-in-out; transition: height 0.3s ease-in-out;

View File

@ -46,6 +46,8 @@ pre[class*="language-"] {
overflow: auto; overflow: auto;
margin: 0.5rem 0; margin: 0.5rem 0;
white-space: pre-wrap; white-space: pre-wrap;
font-size: 1rem;
line-height: 2;
} }
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
@ -59,9 +61,10 @@ code[class*="language-"]::selection, code[class*="language-"] ::selection {
} }
:not(pre) > code[class*="language-"] { :not(pre) > code[class*="language-"] {
padding: .1em; padding: .25em .375;
border-radius: .3em; border-radius: .3em;
white-space: normal; white-space: normal;
border: 1px solid var(--code-border-color);
} }
.namespace { .namespace {
@ -75,7 +78,7 @@ code[class*="language-"]::selection, code[class*="language-"] ::selection {
&.punctuation { &.punctuation {
color: var(--token-color-b); color: var(--token-color-b);
} }
&.property, &.tag, &.boolean, &.constant, &.symbol, &.deleted, &.function { &.tag, &.boolean, &.constant, &.symbol, &.deleted, &.function {
color: var(--token-color-c); color: var(--token-color-c);
} }
&.number, &.class-name { &.number, &.class-name {
@ -90,6 +93,9 @@ code[class*="language-"]::selection, code[class*="language-"] ::selection {
&.regex { &.regex {
color: var(--token-color-g); color: var(--token-color-g);
} }
&.property {
color: var(--token-color-i);
}
&.important, &.variable { &.important, &.variable {
color: var(--token-color-h); color: var(--token-color-h);
} }
@ -107,7 +113,7 @@ code[class*="language-"]::selection, code[class*="language-"] ::selection {
color: var(--token-color-f); color: var(--token-color-f);
} }
p > code, a > code { p > code, a > code, li > code {
&, &[class*="language-"] { &, &[class*="language-"] {
color: var(--code-fore-color); color: var(--code-fore-color);
background: var(--code-back-color); background: var(--code-back-color);

View File

@ -1,6 +1,6 @@
:root { :root {
// Interface color palette // Interface color palette
--back-color: #F5F6FA; --back-color: #f5f6fa;
--back-color-dark: #D7DDF3; --back-color-dark: #D7DDF3;
--fore-color: #404454; --fore-color: #404454;
--fore-color-light: #575E7A; --fore-color-light: #575E7A;
@ -41,24 +41,26 @@
// Card color palette // Card color palette
--card-back-color: #FFFFFF; --card-back-color: #FFFFFF;
--card-fore-color: #212121; --card-fore-color: #212121;
--card-border-color: #E4E6EC;
--card-fore-color-light: #424242; --card-fore-color-light: #424242;
--card-shadow-color-a: rgba(240, 242, 247, 0.1); --card-shadow-color-a: rgba(240, 242, 247, 0.1);
--card-shadow-color-b: rgba(0, 32, 128, 0.1); --card-shadow-color-b: rgba(0, 32, 128, 0.1);
// Pre & Code color palette // Pre & Code color palette
--pre-fore-color: #e57373; --pre-fore-color: #d7ecff;
--pre-back-color: #1e253d; --pre-back-color: #1e253d;
--pre-selected-color: #041248; --pre-selected-color: #041248;
// Token color palette // Token color palette
--token-color-a: #7f99a5; // Comments --token-color-a: #8ca2d3; // Comments
--token-color-b: #bdbdbd; // Punctuation --token-color-b: #5ac8e3; // Punctuation
--token-color-c: #64b5f6; // Functions --token-color-c: #25d0e5; // Functions
--token-color-d: #ff8f00; // Numbers --token-color-d: #ff8f00; // Numbers
--token-color-e: #c5e1a5; // Strings --token-color-e: #ffd694; // Strings
--token-color-f: #ce93d8; // Keywords --token-color-f: #b7adff; // Keywords
--token-color-g: #26c6da; // Regular expressions --token-color-g: #26c6da; // Regular expressions
--token-color-h: #e57373; // Variables --token-color-h: #e57373; // Variables
--token-color-i: #85b4ff; // Property
// Tag color palette // Tag color palette
--tag-border-color: #D7DDF3; --tag-border-color: #D7DDF3;
@ -75,7 +77,8 @@
// Code color palette // Code color palette
--code-fore-color: #0324AB; --code-fore-color: #0324AB;
--code-back-color: #EDF0FC; --code-back-color: #fbf9ff;
--code-border-color: #e0dbff;
--code-selected-color: #BDEDFE; --code-selected-color: #BDEDFE;
} }
@ -112,8 +115,9 @@
// Button color palette remains unchanged for consistency // Button color palette remains unchanged for consistency
// Card color palette // Card color palette
--card-back-color: #434E76; --card-back-color: hsl(227, 28%, 36%);
--card-fore-color: #F0F0F0; --card-fore-color: #F0F0F0;
--card-border-color: #13151B;
--card-fore-color-light: #D6D6D6; // previously C0C0C0, careful --card-fore-color-light: #D6D6D6; // previously C0C0C0, careful
--card-shadow-color-b: rgba(1, 8, 30, 0.24); --card-shadow-color-b: rgba(1, 8, 30, 0.24);
@ -134,7 +138,8 @@
// Code color palette // Code color palette
--code-fore-color: #d1dafe; --code-fore-color: #d1dafe;
--code-back-color: #4f5fa0; --code-back-color: #45538c;
--code-border-color: #3e3c75;
--code-selected-color: #0dbcfb; --code-selected-color: #0dbcfb;
} }

View File

@ -87,3 +87,11 @@
src: local('Noto Sans SemiBold Italic'), local('NotoSans-SemiBoldItalic'), url(../../../assets/NotoSans-SemiBoldItalic.ttf) format('truetype'); src: local('Noto Sans SemiBold Italic'), local('NotoSans-SemiBoldItalic'), url(../../../assets/NotoSans-SemiBoldItalic.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
} }
@font-face {
font-family: 'Noto Sans';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Noto Sans Bold'), local('NotoSans-Bold'), url(../../../assets/NotoSans-Bold.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

View File

@ -33,9 +33,10 @@ const SnippetPage = props => {
</AniLink> </AniLink>
<SnippetCard <SnippetCard
snippetData={{ snippetData={{
id: postData.id,
title: postData.title, title: postData.title,
html: post.html, html: post.html,
code: postData.attributes.codeBlocks.code, code: postData.attributes.codeBlocks,
tags: postData.attributes.tags, tags: postData.attributes.tags,
}} }}
isDarkMode={props.isDarkMode} isDarkMode={props.isDarkMode}