{"id":513,"date":"2015-01-20T09:17:06","date_gmt":"2015-01-20T08:17:06","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/css-assiomatico-e-gufi-lobotomizzati\/"},"modified":"2015-01-20T09:17:06","modified_gmt":"2015-01-20T08:17:06","slug":"css-assiomatico-e-gufi-lobotomizzati","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/css-assiomatico-e-gufi-lobotomizzati\/","title":{"rendered":"CSS assiomatico e gufi lobotomizzati"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/01\/gufo.jpg\" border=\"0\" align=\"left\" \/><\/p>\n<p>Lo scorso Giugno, al <a href=\"http:\/\/cssday.nl\/2014\">CSS Day<\/a> ho presentato, con un po&#8217; di trepidazione, un peculiare selettore CSS composto da tre caratteri. Detto \u201clobotomized owl selector\u201d (selettore gufo lobotomizzato, <em>ndr<\/em>) per la sua somiglianza con lo sguardo vacuo di un gufo, si \u00e8 dimostrata essere la sezione pi\u00f9 popolare del <a href=\"http:\/\/vimeo.com\/101718785\">mio talk<\/a>.<\/p>\n<p>Non so dirvi se il pubblico applaudiva il ragionamento dietro all&#8217;invenzione o se, al contrario, stavano ridendo nervosamente della mia audacia nell&#8217;includere un costrutto cos\u00ec strano e apparentemente inutile. Forse stavo inconsapevolmente parlando a un pubblico pagato di supporter di un santuario per gufi. Non lo so.<\/p>\n<p>Il lobotomized owl selector ha questo aspetto:<\/p>\n<pre><code>* + *<\/code><\/pre>\n<p>Nonostante il suo nome irriverente e la sua forma precaria, il lobotomized owl selector non \u00e8 un semplice esperimento per me. \u00c8 il risultato di sperimentazioni continue nell&#8217;automazione del layout del flow content. L&#8217;owl selector \u00e8 un selettore \u201cassiomatico\u201d con una portata vorace. Come tale, molti esiteranno ad usarlo e terrorizzer\u00e0 qualcuno sapere che lo includo nel production code. Voglio dimostrare in che modo il selettore pu\u00f2 ridurre gli eccessi, velocizzare lo sviluppo e aiutare ad automatizzare il contenuto dinamico arbitrario.<\/p>\n<div class=\"paragrafo\">\n<h2>Stili da prescrizione<\/h2>\n<p>In maniera quasi universale, i web interface designer professionisti (ingegneri o qualunque cosa siano) si sono abituati a dare stili agli elementi HTML <em>in maniera prescrittiva<\/em>. Concepiamo un oggetto dell&#8217;interfaccia, poi creiamo gli stili per quell&#8217;oggetto che vengono scritti manualmente nel markup come \u201chook\u201d.<\/p>\n<p>Nonostante appartenga solo alla presentazione, non all&#8217;interoperabilit\u00e0 semantica, il selettore di class \u00e8 ci\u00f2 a cui ricorriamo pi\u00f9 frequentemente. Mentre gli elementi e la maggior parte degli attributi sono predeterminati e standardizzati, le class sono dei segnaposti che ci regalano la libert\u00e0 della authorship. Le class ci danno controllo.<\/p>\n<pre><code>.my-module {\n\t\/* ... *\/\n}<\/code><\/pre>\n<p>I framework CSS sono sostanzialmente delle librerie di codice non standard basate sulle class, intese a formare relazioni esplicite tra gli stili e i loro elementi. Sono celebrati per la loro abilit\u00e0 di aiutare i designer a produrre interfacce attraenti in maniera rapida e sono criticati per gli inevitabili limiti di accessibilit\u00e0 che risultano quando si parte dallo stile (forma) piuttosto che dal contenuto (funzione).<\/p>\n<pre><code>&lt; !-- An unfocusable, semantically inaccurate \"button\" --&gt;\n&lt;a class=\"ui-button\"&gt;press me&lt;\/a&gt;<\/code><\/pre>\n<p>Sia che usiate un framework o la vostra metodologia, il modo di assegnare stili prescrittivo rende impossibile la creazione del contenuto agli editor non tecnici in quanto richiede non solo la conoscenza del markup presentazionale, ma anche l&#8217;accesso a quel markup per codificare gli stili prescritti. Agli editor WYSIWYG e ai tool come Markdown manca necessariamente questa complessit\u00e0 cos\u00ec che l&#8217;assegnamento degli stili non impedisca il processo editoriale.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Bloat<\/h2>\n<p>Indipendentemente se siate in grado o meno di creare e mantenere il markup presentational, la questione se <em>dobbiate<\/em> rimane. Aggiungere codice presentational al vostro markup precedentemente intonso, lo congestiona necessariamente, ma qual \u00e8 il compromesso? Ci permette di ridurre l&#8217;eccesso e la congestione nel foglio di stile?<\/p>\n<p>Scegliendo di assegnare stili interamente in termini di elementi identificati con nomi, facciamo l&#8217;errore di asserire che gli elementi HTML esistono nel vuoto, non soggetti all&#8217;ereditariet\u00e0 o alla condivisione. Trattando l&#8217;elemento come \u201cquesta cosa a cui devono essere assegnare stili\u201d, siamo responsabili dell&#8217;impostazione di alcuni valori per l&#8217;elemento in questione che avrebbero gi\u00e0 dovuto essere definiti pi\u00f9 in alto nel \u201ccascade\u201d. Aggiungere nuovi moduli a un progetto favorisce la congestione, che \u00e8 una cosa difficile da tenere sotto controllo.<\/p>\n<pre><code>.module-new {\n\t\/* So\u2026 what\u2019s actually new here? *\/\n}<\/code><\/pre>\n<p>Dai pre-processori con la loro aggiunta di variabili a metodologie CSS basate sugli oggetti e la loro applicazione di classi \u201coggetto\u201d riutilizzabili, siamo alle prese con i sacchi di sabbia per arginare questa marea di bloat. \u00c8 l&#8217;ossessione del nostro settore. Comunque, pochi rimedi respingono la filosofia prescrittiva che richiama il bloat per prima cosa. Alcune interpretazioni del CSS object-oriented insistono anche nella gerarchia appiattita di stili, citando <a href=\"http:\/\/www.impressivewebs.com\/css-specificity-irrelevant\/\">la specificit\u00e0 come problema da superare<\/a> &#8211; riducendo in realt\u00e0 il CSS a SS e negando una delle sue feature chiave.<\/p>\n<p>Non sto scrivendo per condannare completamente questi approcci e tecnologie, ma ci sono altri metodi che possono essere pi\u00f9 efficaci sotto certe condizioni. Tenetevi stretto il cappello!<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Performance del selettore<\/h2>\n<p>Sono felice di ammettere che quando qualcuno tra voi ha visto i due asterischi in <code>* + *<\/code> all&#8217;inizio dell&#8217;articolo, avr\u00e0 scosso la testa con vigorosa disapprovazione. C&#8217;\u00e8 un precedente per questo. <a href=\"http:\/\/meyerweb.com\/eric\/articles\/webrev\/200006a.html\">Il selettore universale<\/a> \u00e8 sicuramente uno strumento potente, ma pu\u00f2 essere potente in maniera positiva, non solo negativa. Prima di addentrarci in questo, per\u00f2, voglio parlare della questione della performance percepita.<\/p>\n<p>Tutti gli studi che ho letto, inclusi quelli di  <a href=\"http:\/\/www.stevesouders.com\/blog\/2009\/03\/10\/performance-impact-of-css-selectors\/\">Steve Souders<\/a> e di <a href=\"http:\/\/benfrain.com\/css-performance-revisited-selectors-bloat-expensive-styles\/\">Ben Frain<\/a>, hanno concluso che la performance comparativa di diversi tipi di selettore CSS \u00e8 insignificante. In effetti, Frain conclude che \u201cimpazzire sui selettori usati nei browser moderni \u00e8 futile\u201d. Non ho ancora letto alcuna prova convincente per smentire questi risultati.<\/p>\n<p>Secondo Frain \u00e8 al contrario, la quantit\u00e0 di selettori CSS, il bloat, che pu\u00f2 causare problemi: egli cita nello specifico le dichiarazioni non utilizzate. In altre parole, adottare i selettori di class per la loro \u201cvelocit\u00e0\u201d \u00e8 di poca utilit\u00e0 quando la loro proliferazione \u00e8 in realt\u00e0 la causa dei reali problemi di performance. Beh, quello e i JPEG giganti e i web font di cui non sono stati selezionati solo alcuni sottoinsiemi.<\/p>\n<p>Al contrario, il controllo simultaneo da parte del selettore * di pi\u00f9 elementi accresce la brevit\u00e0, aiutando a ridurre la dimensione del file e a migliorare la performance.<\/p>\n<p>Il <em>vero<\/em> problema con il selettore universale \u00e8 che da solo non rappresenta un assioma molto convincente, nulla di pi\u00f9 intelligente di \u201cassegna uno stile a qualsiasi cosa\u201d. Il trucco sta nell&#8217;imbrigliare questo selettore di base e formare espressioni pi\u00f9 complesse che siano consapevoli del contesto.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Distribuire i margini<\/h2>\n<p>Il problema del confinare gli stili agli oggetti \u00e8 che non tutto dovrebbe essere considerato come propriet\u00e0 di un oggetto <em>di per s\u00e9<\/em>. Prendiamo in considerazione i margini. Questi sono un qualcosa che esiste tra gli elementi. Assegnare semplicemente un margin top ad un elemento non ha senso, indipendentemente dalla frequenza con cui lo fate. \u00c8 come applicare la colla a un lato di un oggetto prima di aver determinato se volete che davvero si appiccichi a qualcosa o che cosa sar\u00e0 quel qualcosa.<\/p>\n<pre><code>.module-new {\n\tmargin-bottom: 3em; \/* what, all the time? *\/\n}<\/code><\/pre>\n<p>Ci\u00f2 di cui abbiamo bisogno \u00e8 un&#8217;espressione (un selettore) che colleghi solo gli elementi a cui serve un margin, ossia, solo gli elementi in relazione contestuale con altri elementi di pari livello (sibling elements). L&#8217;<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/Adjacent_sibling_selectors\">adjacent sibling combinator<\/a> fa proprio questo: usando la forma x + n, possiamo aggiungere un margin top a qualunque n che sia preceduto da x.<\/p>\n<p>Questo diventerebbe verboso molto rapidamente, come con lo styling prescrittivo standard, se dovessimo creare regole per ogni singolo elemento che si accoppia all&#8217;interno dell&#8217;interfaccia. Pertanto, adottiamo il sopracitato selettore universale, creando le nostre facce da gufo. L&#8217;assioma \u00e8 il seguente: \u201cTutti gli elementi nel flusso del documento che precedono altri elementi devono ricevere un margin top di una linea.\u201d<\/p>\n<pre><code>* + * {\n\tmargin-top: 1.5em;\n}<\/code><\/pre>\n<h3>Completezza<\/h3>\n<p>Supponendo che il <var>font-size<\/var> dei paragrafi sia 1 <code>em<\/code> e la sua <var>line-height<\/var> sia 1.5, impostiamo semplicemente un margine di una riga tra tutti gli elementi successivi nel flusso, di qualunque tipo siano e in qualunque ordine. N\u00e9 noi sviluppatori n\u00e9 le persone che creeranno il contenuto per il progetto dovranno preoccuparsi di dimenticare un qualsiasi elemento e di non adottare almeno un margine standard quando verranno visualizzati uno dopo l&#8217;altro. Per ottenere questo nel modo prescrittivo, dovremmo anticipare specifici elementi e dare loro valori individuali per il margin. Noioso, verboso e soggetto ad incompletezza.<\/p>\n<p>Invece di scrivere stili, abbiamo creato un assioma di stile: un principio generale per il layout del flow content. Si pu\u00f2 inoltre mantenere molto bene: se si cambia la <var>line-height<\/var>, basta cambiare semplicemente un singolo valore di <var>margin-top<\/var> per abbinarlo.<\/p>\n<h3>Consapevolezza del contesto<\/h3>\n<p>Comunque, \u00e8 meglio di cos\u00ec. Applicando solo il margin tra gli elementi, non generiamo altro margin ridondante (colla esposta) destinato a combinarsi con il padding degli elementi padre. Confrontate la soluzione (a), che aggiunge un margin top a tutti gli elementi, con la soluzione (b), che usa l&#8217;owl selector.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/01\/owl_1.png\" border=\"0\" alt=\"Diagramma che mostra gli elementi con i margini, con e senza l'owl selector.\" width=\"100%\" \/><\/p>\n<p>I diagrammi nella colonna di sinistra mostrano il margin in grigio scuro e i padding in grigio chiaro.<\/p>\n<\/div>\n<p>Ora, considerate come questo si comporta nei confronti dell&#8217;annidamento. Come mostrato, usando il selettore gufo e il solo valore di margin-top, nessun primo o ultimo elemento di un insieme presenter\u00e0 mai un margine ridondante. Ogni volta che si crea un sottoinsieme di questi elementi, inserendoli in un genitore annidato, si applicheranno al sottoinsieme le stesse regole del super-insieme. Nessun margin, indipendentemente dal livello di annidamento, incontrer\u00e0 mai il padding. Con una specie di eleganza algoritmica, ci proteggiamo dal &#8220;compound whitespace&#8221; in tutta la nostra interfaccia.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/01\/owl_2.png\" border=\"0\" alt=\"Diagramma che mostra gli elementi annidati con i margini usando l'owl selector.\" width=\"100%\" \/><\/div>\n<p>Questo \u00e8 considerevolmente meno verboso e pi\u00f9 robusto dell&#8217;approcciare il problema senza gli assiomi e rimuovendo la colla rimasta <em>dopo il fatto<\/em>, come ha proposto Chris Coyier in maniera riluttante in \u201c<a href=\"http:\/\/css-tricks.com\/spacing-the-bottom-of-modules\/\">Spacing The Bottom of Modules<\/a>\u201d. Devo sottolineare che \u00e8 stato questo articolo che ha contribuito a farmi elaborare l&#8217;idea del gufo lobotomizzato.<\/p>\n<pre><code>.module &gt; *:last-child,\n.module &gt; *:last-child &gt; *:last-child,\n.module &gt; *:last-child &gt; *:last-child &gt; *:last-child {\n\tmargin: 0;\n}<\/code><\/pre>\n<p>Notate che questo funziona solo se si \u00e8 definito un contesto di  \u201cmodule\u201d (una grande richiesta da parte di un content editor) e richiede la stima dei possibili livelli di annidamento: in questo caso ne supporta tre.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Design exception-driven<\/h2>\n<p>Finora, non abbiamo dato nomi ad alcun elemento, abbiamo semplicemente scritto una regola. Adesso possiamo trarre vantaggio dalla <a href=\"http:\/\/css-tricks.com\/specifics-on-css-specificity\/\">bassa specificit\u00e0<\/a> del selettore gufo e cominciare a costruire delle espressioni in maniera giudiziosa, sfruttando il cascade piuttosto che condannarlo come fanno altri metodi.<\/p>\n<h3>Paragrafi giustificati in stile libro<\/h3>\n<pre><code>p {\n\ttext-align: justify;\n}\n\np + p {\nmargin-top: 0;\ntext-indent: 2em;\n}<\/code><\/pre>\n<p>Notate che vengono indentati solo i paragrafi successivi, come da convenzione. Un&#8217;altra vittoria per l&#8217;adjacent sibling combinator.<\/p>\n<h3>Moduli compatti<\/h3>\n<pre><code>.compact * + * {\n\tmargin-top: 0.75em;\n}<\/code><\/pre>\n<p>Potete utilizzare un pochino di orientamento agli oggetti basato sui nomi delle classi se volete, per creare uno stile riutilizzabile per moduli pi\u00f9 compatti. In questo esempio, tutti gli elementi che hanno bisogno di un margine lo ricevono solo di met\u00e0 riga.<\/p>\n<h3>Widget con il posizionamento<\/h3>\n<pre><code>.margins-off &gt; * {\n\tmargin-top: 0;\n}<\/code><\/pre>\n<p>L&#8217;owl selector \u00e8 un selettore significativo e influenzer\u00e0 widget come le mappe, in cui tutto \u00e8 posizionato esattamente. Questo \u00e8 un semplice interruttore di spegnimento. Sempre pi\u00f9 spesso, widget di questo tipo occorreranno come web component in cui il nostro algoritmo per il margin non verr\u00e0 comunque ereditato. Questo grazie alla <a href=\"http:\/\/www.html5rocks.com\/en\/tutorials\/webcomponents\/shadowdom-201\/\">feature di incapsulamento dello stile di Shadow DOM<\/a>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>La bellezza degli <code>em<\/code><\/h2>\n<p>Sebbene alcune eccezioni siano inevitabili, imbrigliando l&#8217;unit\u00e0 <code>em<\/code> nel nostro valore di margin, i margini si sistemano gi\u00e0 automaticamente in base a un&#8217;altra propriet\u00e0: <var>font-size<\/var>. In qualunque istanza in cui cambiamo il <var>font-size<\/var>, il margin si adatter\u00e0 ad esso: gli spazi di una riga rimarranno spazi di una riga. Questo \u00e8 particolarmente di aiuto quando si imposta un <var>font-size<\/var> aumentato o ridotto al body con una <code>@media<\/code> query.<\/p>\n<p>Nel caso degli heading, abbiamo ancora pi\u00f9 fortuna. Avendo impostato le dimensioni del testo dei titoli in <code>em<\/code> nel foglio di stile, \u00e8 stato impostato un margine appropriato (leading whitespace) per ciascun heading senza che dovessimo scrivere una singola riga di codice in pi\u00f9.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/01\/owl_3.png\" border=\"0\" alt=\"Diagramma che mostra i margini aggiustati automaticamente basandosi sul font-size.\" width=\"100%\" \/><\/div>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Phrasing element<\/h2>\n<p>Questa dichiarazione di stile \u00e8 destinata ad essere ereditata. \u00c8 il modo in cui essa, e CSS in generale, devono funzionare. Tuttavia, apprezzo che qualcuno si sentir\u00e0 a disagio con la voracit\u00e0 di questo selettore, specialmente dopo che si \u00e8 stati abituati ad evitare l&#8217;ereditariet\u00e0 ogni volta che si pu\u00f2.<\/p>\n<p>Ho gi\u00e0 coperto alcune eccezioni che potrete usare, ma, se vi \u00e8 di ulteriore aiuto, ricordatevi che i phrasing element con un tipico valore di display <code>inline<\/code> erediteranno il top margin ma in termini di layout non ne saranno influenzati. Gli elementi inline rispettano solo i margini orizzontali, che \u00e8 il comportamento specificato e standard in tutti i browser.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/01\/owl_4.png\" border=\"0\" alt=\"Diagramma che mostra gli elementi inline con margin.\" width=\"100%\" \/><\/div>\n<p>Se vi trovate a dover sovrascrivere il selettore gufo frequentemente, ci potrebbero essere dei problemi sistemici pi\u00f9 profondi con il design. L&#8217;owl selector gestisce il flow content e il flow content dovrebbe costituire la maggior parte del vostro contenuto. Non suggerisco di dipendere pesantemente dal contenuto posizionato nella maggior parte delle interfacce perch\u00e9 questo rompe le relazioni implicite di flusso. Anche i grid system, con le loro colonne a cui \u00e8 applicato float, dovrebbero richiedere non pi\u00f9 di un semplice selettore <code>.row &gt; *<\/code> che applica <code>margin-top: 0<\/code> per resettarle.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"https:\/\/alistapart.com\/wp-content\/uploads\/2014\/10\/owl_5.png\" border=\"0\" alt=\"Diagramma che mostra le colonne con float con i margini.\" width=\"100%\" \/><\/div>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Conclusioni<\/h2>\n<p>Non sono per nulla un bravo matematico, ma mi piacciono moltissimo i <a href=\"http:\/\/en.wikipedia.org\/wiki\/Euclidean_geometry#Axioms\">postulati di Euclide<\/a>: un insieme di regole irriducibili, o assiomi, che formano la base di geometrie complesse e bellissime. Grazie ad Euclide, comprendo che anche i sistemi pi\u00f9 complessi devono dipendere da regole fondamentali e CSS non fa eccezione. Sebbene la modularizzazione di un&#8217;interfaccia complessa sia un passo necessario nella sua maturazione, qualunque interfaccia che non segue principi basilari mancher\u00e0 di chiarezza.<\/p>\n<p>L&#8217;owl selector vi permette di controllare il flow content ma \u00e8 anche un modo per abbandonare il controllo. Dando stile agli elementi a seconda del contesto e delle circostanze, accettiamo che la struttura del contenuto \u00e8 &#8211; e dovrebbe essere &#8211; mutevole. Invece di prescrivere l&#8217;aspetto di singoli item, costruiamo sistemi che li anticipano. Invece di prescrivere l&#8217;aspetto dell&#8217;interfaccia come un tutto, lasciamo che sia il contenuto a determinarlo. Ridiamo il controllo alle persone che dovrebbero crearlo.<\/p>\n<p>Quando disattiviamo CSS per un&#8217;intera pagina web, dovremmo notare due cose. Primo, la pagina \u00e8 risolutamente flessibile: il contenuto sta nella viewport indipendentemente dalle sue dimensioni. Secondo, supponendo che abbiate scritto markup standard e accessibile, \u00e8 attraversabile. Gli stili dello user agent del browser si prendono cura anche di questo.<\/p>\n<p>I nostri sforzi per rivendicare e migliorare l&#8217;innata indipendenza dei device offerta dagli user agents sono continui. \u00c8 ora che cominciamo anche a ripristinare l&#8217;indipendenza del contenuto.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Gestire il flow content pu\u00f2 diventare macchinoso: troppi selettori di class possono far venire un mal di testa da specificity, gli stili annidati possono diventare ridondanti e i creatori del contenuto non sono sempre in grado di capire il markup presentational. Heydon Pickering offre un&#8217;opzione inaspettata per gestire gli stili a cascata in maniera pi\u00f9 efficiente: una variazione del selettore universale.<\/p>\n","protected":false},"author":818,"featured_media":7000752,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,123],"tags":[],"coauthors":[452],"class_list":["post-513","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-html","category-numero-106-20-gennaio-2015"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000752"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=513"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}