{"id":1833,"date":"2024-04-24T14:40:14","date_gmt":"2024-04-24T20:40:14","guid":{"rendered":"https:\/\/frontendmasters.com\/blog\/?p=1833"},"modified":"2024-05-10T07:10:39","modified_gmt":"2024-05-10T13:10:39","slug":"feedback-on-masonry-layout","status":"publish","type":"post","link":"https:\/\/frontendmasters.com\/blog\/feedback-on-masonry-layout\/","title":{"rendered":"Feedback on Masonry Layout"},"content":{"rendered":"\n<p>Jen Simmons posted <a href=\"https:\/\/webkit.org\/blog\/15269\/help-us-invent-masonry-layouts-for-css-grid-level-3\/\">Help us invent CSS&nbsp;Grid&nbsp;Level&nbsp;3, aka \u201cMasonry\u201d layout<\/a> over on the WebKit blog the other day and is actively soliciting feedback. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Our hope is that web designers and developers chime in (post to social media, write blog posts) with your thoughts about which direction CSS should take.<\/p>\n<\/blockquote>\n\n\n\n<p>Don&#8217;t mind if I do.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Do we need Masonry Layout at all?<\/h2>\n\n\n\n<p>Jen writes:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Others are questioning whether or not this kind of layout is needed on the web at all \u2014 they aren\u2019t sure that well-known websites will use it.<\/p>\n<\/blockquote>\n\n\n\n<p>I think people will use it. It can be a compelling way to lay out blocks of content. For &#8220;image galleries&#8221; alone I feel like it&#8217;s worth having a good solution for. To name the most notorious example, this type of layout has been an iconic part of the Pinterest branding since forever. How&#8217;s that for a well-known website? I&#8217;d love to see the day the actual <code>pinterest.com<\/code> uses a native web platform masonry.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"1024\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=831%2C1024&#038;ssl=1\" alt=\"Screenshot of homepage of pinterest.com\" class=\"wp-image-1834\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=831%2C1024&amp;ssl=1 831w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=244%2C300&amp;ssl=1 244w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=768%2C946&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=1247%2C1536&amp;ssl=1 1247w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?resize=1663%2C2048&amp;ssl=1 1663w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/Screenshot-2024-04-24-at-12.16.26%E2%80%AFPM.png?w=2000&amp;ssl=1 2000w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/figure>\n\n\n\n<p>There are lots of things on the web that have naturally different aspect ratios, like images and Card components with arbitrary content. A &#8220;normal&#8221; grid layout with perfectly horizontal grid row lines isn&#8217;t always a good fit. Here&#8217;s an example of a reviews website where the reviews are of different sizes, and a masonry look works well:<\/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='292' src='https:\/\/videopress.com\/embed\/ujdF8A2I?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=1674852142'><\/script><\/div>\n\t\t\t\n\t\t\t\n\t\t<\/figure>\n\t\t\n\n\n<p>Web designers have been trying to pull this layout off in various ways for ages. There are various JavaScript based solutions (using JavaScript for layout isn&#8217;t ideal, but when there is no other choice, it happens). Perhaps most famously <a href=\"https:\/\/masonry.desandro.com\/\">Masonry<\/a>, where the 16k+ stars on GitHub is compelling alone.<\/p>\n\n\n\n<p>The cows have made a path here. It&#8217;s a cowroad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Do we need a <em>new<\/em> way of doing Masonry?<\/h2>\n\n\n\n<p><a href=\"https:\/\/css-tricks.com\/piecing-together-approaches-for-a-css-masonry-layout\/\">I&#8217;ve made the point in the past<\/a> there are existing ways to pull of this layout entirely in CSS. You can use CSS columns.<\/p>\n\n\n\n<div class=\"wp-block-cp-codepen-gutenberg-embed-block cp_embed_wrapper\"><iframe id=\"cp_embed_NeRNBO\" src=\"\/\/codepen.io\/anon\/embed\/NeRNBO?height=650&amp;theme-id=47434&amp;slug-hash=NeRNBO&amp;default-tab=result\" height=\"650\" scrolling=\"no\" frameborder=\"0\" allowfullscreen allowpaymentrequest name=\"CodePen Embed NeRNBO\" title=\"CodePen Embed NeRNBO\" class=\"cp_embed_iframe\" style=\"width:100%;overflow:hidden\">CodePen Embed Fallback<\/iframe><\/div>\n\n\n\n<p>You can also <a href=\"https:\/\/codepen.io\/chriscoyier\/pen\/XojXxy\">use flexbox<\/a>.<\/p>\n\n\n\n<p>That is literally the layout that masonry is achieving without inventing anything new. But that leads to the next two sections.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">This is partially a conversation about tabbing order.<\/h2>\n\n\n\n<p>Notice in the example above, the boxes are layed out as going &#8220;down&#8221; the first column, then back up to the second column at whatever box naturally comes next. This depends on the available width. But it might end up something like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[ 1 ] [ 4 ] [ 8 ]<br>[ 2 ] [ 5 ] [ 9 ]<br>[ 3 ] [ 6 ]<br>      [ 7 ]<\/pre>\n\n\n\n<p>This is where I&#8217;m not 100% sure if problems set in or not. As I currently understand it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 Sighted mouse\/trackpad user: not a problem<\/li>\n\n\n\n<li>\u2705 100% screen reader user: not a problem<\/li>\n\n\n\n<li>\u26a0\ufe0f User that relies on tabbing through content visually: Maybe a problem??<\/li>\n<\/ul>\n\n\n\n<p>So I&#8217;d love to fully understand if this vertical-by-row stacking order is actually a problem or not. And if it is, and it&#8217;s the <em>only<\/em> problem, are there other ways of solving it other than totally abandoning the columns approach? Is there some version of the (fake) idea <code>.masonry-layout-with-columns { tabbing-order: visual; }<\/code>?<\/p>\n\n\n\n<p>So then as I understand it, if CSS grid-powered masonry became a thing, it kinda &#8220;solves&#8221; this by maintaining &#8220;as horizontal as-it-can&#8221; tabbing order. So tabbing through content goes more 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=\"678\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?resize=1024%2C678&#038;ssl=1\" alt=\"Screenshot of browser with masonry layout of a bunch of images. Arrows drawn over the top showing the tabbing order, which goes a bit up and down as it moves from image to image horizontally.\" class=\"wp-image-1840\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?resize=1024%2C678&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?resize=300%2C199&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?resize=768%2C509&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?resize=1536%2C1018&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image1-masonry-light.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Is this definitely better than tabbing up and down columns? Unclear.<\/figcaption><\/figure>\n\n\n\n<p>Is that actually better? It seems kinda funky either way to me. I just wouldn&#8217;t automatically take it for granted that this horizontal-ish tabbing order is automatically better. If the elements are of <em>wildly<\/em> different sizes, I can imagine the tabbing being <em>more<\/em> awkward than the column style tabbing (which is at least predictable). <\/p>\n\n\n\n<p>Although if the columns went down much further than one viewport height, then I do see how the horizontal-ish method is preferable. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The name is a little funny.<\/h2>\n\n\n\n<p>The term masonry implies &#8220;like a mason would lay out bricks for a brick wall&#8221;. That&#8217;s funny to me as in that case, there actually are hard &#8220;row&#8221; lines.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1707\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?fit=1024%2C683&amp;ssl=1\" alt=\"brick wall\" class=\"wp-image-1841\" style=\"width:333px;height:auto\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?w=2560&amp;ssl=1 2560w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?resize=300%2C200&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?resize=1024%2C683&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?resize=768%2C512&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?resize=1536%2C1024&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/waldemar-rhaS97NhnHg-unsplash-scaled.jpg?resize=2048%2C1365&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n<\/div>\n\n\n<p>That kind of layout is <a href=\"https:\/\/codepen.io\/chriscoyier\/pen\/PXGNom\">already totally doable<\/a> with flexbox and flex wrapping. <\/p>\n\n\n\n<p>So I suppose the actual name <em>masonry<\/em> doesn&#8217;t feel quite right to me, especially for a term getting codified into the language.<\/p>\n\n\n\n<p>I see &#8220;waterfall&#8221; is a possible alternative name and I think I&#8217;d vote that direction (I see there is <a href=\"https:\/\/github.com\/w3c\/csswg-drafts\/issues\/9733\">active discussion<\/a>). Or maybe the <code>grid-template-rows: off;<\/code> that actually feels nicely logical. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Didn&#8217;t we already go down this road?<\/h2>\n\n\n\n<p>Jen reminds:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>A mechanism in CSS for \u201cmasonry layout\u201d was first proposed by Mozilla in January 2020 as an extension of CSS Grid, and&nbsp;<a href=\"https:\/\/caniuse.com\/mdn-css_properties_grid-template-rows_masonry\">implemented<\/a>&nbsp;as an experiment behind a flag in Firefox Nightly.<\/p>\n<\/blockquote>\n\n\n\n<p>I&#8217;ve had a site using that as a &#8220;progressive enhancement&#8221; for most of the 4 years that&#8217;s been out. You can just set up a grid without masonry, and just add it on if it would work nicely.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-code-table\"><span class='shcb-loc'><span><span class=\"hljs-selector-class\">.grid<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>   <span class=\"hljs-attribute\">display<\/span>: grid;\n<\/span><\/span><span class='shcb-loc'><span>   <span class=\"hljs-attribute\">grid-template-columns<\/span>: <span class=\"hljs-built_in\">repeat<\/span>(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">1<\/span>fr);\n<\/span><\/span><span class='shcb-loc'><span>   <span class=\"hljs-attribute\">gap<\/span>: <span class=\"hljs-number\">4rem<\/span>;\n<\/span><\/span><mark class='shcb-loc'><span>   <span class=\"hljs-attribute\">grid-template-rows<\/span>: masonry;\n<\/span><\/mark><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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>Seems perfectly fine to me. That would work by setting an alternative <code>grid-template-rows<\/code> on the line above as a fallback if needed or with using <code>@supports<\/code> to test the <code>property: value<\/code> pair. <\/p>\n\n\n\n<p>Just because a test version got implemented doesn&#8217;t mean the final version has to follow that, I&#8217;m just saying I&#8217;ve played with it and used it and it seems fine. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Is it right for CSS grid?<\/h2>\n\n\n\n<p>Jen writes:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Some people remain skeptical that this capability should be part of CSS Grid<\/p>\n<\/blockquote>\n\n\n\n<p>Questioning the current proposal is good. But you can&#8217;t just say you don&#8217;t like it without a pretty strong <em>why<\/em> or better alternatives. I didn&#8217;t scour the discourse myself, but the only one I see clearly in the article is:<\/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-tag\">main<\/span> {\n  <span class=\"hljs-attribute\">display<\/span>: masonry;\n  <span class=\"hljs-attribute\">masonry-columns<\/span>: <span class=\"hljs-built_in\">repeat<\/span>(<span class=\"hljs-number\">5<\/span>, minmax(<span class=\"hljs-number\">28ch<\/span>, <span class=\"hljs-number\">1<\/span>fr)); \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<p>I don&#8217;t <em>hate<\/em> it, but it is a bit more limited than the fancier possibilities of <code>grid-template-columns<\/code>. <\/p>\n\n\n\n<p>My main disagreement is that I feel like <code>display<\/code> is already <em>so overloaded<\/em>. It&#8217;s annoying to me that the same property that dictates the kind of layout the element does internally is the same thing that hides the element entirely. To me since the idea works well within the context of grid already, just use grid. Like it just seems like a natural fit. <\/p>\n\n\n\n<p>Just this kind of control to me is obviously compelling:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"678\" src=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?resize=1024%2C678&#038;ssl=1\" alt=\"\" class=\"wp-image-1842\" srcset=\"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?resize=1024%2C678&amp;ssl=1 1024w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?resize=300%2C199&amp;ssl=1 300w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?resize=768%2C509&amp;ssl=1 768w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?resize=1536%2C1018&amp;ssl=1 1536w, https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/image6-fibonacci-light.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p>And see the post for Jen&#8217;s example of using <code>max-content<\/code> columns which is honestly even more practical. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Mega menus have been hard to code, especially across multiple screen sizes. With CSS Grid Level 3, it becomes incredibly easy. A few lines of code creates a dynamic layout which adds and removes columns one at a time as space allows \u2014 without any media\/container queries, and with wrapping prevention.<\/p>\n<\/blockquote>\n\n\n\n<p>Then you add spanning columns to the party <em>and<\/em> subgrid and it&#8217;s clear me Jen has made a very strong case for adding &#8220;masonry&#8221; to CSS grid.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do we ever get multiple values for <code>gap<\/code> where we can control the space between different rows\/columns differently? Does the <code>display: masonry<\/code> approach allow that where grid would not?<\/li>\n\n\n\n<li>Can we get a &#8220;automatically make tabbing order visually logical, I&#8217;m sick of thinking about it and want to re-order and re-arrange things as pleases me&#8221; situation going? <\/li>\n\n\n\n<li>Are there any more fleshed out alternative proposals?\n<ul class=\"wp-block-list\">\n<li><strong>UPDATE<\/strong>: <a href=\"https:\/\/developer.chrome.com\/blog\/masonry?hl=en\">Google&#8217;s response<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Are there any <em>problems<\/em> with using CSS grid for this? The advantages seem clear but the disadvantages do not.<\/li>\n\n\n\n<li>Controlling individual column widths is sweet, should that make its way to CSS columns?<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Jen Simmons posted Help us invent CSS&nbsp;Grid&nbsp;Level&nbsp;3, aka \u201cMasonry\u201d layout over on the WebKit blog the other day and is actively soliciting feedback. Our hope is that web designers and developers chime in (post to social media, write blog posts) with your thoughts about which direction CSS should take. Don&#8217;t mind if I do. Do [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1844,"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,123,165],"class_list":["post-1833","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","tag-css","tag-grid","tag-masonry"],"acf":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2024\/04\/masonry-thumb.jpg?fit=1000%2C500&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/1833","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=1833"}],"version-history":[{"count":9,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/1833\/revisions"}],"predecessor-version":[{"id":2139,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/1833\/revisions\/2139"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media\/1844"}],"wp:attachment":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media?parent=1833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/categories?post=1833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/tags?post=1833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}