{"id":3296,"date":"2011-06-29T00:04:29","date_gmt":"2011-06-29T04:04:29","guid":{"rendered":"http:\/\/www.useragentman.com\/blog\/?p=3296"},"modified":"2013-03-21T09:35:00","modified_gmt":"2013-03-21T13:35:00","slug":"full-css3-text-shadows-even-in-ie","status":"publish","type":"post","link":"https:\/\/www.useragentman.com\/blog\/2011\/06\/29\/full-css3-text-shadows-even-in-ie\/","title":{"rendered":"Full CSS3 Text-Shadows &mdash; Even In IE"},"content":{"rendered":"<div id=\"intro\" class=\"alignLeft\">\n<span id=\"css3And\">CSS3 &amp;<\/span><br \/><span id=\"html5\">HTML5<\/span>\n<\/div>\n<p>In the last few months, <strong>I have written two articles where I discussed a few strategies to do CSS3-style transforms in IE<\/strong> (<a href=\"https:\/\/www.useragentman.com\/blog\/2011\/04\/14\/css3-text-shadow-can-it-be-done-in-ie-without-javascript\/\">CSS3 Text-Shadow \u2013 Can It Be Done in IE Without JavaScript?<\/a> and <a href=\"https:\/\/www.useragentman.com\/blog\/2011\/04\/23\/css-blurred-text-shadow-in-ie-part-i\/\">CSS Blurred Text-Shadow in IE \u2014 Part I<\/a>).  While demonstrating the possibilities to creating a varied range of text-shadows in IE, there wasn&#8217;t any silver bullet that produced what I considered one of the Holy Grails of CSS polyfills: <strong>a method that could take an existing page and render multiple CSS3 text-shadows in IE<\/strong> with few, if any, changes to the CSS code. To that end, at the end of my last article, I dropped the gauntlet at the end of my last article  and challenged the web development community to help come up with a better solution.  I got a few takers, but one stood out from the rest. <strong><a href=\"http:\/\/asamuzak.jp\/\">Kazumasa Hasegawa<\/a> submitted his script and blog post <a href=\"http:\/\/asamuzak.jp\/html\/321\">(in Japanese<\/a> and then <a href=\"http:\/\/asamuzak.jp\/html\/322\">in English<\/a>) about his script that could do exactly what I asked: full CSS3-style text-shadowing in IE.<\/strong>   It can do multiple blurred and unblurred shadows per block of text.  The only caveat is that one would have to set the CSS selectors inside a JavaScript file.  However, the code was extremely well written, and it was very easy for me to refactor it to become a plug-in for my CSS3 polyfill library, <a href=\"https:\/\/www.useragentman.com\/blog\/current-projects\/cross-browser-css-transforms-even-in-ie\/\">cssSandpaper<\/a>.  Now, all a developer has to do now is include a few <code>&lt;script&gt;<\/code> tags into the <code>&lt;head&gt;<\/code>, and<strong> BAM!!! &mdash; instant text-shadow goodness in IE7+.<\/strong><\/p>\n<h2>Yeah Whatever!  Show Me Proof!<\/h2>\n<p>If you are viewing this page in IE7+, here are the droids you are looking for:<\/p>\n<table class=\"dataTable\">\n<thead>\n<tr>\n<th>\nLive CSS\/HTML\n<\/th>\n<th class=\"screenshot\">\nIE9\n<\/th>\n<th class=\"screenshot\">\nFirefox\n<\/th>\n<th>\nText-Shadow Syntax<br \/>\n<\/tr>\n<\/thead>\n<tbody>\n<tr  id=\"example1\">\n<td  class=\"example\">\n<span><strong>Simple<\/strong><\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie01.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff01.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n2px 2px 0 #E51919\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr id=\"example2\">\n<td  class=\"example\">\n<span>Blurred<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie02.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff02.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n3px 3px 3px #B24C4C\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr id=\"example3\">\n<td  class=\"example cssSandpaper-IEuseGradientFilter\">\n<span>Etched<\/span>\n<\/td>\n<td class=\"cssSandpaper-IEuseGradientFilter\">\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie03.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"cssSandpaper-IEuseGradientFilter\">\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff03.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n0px 1px 0px white\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example4\">\n<td  class=\"example\">\n<span>Flaming<\/span>\n<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie04.png\" alt=\"\"  \/><\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff04.png\" alt=\"\"  \/><\/td>\n<td class=\"code\">\n<pre>\r\n0px   0px  4px white,    0px  -5px  4px #FFFF33,\r\n2px -10px  6px #FFDD33, -2px -15px 11px #FF8800,\r\n2px -25px 18px #FF2200 <\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example5\">\n<td  class=\"example\">\n<span>Neon<\/span>\n<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie05.png\" alt=\"\"  \/><\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff05.png\" alt=\"\"  \/><\/td>\n<td class=\"code\">\n<pre>\r\n0 0 1px  #ffffff, 0 0 2px  #ffffff,\r\n0 0 3px  #ffffff, 0 0 4px  #ff00de,\r\n0 0 7px  #ff00de, 0 0 8px  #ff00de,\r\n0 0 10px #ff00de, 0 0 15px #ff00de;\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example6\">\n<td  class=\"example\">\n<span>Unfocused<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie06.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff06.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n0 0 3px #fff\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example7\" >\n<td class=\"example\">\n<span>Glowing<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie07.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff07.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n0 0 20px yellow, 0 0 60px yellow\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example8\">\n<td  class=\"example\">\n<span>Embossed<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie08.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff08.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n-1px -1px white, 1px 1px #333333\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example9\">\n<td  class=\"example\">\n<span>Pillow<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie09.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff09.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n1px 1px white, -1px -1px #444\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr  id=\"example10\">\n<td  class=\"example\">\n<span>Fake 3D<\/span>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie10.png\" alt=\"\"  \/>\n<\/td>\n<td>\n<img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ff10.png\" alt=\"\"  \/>\n<\/td>\n<td class=\"code\">\n<pre>\r\n1px 1px rgba(255,128,0,.7), \r\n2px 2px rgba(255,128,0,.7),  \r\n3px 3px rgba(255,128,0,.7), \r\n4px 4px rgba(255,128,0,.7),\r\n5px 5px rgba(255,128,0,.7)\r\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>(Note that the Blur example does not appear correctly in IE7 and 8, due to lack of support of the <code>transparent<\/code> color)<\/p>\n<p>These examples were inspired by these excellent examples on the web:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.css3.info\/preview\/text-shadow\/\">Text-shadow, Photoshop like effects using CSS<\/a> by <a href=\"http:\/\/www.css3.info\">CSS3.info<\/a> (<a href=\"https:\/\/www.useragentman.com\/packages\/cssSandpaper-1.5\/tests\/csssandpaper\/textshadowcss3info.html\">cssSandpaper version<\/a>)<\/li>\n<li><a href=\"http:\/\/line25.com\/articles\/using-css-text-shadow-to-create-cool-text-effects\">Using CSS Text-Shadow to Create Cool Text Effects<\/a> from <a href=\"http:\/\/line25.com\/\">Chris Spooner<\/a> (<a href=\"https:\/\/www.useragentman.com\/packages\/cssSandpaper-1.5\/tests\/csssandpaper\/textshadowline25.html\">cssSandpaper version<\/a>)<\/li>\n<li><a href=\"http:\/\/themegamag.com\/coding\/css-coding\/8-css3-text-shadow-effects\/\">8 css3 text-shadow effects<\/a> by <a href=\"http:\/\/falemadi.com\/\">Fatma Alemadi<\/a> (<a href=\"https:\/\/www.useragentman.com\/packages\/cssSandpaper-1.5\/tests\/csssandpaper\/textshadowthemegamag.html\">cssSandpaper version<\/a>)<\/li>\n<\/ul>\n<h2>How Can cssSandpaper Give Me <code>text-shadow<\/code> Goodness?<\/h2>\n<ol>\n<li><a href=\"https:\/\/github.com\/zoltan-dulac\/cssSandpaper\">Download the code from github<\/a>.<\/li>\n<li>Include the following in the <code>head<\/code> of the document you have <code>text-shadow<\/code>ing on:<br \/>\n<blockquote class=\"code\">\n<pre>\r\n&lt;script type=\"text\/javascript\" src=\"\/path\/to\/EventHelpers.js\"&gt;\r\n&lt;\/script&gt;\r\n&lt;script type=\"text\/javascript\" src=\"\/path\/to\/textshadow.js\"&gt;\r\n&lt;\/script&gt;\r\n&lt;script type=\"text\/javascript\" src=\"\/path\/to\/cssQuery-p.js\"&gt;\r\n&lt;\/script&gt;\r\n&lt;script type=\"text\/javascript\" src=\"\/path\/to\/cssSandpaper.js\"&gt;\r\n&lt;\/script&gt;\r\n<\/pre>\n<\/blockquote>\n<\/li>\n<li>It should now work in IE.  With the HTML5 Doctype, <a href=\"http:\/\/mathiasbynens.be\/notes\/html5-levels#level-1\">you can remove the <code>type=\"text\/javascript\"<\/code> attributes<\/a>.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/github.com\/zoltan-dulac\/cssSandpaper\" class=\"exampleLink\">Download the latest version of cssSandpaper with IE <code>text-shadow<\/code> support.<\/a><\/p>\n<h2>Okay, What Are The Caveats<\/h2>\n<p>Like any polyfill solution, there are a few things one has to keep in mind when using a solution like this. <\/p>\n<ol>\n<li>As you can see from the above examples, blurred text-shadows in IE look slightly different because of the different algorithm IE&#8217;s Blur Visual Filter uses compared to what CSS3 text-shadow uses.  This is not so obvious on the second example above, but becomes more obvious the more blurred text-shadows are applied on the same text.  For most applications, this is acceptable, but for those of us who like to pixel-bitch (i.e. complain when something is not pixel-perfect), you should be aware of this difference (No, I don&#8217;t know where I got that term from.  I may have made it up.  Anyone else heard of it before?)<\/li>\n<li>Creating a large text-shadow blur (i.e. greater than 70px) on a large piece of text can cause Internet Explorer&#8217;s rendering engine to slow down when the text is scrolled into view.<\/li>\n<li>Sometimes IE cuts off the shadows when the <code>line-height<\/code> is too small:<br \/>\n<div id=\"attachment_3452\" style=\"width: 312px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie01-cutoff.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3452\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/ie01-cutoff.png\" alt=\"\" title=\"ie01-cutoff\" width=\"302\" height=\"98\" class=\"size-full wp-image-3452\" \/><\/a><p id=\"caption-attachment-3452\" class=\"wp-caption-text\">The letter 'P' and other letters with descenders may get cut off if the line-height is not set to be larger than the actual font-size.<\/p><\/div><\/p>\n<li>In IE7-8, elements above text-shadowed text that have a <code>line-height<\/code> property measured in <code>em<\/code> units may effect the text-shadow in IE.  If there is a problem, the shadow is one pixel off from where it is supposed to be, as shown in this screenshot:<br \/>\n<div id=\"attachment_3460\" style=\"width: 626px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/1pxOff.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3460\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/1pxOff.png\" alt=\"\" title=\"1pxOff\" width=\"616\" height=\"201\" class=\"size-full wp-image-3460\" srcset=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/1pxOff.png 616w, https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/1pxOff-300x97.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><p id=\"caption-attachment-3460\" class=\"wp-caption-text\">Examples of a correct looking text-shadow (left) and a text shadow that is a pixel off (right).<\/p><\/div><\/p>\n<p>As you can see from the screenshots above, this problem is much more obvious when there is no blur-radius in the text-shadow.  I am trying to see if I can work around this problem, but it looks like it has to do rounding errors when IE converts <code>em<\/code> units to pixels.  If you have a lot <code>em<\/code> units in your document, you may want to consider using <a href=\"\/blog\/2011\/04\/14\/css3-text-shadow-can-it-be-done-in-ie-without-javascript\/\">my non-JavaScript solution<\/a> when using a single, non-blurred text-shadows.\n<\/li>\n<li>Sometimes, in order for the text-shadows to render correctly when using ClearType, you may have to use the <code>-sand-chroma-override<\/code> CSS property on the HTML you applied the <code>text-shadow<\/code> on.  This property is used by cssSandpaper to fix a problem with ClearType and IE&#8217;s Visual Filters, as described in my previous blog post, <a href=\"https:\/\/www.useragentman.com\/blog\/2010\/09\/02\/how-to-make-cleartype-font-face-fonts-and-css-visual-filters-play-nicely-together\/\" >How to Make ClearType, @font-face Fonts and CSS Visual Filters Play Nicely Together<\/a>.  Most of the time, this property should be set to be the color that that is behind the text value of the background of the text, but sometimes you will have to look at the outline of the texts and the solid shadows to get an idea as to how it should be set.  Let&#8217;s take, for example, the &#8220;Law and Order&#8221; style text at the top of this page.  We used the following CSS to produce the text-shadow on the &#8220;CSS3&#8221; text:<br \/>\n<blockquote class=\"code\">\n<pre>\r\n-sand-chroma-override: #666666;\r\ntext-shadow: \r\n\t-4px 0px 0px #0f1128,\r\n\t-8px 0px 4px rgb(50, 152, 234),\r\n\t-10px 0px 4px rgba(50, 152, 234, 0.3),\r\n\t-8px -4px 4px rgba(50, 152, 234, 0.6),\r\n\t-8px 4px 4px rgba(50, 152, 234, 0.6);\r\n<\/pre>\n<\/blockquote>\n<p>Why did I end up using <code>#666666<\/code>?  It is a greyscale color that is roughly between the brightness of the off-white text and the blue shadow.   If I set it to black instead, the outline of the text&#8217;s first dark text-shadow would be blocky, as seen here:<\/p>\n<table class=\"dataTable detailedScreenshots\">\n<thead>\n<th><\/th>\n<th><code>-sand-chroma-override: #000000<\/code><\/th>\n<th><code>-sand-chroma-override: #666666<\/code><\/th>\n<\/thead>\n<tbody>\n<tr>\n<th>Scale 100%<\/th>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/lawAndOrderIEChromaBlack.png\" alt=\"\" title=\"lawAndOrderIEChromaBlack\"\/><\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/06\/lawAndOrderIEChromaGray.png\" alt=\"\" title=\"lawAndOrderIEChromaBlack\"\/<\/td>\n<\/tr>\n<tr>\n<th>Scale 300%<\/th>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/05\/lawAndOrderIEChromaBlack_Detail1.png\" alt=\"\" title=\"lawAndOrderIEChromaBlack\"\/<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.useragentman.com\/blog\/wp-content\/uploads\/2011\/05\/lawAndOrderIEChromaGray_Detail1.png\" alt=\"\" title=\"lawAndOrderIEChromaBlack\"\/<\/td>\n<\/tbody>\n<\/table>\n<p>What you set this value to will depend on the text-shadow recipe you are using and, to paraphrase my Mathematics text-books in college, I leave it up to the reader to play around with the <code>-sand-chroma-override<\/code> value to see what looks best in which situation.\n<\/li>\n<\/ol>\n<h2>In Conclusion<\/h2>\n<p>This script opens up a lot of great possibilities for styling text in IE.  There is still some work to be done to make the script even better with some inevitable bugs that will need to be fixed, and I will continue to work on it to make improvements.  If you see areas for improvement, or any bugs that you see with the code, please make a comment on the <a href=\"https:\/\/github.com\/zoltan-dulac\/cssSandpaper\/issues\">cssSandpaper issues page on github<\/a>.  If you have something to contribute, I would be most grateful. :-)<\/p>\n<p>Other changes that I am planning for cssSandpaper will include:<\/p>\n<ol>\n<li><strong>Choice of Selector Library:<\/strong> I will be refactoring cssSandpaper to use other selector libraries besides cssQuery, which is currently bundled with it.  <strong>This will include, but not restricted to, jQuery. <\/strong> This will allow developers to reduce the number of libraries included in their documents and reduce load time.<\/li>\n<li><strong>Modularity:<\/strong> I will make it easy for developers to make their own plugins to support CSS properties not currently supported by cssSandpaper.  This module framework will also allow developers to only add support for the CSS properties they want to use (e.g. if a developer doesn&#8217;t use any CSS3 transforms, then they don&#8217;t have include that code or supporting libraries, like Sylvester.js).<\/li>\n<li><strong>Only Download Code If Needed:<\/strong> I want to make cssSandpaper only download plugins if actually needed.  This will probably be done with Alex Sexton&#8217;s and Ralph Holzmann&#8217;s excellent <a href=\"http:\/\/yepnopejs.com\/\">yepnope.js<\/a> library.  While this library can be used today to speed things up, I want to look into making a little more integrated, if possible.<\/li>\n<li><strong>Further CSS3 Support:<\/strong> I am looking into polyfills at the moment, like <code>border-image<\/code>.  Any other ideas for plugins will be most welcome.<\/li>\n<\/ol>\n<h2>Download cssSandpaper<\/h2>\n<p><a href=\"https:\/\/github.com\/zoltan-dulac\/cssSandpaper\" class=\"exampleLink\">Download the latest version of cssSandpaper with IE <code>text-shadow<\/code> support.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/2011\/06\/splash.png\" \/>While researching the possibilities of using text-shadows in IE, I noticed that there wasn&#8217;t any silver bullet that produced multiple CSS3-like text-shadows in IE.  However, combining my cssSandpaper script with a refactored version of a text-shadowing script by Kazumasa Hasegawa, we can now have IE text-shadow goodness.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51,9,38,120,7,119,99],"tags":[],"class_list":["post-3296","post","type-post","status-publish","format-standard","hentry","category-cleartype-technologies","category-css","category-css3","category-ie-visual-filters","category-javascript","category-polyfills","category-text-shadow"],"_links":{"self":[{"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/posts\/3296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/comments?post=3296"}],"version-history":[{"count":149,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/posts\/3296\/revisions"}],"predecessor-version":[{"id":3510,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/posts\/3296\/revisions\/3510"}],"wp:attachment":[{"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/media?parent=3296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/categories?post=3296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.useragentman.com\/blog\/wp-json\/wp\/v2\/tags?post=3296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}