{"id":6931,"date":"2025-08-25T16:59:02","date_gmt":"2025-08-25T21:59:02","guid":{"rendered":"https:\/\/frontendmasters.com\/blog\/?p=6931"},"modified":"2025-08-26T10:34:20","modified_gmt":"2025-08-26T15:34:20","slug":"very-early-playing-with-random-in-css","status":"publish","type":"post","link":"https:\/\/frontendmasters.com\/blog\/very-early-playing-with-random-in-css\/","title":{"rendered":"Very Early Playing with random() in CSS"},"content":{"rendered":"\n<p><a href=\"https:\/\/webkit.org\/blog\/17285\/rolling-the-dice-with-css-random\/\">WebKit\/Safari has rolled out a preview version of <code>random()<\/code> in CSS.<\/a> <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Random functions in programming languages are amazing. You can use them to generate variations, to make things feel spontaneous and fresh. Until now there was no way to create a random number in CSS. Now, the <code>random()<\/code> function is on its way.<\/p>\n<\/blockquote>\n\n\n\n<p>Upon first play, it&#8217;s great! <\/p>\n\n\n\n<p class=\"learn-more\">This is <em>only<\/em> in <a href=\"https:\/\/developer.apple.com\/safari\/technology-preview\/\">Safari Technical Preview<\/a> right now. I&#8217;ll post videos below so you can see it, and link to live demos.<\/p>\n\n\n\n<p>CSS processors like Sass have been able to do this for ages, but it&#8217;s not nearly as nice in that context.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The <code>random()<\/code> numbers in Sass are only calculated at compile time. So they are only random at the time. Refreshing the page doesn&#8217;t mean newly random values.<\/li>\n\n\n\n<li>Random numbers are usually paired with a loop. So if you want 1,000 randomly placed elements, you need 1,000 <code>:nth-child()<\/code> selectors with a randomly generated value in each, meaning bulky CSS.<\/li>\n<\/ol>\n\n\n\n<p>With <code>random()<\/code> in vanilla CSS, no such loops are needed and making the code quite simple and satisfying. <\/p>\n\n\n\n<p>I found a 12-year-old Sass demo of mine playing with <code>random()<\/code> that is like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?resize=1024%2C337&#038;ssl=1\" alt=\"\" class=\"wp-image-6984\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?resize=1024%2C337&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?resize=300%2C99&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?resize=768%2C253&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?resize=1536%2C505&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.28.37-PM.png?w=1830&amp;ssl=1 1830w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/codepen.io\/chriscoyier\/pen\/nKZdBo?editors=0110\">This<\/a> compiled to over 200 lines of CSS.<\/figcaption><\/figure>\n\n\n\n<p>But now it&#8217;s just like this: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"411\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?resize=1024%2C411&#038;ssl=1\" alt=\"\" class=\"wp-image-6985\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?resize=1024%2C411&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?resize=300%2C120&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?resize=768%2C308&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?resize=1536%2C617&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-25-at-2.29.19-PM.png?w=1654&amp;ssl=1 1654w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/codepen.io\/editor\/chriscoyier\/pen\/0198d397-5bca-72e8-8249-adeea4529e14\/1a093e1a90d947db85ef4fce6fa300da\">Demo<\/a><\/figcaption><\/figure>\n\n\n\n<p>Much of the magic, to me, is how each matching element gets its own random values. So if you had three things like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"thing\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"thing\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"thing\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Then this simple CSS could make them all quite different:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.thing<\/span> {\n  <span class=\"hljs-attribute\">position<\/span>: absolute;\n  <span class=\"hljs-attribute\">background<\/span>: red;\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-number\">100px<\/span>;\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-number\">100px<\/span>;\n  \n  <span class=\"hljs-attribute\">top<\/span>: <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">10px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n  <span class=\"hljs-attribute\">left<\/span>: <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">400px<\/span>);\n  \n  <span class=\"hljs-attribute\">background<\/span>: <span class=\"hljs-built_in\">rgb<\/span>(\n    random(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>),\n    <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>),\n    <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>)\n  )\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n\t\t<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\" style=\"\" >\n\t\t\t<div class=\"jetpack-videopress-player__wrapper\"> <iframe title=\"VideoPress Video Player\" aria-label='VideoPress Video Player' width='500' height='322' src='https:\/\/videopress.com\/embed\/KhJKLYPP?cover=1&amp;autoPlay=0&amp;controls=1&amp;loop=1&amp;muted=1&amp;persistVolume=0&amp;playsinline=1&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0' frameborder='0' allowfullscreen data-resize-to-parent=\"true\" allow='clipboard-write'><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1739540970'><\/script><\/div>\n\t\t\t<figcaption><a href=\"https:\/\/codepen.io\/chriscoyier\/pen\/ZYbjYLB\">Demo<\/a><\/figcaption>\n\t\t\t\n\t\t<\/figure>\n\t\t\n\n\n<p>The blog post doesn&#8217;t mention &#8220;unitless&#8221; numbers like I&#8217;ve used above for the color, but they work fine. If you&#8217;re using units, they need to be the same across all parameters.<\/p>\n\n\n\n<p>The &#8220;starfield&#8221; demo in the blog post is pretty darn compelling! <\/p>\n\n\n\n\t\t<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\" style=\"\" >\n\t\t\t<div class=\"jetpack-videopress-player__wrapper\"> <iframe title=\"VideoPress Video Player\" aria-label='VideoPress Video Player' width='500' height='315' src='https:\/\/videopress.com\/embed\/YvISqZ55?cover=1&amp;autoPlay=0&amp;controls=1&amp;loop=0&amp;muted=0&amp;persistVolume=1&amp;playsinline=0&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0' frameborder='0' allowfullscreen data-resize-to-parent=\"true\" allow='clipboard-write'><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1739540970'><\/script><\/div>\n\t\t\t<figcaption>Demo<\/figcaption>\n\t\t\t\n\t\t<\/figure>\n\t\t\n\n\n<p>I found another old demo where I used a bit of randomized <code>animation-delay<\/code> where in the SCSS syntax I did it like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"SCSS\" data-shcb-language-slug=\"scss\"><span><code class=\"hljs language-scss\"><span class=\"hljs-attribute\">animation-delay<\/span>: (random(<span class=\"hljs-number\">10<\/span>) \/ <span class=\"hljs-number\">40<\/span>) + s;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">SCSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scss<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Notice I had to append the &#8220;s&#8221; character at the end to get units there. Now in vanilla CSS you just declare the range with the units on it, like:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">animation-delay<\/span>: <span class=\"hljs-selector-tag\">calc<\/span>(<span class=\"hljs-selector-tag\">random<\/span>(0<span class=\"hljs-selector-tag\">s<\/span>, 10<span class=\"hljs-selector-tag\">s<\/span>) \/ 40);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And it <a href=\"https:\/\/codepen.io\/editor\/chriscoyier\/pen\/0198d39f-bc0f-7857-a4e0-3f6f0ae70a15\">works great<\/a>! <\/p>\n\n\n\n\t\t<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\" style=\"\" >\n\t\t\t<div class=\"jetpack-videopress-player__wrapper\"> <iframe title=\"VideoPress Video Player\" aria-label='VideoPress Video Player' width='500' height='240' src='https:\/\/videopress.com\/embed\/rN3h8LCj?cover=1&amp;autoPlay=0&amp;controls=1&amp;loop=0&amp;muted=0&amp;persistVolume=1&amp;playsinline=0&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0' frameborder='0' allowfullscreen data-resize-to-parent=\"true\" allow='clipboard-write'><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1739540970'><\/script><\/div>\n\t\t\t\n\t\t\t\n\t\t<\/figure>\n\t\t\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>The feature <a href=\"https:\/\/www.w3.org\/TR\/css-values-5\/#randomness\">does have a spec<\/a>, and I&#8217;m pleased that it has covered many things that I hadn&#8217;t considered before but are clearly good ideas. The blog post covers this nicely, but allow me to re-iterate:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.random-rect<\/span> {\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-built_in\">random<\/span>(<span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Both the <code>width<\/code> and <code>height<\/code> will be <em>different<\/em> random values. But if you want them to be the <em>same<\/em> random value, you can set a custom ident value that will &#8220;cache&#8221; that value for <em>one<\/em> element:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.random-square<\/span> {\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-built_in\">random<\/span>(--foo, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-built_in\">random<\/span>(--foo, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Nice! <\/p>\n\n\n\n<p>But if you had 20 of these elements, how could you make sure <em>all<\/em> had the same random values? Well there is a special keyword for that, ensuring all matched elements share the same random values:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.shared-random-rect<\/span> {\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-built_in\">random<\/span>(element-shared, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-built_in\">random<\/span>(element-shared, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>But in that case, all matched elements would share the same random values, but the <code>width<\/code> and <code>height<\/code> wouldn&#8217;t be equal. So you&#8217;d do both to make sure it&#8217;s <em>all<\/em> equal:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-class\">.shared-random-squares<\/span> {\n  <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-built_in\">random<\/span>(--foo element-shared, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n  <span class=\"hljs-attribute\">height<\/span>: <span class=\"hljs-built_in\">random<\/span>(--foo element-shared, <span class=\"hljs-number\">100px<\/span>, <span class=\"hljs-number\">200px<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>That&#8217;s all very nicely considered, I think.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Ranges are also handled with a final parameter:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">top<\/span>: random(10px, 100px, 20px);\n<span class=\"hljs-attribute\">transition-delay<\/span>: random(0s, 5s, 1s);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>top<\/code> value above can only be: 10px, 30px, 50px, 70px, or 90px.<\/p>\n\n\n\n<p>The <code>transition-delay<\/code> value above can only be: 0s, 1s, 2s, 3s, 4s, or 5s. <\/p>\n\n\n\n<p>Otherwise you can get decimal values of either which might be more random than you want. Even <code>1px<\/code> for random pixel values as an increment seems to be suggested.<\/p>\n\n\n\n<p>(Note the WebKit blog has a code sample with <code>by 20deg<\/code> in it, which I <em>think<\/em> is a typo as that doesn&#8217;t work for me.)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>I didn&#8217;t have a chance to try it yet \u2014 but doesn&#8217;t it make you wanna force a re-render and see if it will work with <code>document.startViewTransition<\/code>??<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Only Safari Technical Preview!) <\/p>\n<p>Awfully cool `random()` is coming in CSS. The design possibilities are quite cool. <\/p>\n","protected":false},"author":1,"featured_media":6990,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"sig_custom_text":"","sig_image_type":"featured-image","sig_custom_image":0,"sig_is_disabled":false,"inline_featured_image":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[7,24,388],"class_list":["post-6931","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","tag-css","tag-design","tag-random"],"acf":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2025\/08\/random.jpg?fit=2100%2C1268&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/6931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/comments?post=6931"}],"version-history":[{"count":5,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/6931\/revisions"}],"predecessor-version":[{"id":7006,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/6931\/revisions\/7006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media\/6990"}],"wp:attachment":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media?parent=6931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/categories?post=6931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/tags?post=6931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}