CINXE.COM
HTML Courses on Treehouse
<!DOCTYPE html> <html lang="en" class="application-layout library-search library-controller search-action visitor ie7 ie lt-ie11 lt-ie10 lt-ie9 lt-ie8 windows" id="layout" data-featurette="application-layout" > <head> <title>HTML Courses on Treehouse</title> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"d98036d1cc","applicationID":"1824378","transactionName":"cQ5eRRQNCQ8BFhZUXlATUUMfTRYGBRZaUA==","queueTime":0,"applicationTime":236,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:[]}};(window.NREUM||(NREUM={})).loader_config={xpid:"VwIBVldWGwIIVlVRAAk=",licenseKey:"d98036d1cc",applicationID:"1824378"};;/*! For license information please see nr-loader-full-1.283.1.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>p,xN:()=>g});var n=r(3333);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={feature_flags:[],experimental:{marks:!1,measures:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{get capture_marks(){return e.feature_flags.includes(n.$v.MARKS)||e.experimental.marks},set capture_marks(t){e.experimental.marks=t},get capture_measures(){return e.feature_flags.includes(n.$v.MEASURES)||e.experimental.measures},set capture_measures(t){e.experimental.measures=t},capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(n.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},spa:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function g(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function p(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0,harvester:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.283.1",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>u,RI:()=>i,WN:()=>f,bv:()=>o,gm:()=>a,lR:()=>l,m:()=>c,mw:()=>s,sb:()=>d});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,u=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),d=u&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:g,addEventListener:g,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=p(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var g=v()[s[e]];g&&g.push([f,e,r,a]);return a},get:m,listeners:p,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function g(e,t){n[e]=p(e).concat(t)}function p(e){return n[e]||[]}function m(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>u});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function u(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,u="addEventListener",d="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[u,d],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),c&&h(c.prototype,f),h(a.gm,f)),t.on(u+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(d+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,u);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9414:(e,t,r)=>{"use strict";r.d(t,{J:()=>c});var n=r(7836),i=r(2646),o=r(944),a=r(3434);const s=new Map;function c(e,t,r,c){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,o.R)(29);const u=function(e){return(e||n.ee).get("logger")}(e),d=(0,a.YM)(u),l=new i.y(n.P);l.level=c.level,l.customAttributes=c.customAttributes;const f=t[r]?.[a.Jt]||t[r];return s.set(f,l),d.inPlace(t,[r],"wrap-logger-",(()=>s.get(f))),u}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{$v:()=>u,TZ:()=>n,Zp:()=>i,kd:()=>c,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3,c=["PageAction","UserAction","BrowserPerformance"],u={MARKS:"experimental.marks",MEASURES:"experimental.measures",RESOURCES:"experimental.resources"}},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>o,ET:()=>a,TZ:()=>s,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},a="log",s=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>u});var n=r(9908),i=r(1863),o=r(860),a=r(8154),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function u(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},8154:(e,t,r)=>{"use strict";r.d(t,{z_:()=>o,XG:()=>s,TZ:()=>n,rs:()=>i,xV:()=>a});r(6154),r(9566),r(384);const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>d,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>u,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},u={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},d=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>u,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function u(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>u,Rz:()=>d,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState",l=1e3},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},8969:(e,t,r)=>{"use strict";r.d(t,{j:()=>N});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(8154),h=r(384),g=r(6344);const p=["setErrorHandler","finished","addToTrace","addRelease","recordCustomEvent","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",g.G4.RECORD,g.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),R=r(3785),x=r(9414);function w(){const e=(0,h.pV)();p.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var A=r(9417),T=r(5603),_=r(5284);const S=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function N(e,t={},p,N){let{init:I,info:P,loader_config:j,runtime:C={},exposed:k=!0}=t;C.loaderType=p;const H=(0,h.pV)();P||(I=H.init,P=H.info,j=H.loader_config),(0,A.xN)(e.agentIdentifier,I||{}),(0,T.a)(e.agentIdentifier,j||{}),P.jsAttributes??={},d.bv&&(P.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,P);const D=(0,A.D0)(e.agentIdentifier),L=[P.beacon,P.errorBeacon];O||(D.proxy.assets&&(S(D.proxy.assets),L.push(D.proxy.assets)),D.proxy.beacon&&L.push(D.proxy.beacon),w(),(0,h.US)("activatedFeatures",_.B),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),C.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?L:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const p={};var w=s.ee.get(e),A=w.get("tracer");E[e]=b.g.OFF,w.on(g.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var T="api-",_=T+"ixn-";function S(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(T,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}p.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),(0,R.R)(w,e,t,r)},p.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),(0,x.J)(w,e,t,{customAttributes:r,level:i})},m.forEach((e=>{p[e]=I(T,e,!0,"api")})),p.addPageAction=I(T,"addPageAction",!0,n.K7.genericEvents),p.recordCustomEvent=I(T,"recordCustomEvent",!0,n.K7.genericEvents),p.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(T,"setPageViewName",!0)()},p.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return S(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},p.setUserId=function(e){if("string"==typeof e||null===e)return S("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},p.setApplicationVersion=function(e){if("string"==typeof e||null===e)return S("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},p.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},p[g.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(g.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},p[g.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(g.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},p.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const N=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),h||(0,a.p)(_+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[r?(0,v.t)():performance.now(),...arguments],r?null:this,i,w),r?void 0:this}}function P(){r.e(891).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{N[e]=I(_,e,void 0,h?n.K7.softNav:n.K7.spa)})),p.setCurrentRouteName=h?I(_,"routeName",void 0,n.K7.softNav):I(T,"routeName",!0,n.K7.spa),p.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>P()),!0):P(),p}(e.agentIdentifier,N,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>u,K7:()=>s,P3:()=>c,XX:()=>i,qY:()=>n,v4:()=>a});const n="events",i="jserrors",o="browser/blobs",a="rum",s={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},c={[s.pageViewEvent]:1,[s.pageViewTiming]:2,[s.metrics]:3,[s.jserrors]:4,[s.spa]:5,[s.ajax]:6,[s.sessionTrace]:7,[s.softNav]:8,[s.sessionReplay]:9,[s.logging]:10,[s.genericEvents]:11},u={[s.pageViewEvent]:a,[s.pageViewTiming]:n,[s.ajax]:n,[s.spa]:n,[s.softNav]:n,[s.metrics]:i,[s.jserrors]:i,[s.sessionTrace]:o,[s.sessionReplay]:o,[s.logging]:"browser/logs",[s.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({95:"nr-full-compressor",222:"nr-full-recorder",891:"nr-full"}[e]+"-1.283.1.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.283.1.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={891:"sha512-lVqR3Dn6J8gNv/qx6uwv/BkHGfYTjmgUmpQ1g3KewUs/BAlEgDNEjtqisiOvM7gJNOH5b/lDr/gXrctX/6uhmg==",222:"sha512-r7JndTDmcqZc7soxM3YtJog64BIblVU4Ez8/mfluyz/KDQOnr3V1KGyop/fFGfRcLFLVYt0pv5PyUwCyC+FbVQ==",95:"sha512-kzPPmh2eRI84JbwNgf72DNQY/HX6glcZEu/X7P6FfEBXL9+sv1l63r5rK0u+QlS2I9OQrnLM5nmwqyfJCpNVHA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={85:0,959:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.283.1.PROD"]=self["webpackChunk:NRBA-1.283.1.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(){this.agentIdentifier=(0,r.LA)(16)}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}recordCustomEvent(e,t){return this.#e("recordCustomEvent",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(8969);var l=i(1687),f=i(4234),h=i(5289),g=i(6154),p=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(891).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(891).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),t.runtime.harvester.initializedAggregates.push(this.featAggregate),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};g.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,p.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class R extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var x=i(384);var w=i(9908),E=i(2843),A=i(3878),T=i(782),_=i(1863);class S extends b{static featureName=T.T;constructor(e,t=!0){super(e,T.T,t),g.RI&&((0,E.u)((()=>(0,w.p)("docHidden",[(0,_.t)()],void 0,T.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,w.p)("winPagehide",[(0,_.t)()],void 0,T.T,this.ee))),this.importAggregator(e))}}var O=i(8154);class N extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),P=i(3304);class j{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,P.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return D(e)?e:new j(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(D(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function H(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new j(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return D(e.error)?e.error:C(e)}function D(e){return e instanceof Error&&!!e.stack}class L extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",((e,t)=>{this.abortHandler&&(0,w.p)("ierr",[C(e),(0,_.t)(),!0,{},this.#r,t],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),g.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,w.p)("err",[k(e),(0,_.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",(e=>{this.abortHandler&&(0,w.p)("err",[H(e),(0,_.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var M=i(8990);let K=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,M.I)(e,U,(function(){return K++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,P.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,s=g.gm.Promise,c=g.gm.setInterval,u="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=g.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(u,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,d,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(p?p.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var p=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===u||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",J=["arrayBuffer","blob","json","text","formData"],Q=g.gm.Request,ee=g.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(Q&&ee&&g.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,J.forEach((e=>{r(Q[te],e,X),r(ee[te],e,X)})),r(g.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,P.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),ue=["load","error","abort","timeout"],de=ue.length,le=(0,x.dV)().o.REQ,fe=(0,x.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,w.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};ge(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=x,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){E(t,e)}),(0,A.jT)(!1)),g.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},ge(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<de;s++)r.addEventListener(ue[s],this.listener,(0,A.jT)(!1))}function u(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function d(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,_.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function p(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:g.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),ge(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function R(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,_.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function x(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<de;t++)e.removeEventListener(ue[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,_.t)()-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):E(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function E(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,w.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",u),t.on("xhr-load-added",d),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",p),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",R)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function ge(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const pe={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!g.RI||pe[t.debugId]++||(pe[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:Re,d3:xe,Kp:we,TZ:Ee,Lc:Ae,uP:Te,Rz:_e}=be;class Se extends b{static featureName=Ee;constructor(e,t=!0){super(e,Ee,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Te,(function(e,t){this.bstStart=(0,_.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,w.p)("bst",[e[0],t,this.bstStart,(0,_.t)()],void 0,a.K7.sessionTrace,r)})),r.on(_e+xe,(function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash})),r.on(_e+we,(function(e){(0,w.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,w.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:Re,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class Ne extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,p.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,w.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,p.Aw)(this.agentIdentifier)}#u=!1;async#c(e){if(!this.#u){this.#u=!0;try{const{Recorder:t}=await Promise.all([i.e(891),i.e(222)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee,agentRef:this.#o}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3333);class Pe extends b{static featureName=Ie.TZ;constructor(e,t=!0){super(e,Ie.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled,e.init.performance.resources.enabled];if(g.RI&&(e.init.user_actions.enabled&&(Ie.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),Ie.qN.forEach((e=>{const t=(0,v.s)((e=>{(0,w.p)("ua",[e],void 0,this.featureName,this.ee)}),500,{leading:!0});(0,A.sp)(e,t)}))),e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource"))){new PerformanceObserver((e=>{e.getEntries().forEach((e=>{(0,w.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)}))})).observe({type:"resource",buffered:!0})}r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var je=i(993),Ce=i(3785),ke=i(9414);class He extends b{static featureName=je.TZ;constructor(e,t=!0){super(e,je.TZ,t);const r=this.ee;(0,ke.J)(r,g.gm.console,"log",{level:"info"}),(0,ke.J)(r,g.gm.console,"error",{level:"error"}),(0,ke.J)(r,g.gm.console,"warn",{level:"warn"}),(0,ke.J)(r,g.gm.console,"info",{level:"info"}),(0,ke.J)(r,g.gm.console,"debug",{level:"debug"}),(0,ke.J)(r,g.gm.console,"trace",{level:"trace"}),this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,Ce.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t){super(),g.gm?(this.features={},(0,x.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,x.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,S,Se,Ne,he,N,L,Pe,He],loaderType:"pro"})})()})();</script> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes" /> <meta name="google-site-verification" content="4Ga-viQvIZUFNQXu323xpp_24RDlLooxwlpnXhinjPA" /> <meta name="msvalidate.01" content="F0716E70B7DD3B8C892B48891CA4B541" /> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="NBwLcMwI0hS/3dyB8p/RyKKq2pJLYVpfBhJ24+Uc+tCxUxPCvqi++cENglx1QuRlY6batcq67t7K4imGs+z8Mw==" /> <meta name="description" content="Welcome to the HTML library. Learn everything you need to know about HTML. Get HTML courses, guides, and certifications." /> <meta name="image" content="https://ecs-static.teamtreehouse.com/assets/logo-232a207b24bcb8ab1fba7c1d85467f71d7b2d010d427c859987ed641706f45d9.png" /> <meta name="twitter:site" content="@treehouse" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:description" content="Welcome to the HTML library. Learn everything you need to know about HTML. Get HTML courses, guides, and certifications." /> <meta name="twitter:image" content="https://ecs-static.teamtreehouse.com/assets/marketing/opengraph/logo_twitter-cd0ecb90408499f45a2191805f54362981da5a69ddcfaa6ec93556d64e289036.png" /> <meta property="fb:app_id" content="1447543992198627" /> <meta property="og:site_name" content="Treehouse" /> <meta property="og:description" content="Welcome to the HTML library. Learn everything you need to know about HTML. Get HTML courses, guides, and certifications." /> <meta property="og:image" content="https://ecs-static.teamtreehouse.com/assets/marketing/opengraph/logo_facebook-5a7642409483233360d948ca4dd6840de0a6083475af4b047d452b77b00ca68a.png" /> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/vendor-f4a70e398d62c1b7bd00ff33f21e74e92066e660584b86e57d54a9b252314e57.css" as="style" type="text/css" crossorigin="anonymous" integrity="true"> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/application-3fe4d64fadf4ca4d0459873312d66d0c10d2159ffc37a68b02020c15e1167db5.css" as="style" type="text/css" crossorigin="anonymous" integrity="true"> <link rel="stylesheet" media="all" href="https://ecs-static.teamtreehouse.com/assets/vendor-f4a70e398d62c1b7bd00ff33f21e74e92066e660584b86e57d54a9b252314e57.css" crossorigin="true" integrity="sha256-9KcOOY1iwbe9AP8z8h506SBm5mBYS4blfVSpslIxTlc=" /> <link rel="stylesheet" media="all" href="https://ecs-static.teamtreehouse.com/assets/application-3fe4d64fadf4ca4d0459873312d66d0c10d2159ffc37a68b02020c15e1167db5.css" crossorigin="true" integrity="sha256-P+TWT630yk0EWYczEtZtDBDSFZ/8N6aLAgIMFeEWfbU=" /> <link rel="preconnect" href="https://cdn.fonts.net"> <link rel="preload" onload="this.rel='stylesheet'" as="style" href="https://cdn.fonts.net/kit/39d0ab8f-c2d6-48ee-8a04-732fec352d95/39d0ab8f-c2d6-48ee-8a04-732fec352d95.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.css"/> <style media="print"> header, footer, .graph, .nav, svg { display: none } </style> <link rel="shortcut icon" href="/assets/favicon-pride.png" /> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-60x60-precomposed-05be36fef4d37c9642a8923eb00325c9d680150d26954e868ddded6b7976a032.png" /> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-76x76-precomposed-7283cd247847d1f21be0e79c52e3524c89adabf69cfc331046319f4ab19be058.png" /> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-120x120-precomposed-dda60d87f49aa928ff86379bb50d9514d4b5f19502ff562b453e3d254730f682.png" /> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://ecs-static.teamtreehouse.com/assets/apple-touch-icon-152x152-precomposed-1f486d33d1fe181adce0689d370d7dab9e777fab99b244e15b8c785239410674.png" /> <link href="https://teamtreehouse.com/library/topic:html" rel="canonical" /> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/application_vendor-190e58c76a02c6db7ade130f3dd31bde5c398709b1af3261fd56a768836c437c.js" as="script" type="text/javascript" crossorigin="anonymous"> <link rel="preload" href="https://ecs-static.teamtreehouse.com/assets/application-35a8d45d797f31fa96a9e8c1bf74532a40290afe0afe98b7cc63ee27379c151b.js" as="script" type="text/javascript" crossorigin="anonymous"> <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> <link rel="dns-prefetch" href="https://www.googletagmanager.com"> <link rel="preconnect" href="https://www.google-analytics.com" crossorigin> <link rel="dns-prefetch" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://www.google.com/recaptcha/api.js" crossorigin> <link rel="dns-prefetch" href="https://www.google.com/recaptcha/api.js"> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script src="https://cdn.usefathom.com/script.js" data-site="JATZEBKX" defer></script> <script>(function(w,r){w._rwq=r;w[r]=w[r]||function(){(w[r].q=w[r].q||[]).push(arguments)}})(window,"rewardful");</script> <script async src="https://affiliates.teamtreehouse.com/rw.js" data-rewardful="5ba892"></script> </head> <body class="windows ie7 ie lt-ie11 lt-ie10 lt-ie9 lt-ie8 navbar-announcement-padding"> <!-- Data Layer --> <script> window.dataLayer = window.dataLayer || []; dataLayer.push({"loggedIn":false,"visitorId":8980945128,"userId":null}); </script> <!-- Google Tag Manager --> <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PZ55S7" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl+'';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PZ55S7');</script> <!-- End Google Tag Manager --> <script src="https://ecs-static.teamtreehouse.com/assets/head_vendor-6a3288bb3aef100cad5d3497f90343103ec0f44b56f4ab0a057922302e7e77bb.js" crossorigin="true" integrity="sha256-ajKIuzrvEAytXTSX+QNDED7A9EtW9KsKBXkiMC5+d7s="></script> <script> window.bugsnagClient = bugsnag({ apiKey: "8251a8eb6422d59eaf410e7c1b1c7b38", releaseStage: "production", beforeSend: function (report) { if (window.location.hostname != "teamtreehouse.com") { report.ignore(); } } }); </script> <link rel="preconnect" href="https://optanon.blob.core.windows.net" crossorigin> <link rel="dns-prefetch" href="https://optanon.blob.core.windows.net"> <script async src="https://cdn.cookielaw.org/consent/39d1ae64-085b-42e6-a239-a988d6530b80.js"></script> <script> function OptanonWrapper() { window.dataLayer.push({ event: "OneTrustGroupsUpdated" }) } </script> <script> //<![CDATA[ window.appData = '{\"controller_name\":\"library\",\"action_name\":\"search\",\"app_version\":\"cea27f26d8610df8967f406f622b5f1f54af0233\"}' //]]> </script> <section class="nav-announcement" data-featurette="nav-announcement-banner" style="background-color:#ab20fd !important;"> <div class="swiper nav-announcement-slider"> <div class="swiper-wrapper"> <div class="swiper-slide" data-bg-color="#ab20fd" data-desktop-message="🤑 Join the <a style="text-decoration: underline !important" href="https://join.teamtreehouse.com/affiliates/">Treehouse affiliate program</a> and earn 25% commission!" data-mobile-message="🤑 Join the <a style="text-decoration: underline !important" href="https://join.teamtreehouse.com/affiliates/">Treehouse affiliate program</a> and earn 25% commission!" > <p class="announcement-message grabbable" style="color:#FFFFFF !important;"> 🤑 Join the <a href="https://join.teamtreehouse.com/affiliates/">Treehouse affiliate program</a> and earn 25% commission! </p> </div> <div class="swiper-slide" data-bg-color="#02b6b9" data-desktop-message="✨ No-code curious? Check out 4 new <a style="text-decoration: underline !important" href="/library/topic:no-code"> FREE Adalo courses</a> and start building an app in minutes — no code required!" data-mobile-message="✨ No-code curious? Check out 4 new <a style="text-decoration: underline !important" href="/library/topic:no-code"> FREE Adalo courses</a> and start building an app in minutes — no code required!" > <p class="announcement-message grabbable" style="color:#ffffff !important;"> ✨ No-code curious? Check out 4 new <a href="/library/topic:no-code"> FREE Adalo courses</a> and start building an app in minutes — no code required! </p> </div> <div class="swiper-slide" data-bg-color="#5fcf80" data-desktop-message="🌟 Dreaming of a bright future? 🎓 <a style="text-decoration: underline !important;" href="mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry">Ask about the Treehouse Scholarship program!</a> 🚀 " data-mobile-message="🌟 Dreaming of a bright future? 🎓 <a style="text-decoration: underline !important;" href="mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry">Ask about the Treehouse Scholarship program!</a> 🚀 " > <p class="announcement-message grabbable" style="color:#ffffff !important;"> 🌟 Dreaming of a bright future? 🎓 <a href="mailto:help@teamtreehouse.com?subject=Treehouse%20Scholarship%20Inquiry">Ask about the Treehouse Scholarship program!</a> 🚀 </p> </div> </div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> </section> <nav class="nav navbar-announcement-margin" data-layout-element="navigation" data-header > <div class="nav-container"> <button class="hamburger-button " aria-label="Navigation Menu" data-hamburger-button> <span class="hamburger"></span> </button> <ul class="nav-list"> <li class="nav-item nav-item-logo"> <h6 class="nav-item-logo-container"><a title="" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse Logo" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Treehouse Logo" data-analytics-path="https://teamtreehouse.com/" data-analytics-action="clicked" class="nav-link nav-link-logo" href="https://teamtreehouse.com/"><svg alt="" class="treehouse-icon nav-item-logo-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 139 32" aria-labelledby="treehouseLogo7467103" role="img"> <title id="treehouseLogo7467103">Treehouse Logo</title> <path class="icon-treehouse" d="M42.8 21.1c-0.4 0.1-0.9 0.2-1.4 0.2 -1 0-1.4-0.6-1.4-1.6v-4.5h2.8c0.7 0 1.4-0.5 1.4-1.3s-0.6-1.3-1.4-1.3H40v-1.5c0-0.9-0.7-1.5-1.5-1.5S37 10.3 37 11.1v8.7c0 2.5 1.2 4.3 4 4.3 0.8 0 1.9-0.1 2.7-0.5 0.7-0.3 0.9-0.8 0.9-1.3C44.6 21.6 43.9 20.9 42.8 21.1zM52.8 12.2c-0.4-0.1-1.2-0.2-1.9-0.2 -2.5 0-3.9 1.5-3.9 3.8v6.8c0 0.8 0.7 1.5 1.5 1.5s1.5-0.7 1.5-1.5v-6.2c0-1 0.4-1.4 1.1-1.4s1.1 0.2 1.7 0.2c0.9 0 1.4-0.8 1.4-1.4C54.1 13 53.7 12.5 52.8 12.2zM61.1 12c-2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3h5.7c1 0 1.5-0.6 1.5-1.5v-0.5C66 14 64 12 61.1 12zM63 17.1h-4.2c0-1.5 0.7-2.5 2.3-2.5 1.4 0 2.2 0.9 2.1 2.2C63.2 17 63.2 17.1 63 17.1zM73.1 12c-2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3h5.7c1 0 1.5-0.6 1.5-1.5v-0.5C78 14 76 12 73.1 12zM75 17.1h-4.2c0-1.5 0.7-2.5 2.3-2.5 1.4 0 2.2 0.9 2.1 2.2C75.2 17 75.2 17.1 75 17.1zM123.6 17l-1.6-0.4c-1-0.2-1.3-0.5-1.3-1s0.5-0.9 1.6-0.9c0.6 0 1.3 0.2 1.9 0.5 0.7 0.4 1.5 0.3 1.9-0.2 0.5-0.5 0.5-1.4-0.1-2 -0.8-0.6-2.2-1-3.6-1 -2.6 0-4.5 1.3-4.5 3.7 0 1.9 1.4 2.9 3.2 3.4 0.9 0.2 0.8 0.2 1.6 0.4 0.9 0.2 1.3 0.6 1.3 1 0 0.6-0.5 1-1.7 1 -1 0-1.9-0.3-2.6-0.7 -0.7-0.5-1.5-0.3-1.9 0.3 -0.4 0.6-0.3 1.4 0.3 1.8 0.8 0.7 2.1 1.3 4.2 1.3 2.6 0 4.6-1.4 4.6-3.8C126.9 18.6 125.8 17.5 123.6 17zM137.5 19.1c1 0 1.5-0.6 1.5-1.5l0 0v-0.5c0-3.1-2-5.1-4.9-5.1 -2.8 0-4.8 1.8-5.1 4.7 0 0.7-0.1 1.9 0 2.8 0.2 2.8 2.2 4.7 5.2 4.7 1.4 0 2.7-0.3 3.5-0.8 0.6-0.4 0.7-0.8 0.7-1.2 0-0.8-0.7-1.6-1.9-1.2 -0.7 0.3-1.5 0.5-2.3 0.5 -1.4 0-2.5-0.7-2.5-2.1v-0.3H137.5zM134.1 14.6c1.4 0 2.2 0.9 2.1 2.2 0 0.2-0.1 0.3-0.2 0.3h-4.2C131.8 15.6 132.6 14.6 134.1 14.6zM97.5 12c-3 0-5.2 1.9-5.5 4.5 -0.1 0.9-0.1 2.3 0 3.2 0.2 2.6 2.5 4.5 5.5 4.5s5.2-1.9 5.4-4.5c0.1-0.9 0.1-2.2 0-3.1C102.7 13.9 100.5 12 97.5 12zM99.9 19.2c-0.1 1.3-1 2.1-2.4 2.1s-2.3-0.9-2.4-2.1c0-0.6 0-1.6 0-2.2 0.1-1.3 1-2.1 2.4-2.1s2.3 0.9 2.4 2.1C100 17.6 100 18.6 99.9 19.2zM85.6 12c-1.1 0-2.3 0.4-2.7 0.9l0 0V9.7c0-0.9-0.6-1.5-1.4-1.5s-1.4 0.7-1.4 1.5v12.9c0 0.8 0.7 1.5 1.5 1.5s1.4-0.7 1.4-1.5v-6.7c0.5-0.5 1.3-0.9 2.3-0.9 1.2 0 1.9 0.7 1.9 2.1v5.5c0 0.9 0.6 1.6 1.4 1.6 0.9 0 1.5-0.7 1.5-1.6v-5.7C90 13.7 88.4 12 85.6 12zM113.6 12.1c-0.8 0-1.5 0.7-1.5 1.5v7.1c-0.5 0.3-1.2 0.6-2.1 0.6 -1.2 0-2.1-0.7-2.1-2.1v-5.6c0-0.9-0.7-1.6-1.5-1.6 -0.9 0-1.4 0.7-1.4 1.6v5.7c0 3.1 1.8 4.8 4.9 4.8 2.3 0 3.9-0.8 4.6-1.3 0.4-0.2 0.5-0.5 0.5-1v-8.2C115 12.8 114.4 12.1 113.6 12.1z"></path><path class="icon-logo" d="M26 5.9c-1.1-0.6-2.8 0.4-3.8 2.2l-1.9 3.2c-0.7 1.3-0.6 2.9 0.3 4.2l0.1 0.1c0.9 1.2 2 2.4 2.4 2.8 0.2 0.2 0.4 0.5 0.5 0.9 0.3 1.1-0.3 2.3-1.5 2.6 -1.1 0.3-2.3-0.3-2.6-1.5 -0.1-0.3-0.1-0.6-0.1-0.8 0.1-0.5-0.1-1.2-0.8-2 -0.7-0.7-2 0.7-2.5 2.1v0.1c-0.4 1.4-0.7 2.7-0.6 2.8 0 0.1 0.1 0.1 0.1 0.2 0.6 1.2 0.2 2.6-1 3.2s-2.6 0.2-3.2-1 -0.2-2.6 1-3.2c0.1 0 0.1-0.1 0.2-0.1s0.3-0.6 0.6-1.4c0.2-0.7 0.3-1 0.4-1.3 0.1-0.4 0.3-1.4 0.2-1.8 -0.1-0.5-0.6-0.5-1.1-0.2 -0.3 0.2-0.9 0.7-1.1 0.9 -0.5 0.4-0.9 1-1.1 1.5 -0.1 0.2-0.3 0.5-0.5 0.7 -0.9 0.7-2.2 0.6-3-0.3 -0.7-0.9-0.6-2.2 0.3-3 0.3-0.2 0.6-0.4 0.9-0.4 0.5-0.1 2.3-1.2 3.4-2 0.2-0.1 0.5-0.4 0.6-0.5 0.3-0.4 0-0.7-0.3-0.7 -0.9 0.1-1.9 0.2-2.1 0.5 -0.1 0.1-0.2 0.3-0.4 0.4 -0.8 0.6-2 0.4-2.6-0.4s-0.4-2 0.4-2.6c0.3-0.3 0.8-0.4 1.1-0.4 0.7 0 2.5 0.4 3.9 0.1l0.4-0.1c1.5-0.3 3.3-1.6 4-2.9 0 0 0.7-1.2 1.5-2.7C19 3.6 18.9 1.9 18 1.4l-1.7-1c-0.9-0.5-2.2-0.5-3.1 0L1.6 7C0.7 7.5 0 8.7 0 9.7v12.8c0 1 0.7 2.2 1.6 2.7l11.6 6.6c0.9 0.5 2.3 0.5 3.1 0l11.6-6.6c0.9-0.5 1.6-1.7 1.6-2.7V9.7c0-1-0.7-2.2-1.6-2.7C27.9 7 27.1 6.5 26 5.9z"></path> </svg></a></h6> </li> <div class="nav-block nav-block-mobile-tablet"> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Plans</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron2318073" role="img"> <title id="chevron2318073">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/plans">For Individuals</a></li> <li><a href="https://teamtreehouse.com/teams">For Businesses</a></li> <li><a href="https://teamtreehouse.com/for/schools">For Schools</a></li> <li><a href="/libraries">For Libraries</a></li> <li><a href="/military">For Military</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Library</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron6763449" role="img"> <title id="chevron6763449">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/library">All Courses</a></li> <li><a href="https://teamtreehouse.com/tracks">Tracks</a></li> <li><a href="https://join.teamtreehouse.com/college-credit">College Credit</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Techdegree</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron9501304" role="img"> <title id="chevron9501304">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://teamtreehouse.com/techdegree">Overview</a></li> <li><a href="https://teamtreehouse.com/techdegree/front-end-web-development">Front End Development</a></li> <li><a href="https://teamtreehouse.com/techdegree/full-stack-javascript">Full Stack JavaScript</a></li> <li><a href="https://teamtreehouse.com/techdegree/data-analysis">Data Analysis</a></li> <li><a href="https://teamtreehouse.com/techdegree/ux-design">UX Design</a></li> <li><a href="https://teamtreehouse.com/techdegree/python-development">Python</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Community</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron6485965" role="img"> <title id="chevron6485965">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a href="https://treehouse-community-projects.vercel.app">Community Projects</a></li> <li><a href="https://teamtreehouse.com/live_sessions">Live Sessions</a></li> <li><a href="https://teamtreehouse.com/code_adventures">Code Adventures</a></li> <li><a href="https://discord.gg/z7AYghFmhR">Discord</a></li> <li><a href="https://teamtreehouse.com/community/topic:html">Forum</a></li> <li><a href="https://teamtreehouse.com/stories">Success Stories</a></li> <li><a href="https://teamtreehouse.com/links">Treehouse Links</a></li> <li><a href="https://join.teamtreehouse.com/100-days-of-code">100 Days of Code</a></li> </ul> </li> <li class="nav-item nav-item-secondary nav-item-show-on-mobile nav-item-tablet" data-featurette="expandable-content-card"> <span class="nav-link nav-link-plans toggle-steps-view">Resources</span> <span class="nav-item-show-on-mobile-container"> <div class="toggle-steps-view-chevron toggle-steps" tabindex="0"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 7.5" class="chevron-icon" aria-labelledby="chevron2018167" role="img"> <title id="chevron2018167">Chevron</title> <g> <path d="M6,7.5L0.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0L6,4.6l4.3-4.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4L6,7.5z"></path> </g> </svg></div> </span> <ul class="list-unstyled steps-list steps-list-override toggle-steps-hide nav-item-submenu nav-item-mobile"> <li><a class="dropdown-item" href="https://teamtreehouse.com/career-toolbox">Career Toolbox</a></li> <li><a class="dropdown-item" href="https://join.teamtreehouse.com/codeforward">CodeForward</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/libraries/find-your-library">Free Treehouse Near Me</a></li> <li><a class="dropdown-item" href="/jobs">Jobs</a></li> <li><a class="dropdown-item" href="http://blog.teamtreehouse.com">Blog</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/support">Support</a></li> <li><a class="dropdown-item" href="https://teamtreehouse.com/about">About</a></li> </ul> </li> </div> <div class="nav-block nav-block-2020 nav-block-hide-on-mobile"> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Plans</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/plans">For Individuals</a> <a class="dropdown-item" href="https://teamtreehouse.com/teams">For Businesses</a> <a class="dropdown-item" href="https://teamtreehouse.com/for/schools">For Schools</a> <a class="dropdown-item" href="/libraries">For Libraries</a> <a class="dropdown-item" href="/military">For Military</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Library</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/library">All Courses</a> <a class="dropdown-item" href="https://teamtreehouse.com/tracks">Tracks</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/college-credit">College Credit</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Techdegree</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/techdegree">Overview</a> <a class="dropdown-item" href="/techdegree/front-end-web-development">Front End Web Development</a> <a class="dropdown-item" href="/techdegree/full-stack-javascript">Full Stack JavaScript</a> <a class="dropdown-item" href="/techdegree/python-development">Python Development</a> <a class="dropdown-item" href="/techdegree/data-analysis">Data Analysis</a> <a class="dropdown-item" href="/techdegree/ux-design">UX Design</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Community</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://treehouse-community-projects.vercel.app">Community Projects</a> <a class="dropdown-item" href="https://teamtreehouse.com/live_sessions">Live Sessions</a> <a class="dropdown-item" href="https://teamtreehouse.com/code_adventures">Code Adventures</a> <a class="dropdown-item" href="https://discord.gg/z7AYghFmhR">Discord</a> <a class="dropdown-item" href="https://teamtreehouse.com/community/topic:html">Forum</a> <a class="dropdown-item" href="https://teamtreehouse.com/stories">Success Stories</a> <a class="dropdown-item" href="https://teamtreehouse.com/links">Treehouse Links</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/100-days-of-code">100 Days of Code</a> </div> </div> </li> <li class="nav-item nav-item-secondary"> <div class="nav-dropdown"> <button class="nav-toggle" aria-haspopup="true" aria-expanded="false">Resources</button> <div class="nav-dropdown-menu"> <a class="dropdown-item" href="https://teamtreehouse.com/career-toolbox">Career Toolbox</a> <a class="dropdown-item" href="https://join.teamtreehouse.com/codeforward">CodeForward</a> <a class="dropdown-item" href="https://teamtreehouse.com/libraries/find-your-library">Free Treehouse Near Me</a> <a class="dropdown-item" href="/jobs">Jobs</a> <a class="dropdown-item" href="http://blog.teamtreehouse.com">Blog</a> <a class="dropdown-item" href="https://teamtreehouse.com/support">Support</a> <a class="dropdown-item" href="https://teamtreehouse.com/about">About</a> </div> </div> </li> </div> <li class="nav-item nav-item-tablet nav-item-sign-in nav22-mobile-override" data-featurette="analytics-click-event" data-target="a" data-event-category="link" data-event-action="M: Clicked Sign In" data-event-label="Source: Navbar"> <a class="nav-link nav-link-sign-in " data-featurette="analytics-click-event" data-event-category="link" data-event-action="M: Clicked Sign In" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Sign In" data-analytics-path="https://teamtreehouse.com/signin?return_to=%2Flibrary%2Ftopic%3Ahtml" data-analytics-action="clicked" href="https://teamtreehouse.com/signin?return_to=%2Flibrary%2Ftopic%3Ahtml">Sign In</a> </li> <li class="nav-item nav-item-free-trial nav-item-cta flex-inline-xs"> <a class="nav-link nav-link-free-trial button" target="_blank" data-featurette="analytics-click-event" data-event-category="link" data-event-action="M: Clicked Free Trial" data-event-label="Source: Navbar" data-analytics-event="marketing nav link" data-analytics-link="Free Trial" data-analytics-path="/subscribe/new?trial=yes" data-analytics-action="clicked" href="/subscribe/new?trial=yes">Free Trial</a> </li> </ul> <div class="nav-social nav-item-show-on-mobile"> <a title="Instagram" class="nav-social-link" target="_blank" rel="noopener" href="https://instagram.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="instagram-icon" aria-labelledby="instagramIcon9788041" role="img"> <title id="instagramIcon9788041">Instagram</title> <path d="M16.6,18.5H7.4c-1,0-1.9-0.8-1.9-1.9V7.4c0-1,0.8-1.9,1.9-1.9h9.3c1,0,1.9,0.8,1.9,1.9v9.3C18.5,17.7,17.7,18.5,16.6,18.5z M12,10.1c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9s1.9-0.8,1.9-1.9S13,10.1,12,10.1z M15.7,7.4c-0.6,0-0.9,0.4-0.9,0.9 s0.4,0.9,0.9,0.9s0.9-0.4,0.9-0.9S16.3,7.4,15.7,7.4z M16.6,12h-0.9c0,2-1.7,3.7-3.7,3.7S8.3,14,8.3,12H7.4v3.7 c0,0.6,0.4,0.9,0.9,0.9h7.4c0.6,0,0.9-0.4,0.9-0.9V12z"></path> </svg></a> <a title="Twitter" class="nav-social-link" target="_blank" rel="noopener" href="https://twitter.com/treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="twitter-icon" aria-labelledby="twitterIcon4161247" role="img"> <title id="twitterIcon4161247">Twitter</title> <path d="M19,8.3c-0.5,0.2-1,0.4-1.5,0.4c0.6-0.3,1-0.9,1.2-1.5c-0.5,0.3-1.1,0.5-1.7,0.7C16.5,7.3,15.8,7,15,7 c-1.5,0-2.7,1.2-2.7,2.8c0,0.2,0,0.4,0.1,0.6c-2.2-0.1-4.2-1.2-5.5-2.9C6.7,7.9,6.5,8.4,6.5,8.9c0,1,0.4,1.8,1.2,2.3 c-0.4,0-1.2-0.1-1.2-0.3c0,0,0,0,0,0c0,1.3,0.9,2.5,2.2,2.7c-0.2,0.1-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.5-0.1c0.3,1.1,1.3,1.9,2.5,1.9 c-0.9,0.7-2.1,1.2-3.3,1.2c-0.2,0-0.4,0-0.6,0c1.2,0.8,2.6,1.2,4.1,1.2c4.9,0,7.6-4.2,7.6-7.9c0-0.1,0-0.2,0-0.4 C18.2,9.4,18.6,8.9,19,8.3z"></path> </svg></a> <a title="Facebook" class="nav-social-link" target="_blank" rel="noopener" href="https://facebook.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="facebook-icon" aria-labelledby="facebookIcon6168659" role="img"> <title id="facebookIcon6168659">Facebook</title> <path d="M10.3,19.8V13H7.8v-2.8h2.5V8c0-2.4,1.5-3.8,3.7-3.8c1.1,0,2.2,0.2,2.2,0.2v2.4h-1.2c-1.2,0-1.6,0.8-1.6,1.5v1.8h2.7 L15.6,13h-2.3v6.8H10.3z"></path> </svg></a> <a title="YouTube" class="nav-social-link" target="_blank" rel="noopener" href="https://youtube.com/user/gotreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="youtube-icon" aria-labelledby="youtubeIcon4626973" role="img"> <title id="youtubeIcon4626973">YouTube</title> <path d="M19.5,8.2c-0.2-0.7-0.7-1.2-1.4-1.4C16.9,6.5,12,6.5,12,6.5s-4.9,0-6.1,0.3C5.2,7,4.7,7.6,4.5,8.2C4.2,9.5,4.2,12,4.2,12 s0,2.5,0.3,3.8c0.2,0.7,0.7,1.2,1.4,1.4c1.2,0.3,6.1,0.3,6.1,0.3s4.9,0,6.1-0.3c0.7-0.2,1.2-0.7,1.4-1.4c0.3-1.2,0.3-3.8,0.3-3.8 S19.8,9.5,19.5,8.2z M9.9,15V9l5.2,3L9.9,15z"></path> </svg></a> <a title="LinkedIn" class="nav-social-link" target="_blank" rel="noopener" href="https://linkedin.com/company/treehouse-island-inc-"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="linked-in-icon" aria-labelledby="linkedinIcon9330026" role="img"> <title id="linkedinIcon9330026">LinkedIn</title> <path d="M17.5,5.5h-11C6,5.5,5.6,6,5.5,6.5v11.1c0,0.5,0.4,0.9,1,0.9h11c0.5,0,0.9-0.4,1-0.9V6.5C18.5,6,18.1,5.5,17.5,5.5z M9.4,16.6H7.5v-6.2h1.9V16.6z M8.4,9.5C7.8,9.5,7.3,9,7.3,8.4s0.5-1.1,1.1-1.1s1.1,0.5,1.1,1.1S9,9.5,8.4,9.5z M16.6,16.6h-1.9v-3 c0-0.7,0-1.7-1-1.7s-1.2,0.8-1.2,1.6v3.1h-1.9v-6.2h1.8v0.9c0.4-0.6,1-1,1.8-1c2,0,2.3,1.3,2.3,3L16.6,16.6z"></path> </svg></a> </div> </div> </nav> <div class=""> <main class="content " role="main" data-content=""> <div class="container "> <div id="welcome-panel" class=" box" data-featurette="welcome-panel" data-url="/user/hide-tour" data-key="library.logged-out-messaging"> <div class="grid-container"> <div class="grid-50 right-768 text-centered"> <img alt="Person reading a book" class="welcome-panel-img" src="https://ecs-static.teamtreehouse.com/assets/views/library/library-4ce8bae163e506844b74a0691d942c161af7f7456bb52dbb74e7a7fdee28c29e.png" /> </div> <div class="grid-50"> <h2> Welcome to the Treehouse Library </h2> <p> This is a sample catalog of all the courses we offer. Browse by topic or difficulty. Sign up today and get access to our entire library. Treehouse students get access to workshops, bonus content, conferences, and more. </p> <h4>Ready to start learning?</h4> <p> Treehouse offers a <strong>7 day free trial</strong> for new students. Get access to 1000s of hours of content. Learn to code, land your dream job. </p> <a href="/subscribe/new?trial=yes" class="button button-primary button-large icon-on-right">Start Your Free Trial <svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 12 12" class="right-arrow-icon"> <path d="M11.7,6.7l-5,5c-0.4,0.4-1,0.4-1.4,0c-0.4-0.4-0.4-1,0-1.4L8.6,7H1C0.5,7,0,6.6,0,6s0.4-1,1-1h7.6L5.3,1.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5,5c0,0,0,0,0,0C12.1,5.7,12.1,6.3,11.7,6.7z"></path> </svg></a> </div> </div> </div> <div data-featurette="library-index"> <div class="contained control-container search custom-search narrower" data-featurette="control-bar"><!-- add class search-focused --> <!-- Search --> <div class="search-container custom-search-container"> <form class="control-search search-form"> <label for="search"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18" class="loading-icon"> <path class="loading-circle" d="M9,4c2.76,0,5,2.24,5,5s-2.24,5-5,5s-5-2.24-5-5S6.24,4,9,4 M9,0C4.03,0,0,4.03,0,9s4.03,9,9,9s9-4.03,9-9S13.97,0,9,0L9,0z"></path> <path class="loading-quarter-circle" d="M16,11c-1.1,0-2-0.9-2-2c0-2.76-2.24-5-5-5C7.9,4,7,3.1,7,2s0.9-2,2-2c4.96,0,9,4.04,9,9C18,10.1,17.1,11,16,11z"></path> </svg><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16" class="search-icon"> <path d="M15.6,13.5l-4-4c0.6-1,1-2.1,1-3.3C12.5,2.8,9.8,0,6.3,0C2.9,0,0,2.8,0,6.2c0,3.4,2.8,6.2,6.3,6.2 c1.2,0,2.2-0.3,3.1-0.9l4,4.1c0.5,0.5,1.5,0.5,2.1,0C16.1,15,16.1,14.1,15.6,13.5z M6.5,9.4c-1.8,0-3.3-1.5-3.3-3.2 C3.2,4.4,4.7,3,6.5,3s3.3,1.5,3.3,3.2C9.7,8,8.3,9.4,6.5,9.4z"></path> </svg></label> <div class="search-input"> <input type="text" class="search input-text" id="q" placeholder="Search Courses and Topics..."> </div> </form> </div> <div class="custom-filter-wrapper">Filters:</div> <!-- Control Page Items --> <ul class="control-page-items custom-control-page-items"> <!-- Sorting --> <li id="sort" class="dropdown-parent filter-container" data-featurette="filter-list"> <a class="dropdown-parent-label sort" data-filter-list-current-value>Newest</a> <ul class="sorting-container dropdown-child filter-dropdown"> <li><a data-filter-value="" class="selected">Newest</a></li> <li><a data-filter-value="oldest" class="">Oldest</a></li> <li><a data-filter-value="title" class="">Alphabetical</a></li> <li><a data-filter-value="difficulty" class="">Difficulty</a></li> </ul> </li> <!-- Filtering --> <li id="type" class="dropdown-parent filter-container hidden" data-featurette="filter-list"> <a class="dropdown-parent-label type" data-filter-list-current-value>Content type</a> <ul class="sorting-container dropdown-child filter-dropdown"> <li><a data-filter-value="">All Types</a></li> <li><a data-filter-value="course">Course</a></li> <li><a data-filter-value="workshop">Workshop</a></li> <li><a data-filter-value="practice">Practice</a></li> <li><a data-filter-value="conference">Conference</a></li> <li><a data-filter-value="bonus">Bonus Series</a></li> </ul> </li> <!-- Courses --> <li id="topic" class="dropdown-parent filter-container" data-featurette="filter-list"> <a class="dropdown-parent-label course" data-filter-list-current-value>All Topics</a> <ul itemscope itemtype="http://schema.org/BreadcrumbList" class="dropdown-child filter-dropdown"> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" itemid="https://teamtreehouse.com/library" href="#" data-filter-value="" class="selected"> <span itemprop="name">All Topics</span></a> <meta itemprop="position" content="1" /> </li> <li class="ai"> <a data-filter-value="ai"> <span class="topic-color" style="color:#804197"> • </span> AI </a> </li> <li class="javascript"> <a data-filter-value="javascript"> <span class="topic-color" style="color:#3659A2"> • </span> JavaScript </a> </li> <li class="react"> <a data-filter-value="react"> <span class="topic-color" style="color:#3659A2"> • </span> React </a> </li> <li class="no-code"> <a data-filter-value="no-code"> <span class="topic-color" style="color:#31AF7F"> • </span> No Code </a> </li> <li class="python"> <a data-filter-value="python"> <span class="topic-color" style="color:#0e8397"> • </span> Python </a> </li> <li class="design"> <a data-filter-value="design"> <span class="topic-color" style="color:#4A4290"> • </span> Design </a> </li> <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="topic-front-end"> <a href="/library/topic:html" data-filter-value="html" itemprop="item"> <span class="topic-color" style="color:#3659A2"> • </span> <span itemprop="name"> HTML </span> </a> <meta itemprop="position" content="7" /> </li> <li class="css"> <a data-filter-value="css"> <span class="topic-color" style="color:#3659A2"> • </span> CSS </a> </li> <li class="game-development"> <a data-filter-value="game-development"> <span class="topic-color" style="color:#856fc4"> • </span> Game Development </a> </li> <li class="data-analysis"> <a data-filter-value="data-analysis"> <span class="topic-color" style="color:#be4e95"> • </span> Data Analysis </a> </li> <li class="development-tools"> <a data-filter-value="development-tools"> <span class="topic-color" style="color:#004e61"> • </span> Development Tools </a> </li> <li class="databases"> <a data-filter-value="databases"> <span class="topic-color" style="color:#be4e95"> • </span> Databases </a> </li> <li class="security"> <a data-filter-value="security"> <span class="topic-color" style="color:#409BE9"> • </span> Security </a> </li> <li class="digital-literacy"> <a data-filter-value="digital-literacy"> <span class="topic-color" style="color:#d44c66"> • </span> Digital Literacy </a> </li> <li class="swift"> <a data-filter-value="swift"> <span class="topic-color" style="color:#0e8397"> • </span> Swift </a> </li> <li class="java"> <a data-filter-value="java"> <span class="topic-color" style="color:#0e8397"> • </span> Java </a> </li> <li class="machine-learning"> <a data-filter-value="machine-learning"> <span class="topic-color" style="color:#804197"> • </span> Machine Learning </a> </li> <li class="apis"> <a data-filter-value="apis"> <span class="topic-color" style="color:#0e8397"> • </span> APIs </a> </li> <li class="professional-skills"> <a data-filter-value="professional-skills"> <span class="topic-color" style="color:#d44c66"> • </span> Professional Skills </a> </li> <li class="computer-science"> <a data-filter-value="computer-science"> <span class="topic-color" style="color:#004e61"> • </span> Computer Science </a> </li> <li class="ruby"> <a data-filter-value="ruby"> <span class="topic-color" style="color:#0e8397"> • </span> Ruby </a> </li> <li class="quality-assurance"> <a data-filter-value="quality-assurance"> <span class="topic-color" style="color:#004e61"> • </span> Quality Assurance </a> </li> <li class="php"> <a data-filter-value="php"> <span class="topic-color" style="color:#0e8397"> • </span> PHP </a> </li> <li class="go-language"> <a data-filter-value="go-language"> <span class="topic-color" style="color:#0e8397"> • </span> Go Language </a> </li> <li class="android"> <a data-filter-value="android"> <span class="topic-color" style="color:#30826c"> • </span> Android </a> </li> <li class="learning-resources"> <a data-filter-value="learning-resources"> <span class="topic-color" style="color:#5fcf80"> • </span> Learning Resources </a> </li> <li class="college-credit"> <a data-filter-value="college-credit"> <span class="topic-color" style="color:#3887c8"> • </span> College Credit </a> </li> <li class="coding-for-kids"> <a data-filter-value="coding-for-kids"> <span class="topic-color" style="color:#F36C27"> • </span> Coding for Kids </a> </li> </ul><!-- /child --> </li><!-- /parent --> </ul><!-- /control-page-items --> </div><!-- /control-container --> <div id="library-pjax" data-featurette="truncate-tags"> <div class="topic-heading"> <h1>HTML</h1> <div class="markdown-zone"><p>HyperText Markup Language (HTML) forms the structural layer of web pages. No matter what kind of website or application you want to build, this is a language you need to understand.</p></div> </div> <div class="grid-100 grid-parent related-topics"></div> <div data-featurette="upgrade-tooltip" data-hide-tooltip="true"> <ul class="card-list"> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/463" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-463"> <a class="card-box" href="/library/code-chill-livestreams"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/code-chill-livestreams"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT42H" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">42 hours</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">Code & Chill Livestreams</h3> <p itemprop="description" class="card-description">Watch Treehouse Developer Advocate Dustin Usey on Code & Chill, a weekly livestream on Twitch where he streams random app builds, hosts fun code-along sessions, and hangs out with the Treehouse community.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark3944527" role="img"> <title id="checkmark3944527">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3858" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3858"> <a class="card-box" href="/library/create-a-portfolio-using-html-and-css"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/create-a-portfolio-using-html-and-css"> <meta itemprop="category" content="CSS" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT53M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">53 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Create a Portfolio Using HTML and CSS</h3> <p itemprop="description" class="card-description">Portfolios are a great way to show off your skills to a potential employer. In this workshop, we’ll start with provided mockups and journey together through the construction of a stunning portfolio using HTML and CSS, sprinkling in a touch of JavaScript for interactivity. Prioritizing a mobile-first approach and keeping accessibility in mind, we’ll ensure the portfolio is not only visually captivating but also user-friendly for all.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark3628918" role="img"> <title id="checkmark3628918">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:css" href="/library/topic:css"><span>CSS</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/4940" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-4940"> <a class="card-box" href="/library/introduction-to-html-and-css-2"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/introduction-to-html-and-css-2"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT2H" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> <li>3</li> </ul> <span class="card-estimate">2 hours</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">Introduction to HTML and CSS</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>1446 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Get started creating web pages with HTML and CSS, the basic building blocks of web development. HTML, or HyperText Markup Language, is a standard set of tags you will use to tell the web browser how the content of your web pages and applications are structured. Use CSS, or Cascading Style Sheets, to select HTML tags and tell the browser what your content should look like. Whether you are coding for fun or planning to start a career in web development, learning HTML and CSS is a great place to start. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8474091" role="img"> <title id="checkmark8474091">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-ai" data-location="library" data-activity="workshop/3850" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3850"> <a class="card-box" href="/library/pagination-with-github-copilot"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/pagination-with-github-copilot"> <meta itemprop="category" content="AI" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT42M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">42 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Pagination with GitHub Copilot</h3> <p itemprop="description" class="card-description">Follow along with Dustin in this fun, unscripted, live coding session where he demonstrates the strengths and weaknesses of using GitHub Copilot as a co-developer. In this video, Dustin builds a friends app that utilizes pagination with vanilla JavaScript! How much do you think GitHub Copilot was able to help?</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark2640770" role="img"> <title id="checkmark2640770">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-ai topic topic"><a data-filter-list-val="topic:ai" href="/library/topic:ai"><span>AI</span></a></li><li class="difficulty"><span>Intermediate</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-ai" data-location="library" data-activity="workshop/3818" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3818"> <a class="card-box" href="/library/can-chatgpt-build-a-website"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/can-chatgpt-build-a-website"> <meta itemprop="category" content="AI" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT15M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">15 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Can ChatGPT Build a Website?</h3> <p itemprop="description" class="card-description">Leveraging the power of OpenAI’s ChatGPT is a great tool in your developer tool belt, but how accurate is ChatGPT when using it to build a website from a mockup? There are some surprising strengths as well as weaknesses. Follow along with Dustin to explore how ChatGPT fares at building a website from a mockup in this fun, AI-powered code-along.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark2772018" role="img"> <title id="checkmark2772018">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-ai topic topic"><a data-filter-list-val="topic:ai" href="/library/topic:ai"><span>AI</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-ai" data-location="library" data-activity="workshop/3806" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3806"> <a class="card-box" href="/library/build-a-basic-chatgpt-clone-with-vanilla-javascript"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/build-a-basic-chatgpt-clone-with-vanilla-javascript"> <meta itemprop="category" content="AI" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT15M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">15 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Build a Basic ChatGPT Clone with Vanilla JavaScript</h3> <p itemprop="description" class="card-description">Learn to build a basic ChatGPT clone with vanilla JavaScript in this video. Follow along with Dustin as he walks you through the process, from writing the HTML for the UI to integrating the OpenAI API. By the end, you'll have a functional chatbot that can generate human-like responses to user inputs!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5081199" role="img"> <title id="checkmark5081199">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-ai topic topic"><a data-filter-list-val="topic:ai" href="/library/topic:ai"><span>AI</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3800" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3800"> <a class="card-box" href="/library/how-to-build-a-google-chrome-extension-strong-password-generator"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/how-to-build-a-google-chrome-extension-strong-password-generator"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT35M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">35 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">How to Build a Google Chrome Extension: Strong Password Generator</h3> <p itemprop="description" class="card-description">Ever wanted to make your own Google Chrome Extension? Follow along as Dustin builds a strong password generator and then converts it to a Google Chrome Extension! This project is built with HTML, SASS, and vanilla JavaScript so a good understanding of those concepts will help you understand this project. If you need a refresher, take a look at some of the courses in the Teacher's Notes that cover the basics.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5122310" role="img"> <title id="checkmark5122310">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3796" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3796"> <a class="card-box" href="/library/auto-user-search-with-javascript-treehouse-live"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/auto-user-search-with-javascript-treehouse-live"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT35M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">35 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Auto User Search with JavaScript - Treehouse Live</h3> <p itemprop="description" class="card-description">Need practice working with the Document Object Model (DOM)? This project showcases some of the core concepts needed to interact with and manipulate the DOM. Follow along as Dustin builds a searchable input field that filters users based on your search query!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8978050" role="img"> <title id="checkmark8978050">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3795" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3795"> <a class="card-box" href="/library/cssonly-facebook-reactions-ui-treehouse-live"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/cssonly-facebook-reactions-ui-treehouse-live"> <meta itemprop="category" content="CSS" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT37M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">37 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">CSS-Only Facebook Reactions UI - Treehouse Live</h3> <p itemprop="description" class="card-description">Most social media platforms allow users to interact with other users’ posts. Letting users use an emoji to show how they feel about them is a fun way to add some interactivity to your project or app. Follow along as Dustin reveals how to recreate the Facebook reactions UI with just CSS!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark3546639" role="img"> <title id="checkmark3546639">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:css" href="/library/topic:css"><span>CSS</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3792" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3792"> <a class="card-box" href="/library/build-an-interactive-settings-panel-treehouse-live"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/build-an-interactive-settings-panel-treehouse-live"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT33M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">33 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Build an Interactive Settings Panel - Treehouse Live</h3> <p itemprop="description" class="card-description">Want to code out a real-world project with Dustin? Follow along with our Treehouse Live replay as he builds a settings panel UI from scratch with just HTML and CSS. Then, he refactors the app with JavaScript to render parts of the UI dynamically. Stick around to the end to find out how he implements a dark mode toggle for the settings panel itself with an event listener!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark465947" role="img"> <title id="checkmark465947">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3777" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3777"> <a class="card-box" href="/library/create-a-chat-app-ui-treehouse-live"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/create-a-chat-app-ui-treehouse-live"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT38M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">38 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Create a Chat App UI - Treehouse Live</h3> <p itemprop="description" class="card-description">In this live demonstration, Dustin builds a chat app UI (user interface) using HTML, CSS, and JavaScript. The slick design includes a toggle button for dark mode. The GitHub link in the teacher's notes includes both the starter files and the completed code. You can follow along and build the project yourself, as well as study Dustin's version. Note that he builds only the UI, not the chat app itself.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8557462" role="img"> <title id="checkmark8557462">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3773" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3773"> <a class="card-box" href="/library/javascript-accordion"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/javascript-accordion"> <meta itemprop="category" content="JavaScript" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT8M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">8 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">JavaScript Accordion</h3> <p itemprop="description" class="card-description">Accordions are everywhere on the web and even in mobile apps. They’re an effective way to show and hide content based on user interaction. In this guide, I’ll go over how to create an accordion using HTML, CSS, and a little bit of JavaScript.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8441914" role="img"> <title id="checkmark8441914">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:javascript" href="/library/topic:javascript"><span>JavaScript</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3770" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3770"> <a class="card-box" href="/library/animated-hamburger-menu"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/animated-hamburger-menu"> <meta itemprop="category" content="CSS" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT10M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">10 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Animated Hamburger Menu</h3> <p itemprop="description" class="card-description">Want to set up a hamburger menu for your mobile navigation with a slick animation? It's not as hard as you may think. Follow along while I tackle this small UX feature!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5384837" role="img"> <title id="checkmark5384837">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:css" href="/library/topic:css"><span>CSS</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3767" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3767"> <a class="card-box" href="/library/htmlonly-accordion"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/htmlonly-accordion"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT3M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">3 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">HTML-Only Accordion</h3> <p itemprop="description" class="card-description">Accordions are all over the web and mobile apps. They are a great way to show and hide content based on user interaction and aren’t very hard to build. However, they usually require a bit of HTML, CSS, and JavaScript. Did you know you can build a simple accordion with only HTML in seconds? Follow along as I explain how to set this up!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark1481275" role="img"> <title id="checkmark1481275">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3766" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3766"> <a class="card-box" href="/library/cssonly-toggle"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/cssonly-toggle"> <meta itemprop="category" content="CSS" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT4M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">4 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">CSS-Only Toggle</h3> <p itemprop="description" class="card-description">Toggle switches are a useful way to show a UI’s state. It’s commonly believed that these are hard to create and require JavaScript. That’s simply not the case. Follow along as I walk you through how to create a toggle switch with just CSS!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark2490131" role="img"> <title id="checkmark2490131">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:css" href="/library/topic:css"><span>CSS</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3763" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3763"> <a class="card-box" href="/library/how-to-add-a-favicon-2"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/how-to-add-a-favicon-2"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT1M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">1 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">How to Add a Favicon</h3> <p itemprop="description" class="card-description">Favicons give your website a face and are easy to implement in your code. In this quick guide, we’ll go over what a favicon is and how to add one to your site.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5260798" role="img"> <title id="checkmark5260798">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3761" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3761"> <a class="card-box" href="/library/dark-mode-in-css"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/dark-mode-in-css"> <meta itemprop="category" content="CSS" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT4M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">4 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Dark Mode in CSS</h3> <p itemprop="description" class="card-description">How often do you find yourself on a website or app looking for a toggle for dark mode? Most apps nowadays, like Facebook, Twitter, Instagram, & Snapchat just to name a few, use some sort of dark mode feature. Implementing this is actually pretty quick and simple. There are many ways to go about this but the method I prefer is using CSS variables. Follow along and I’ll show you how I tackle this feature.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9595390" role="img"> <title id="checkmark9595390">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:css" href="/library/topic:css"><span>CSS</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/470" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-470"> <a class="card-box" href="/library/treehouse-festival-june-2021"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/treehouse-festival-june-2021"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT14H" /> </div> <div class="card-progress"> <svg class="conference-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,15h-5.8l1.7,2.1c0.3,0.3,0.1,0.7-0.3,0.9c-0.4,0.2-1,0.1-1.2-0.2L9.1,15H8.8l-2.2,2.7c-0.2,0.3-0.8,0.4-1.2,0.2C5,17.7,4.8,17.4,5.1,17L6.8,15H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v13C18,14.5,17.6,15,17,15z M16,2H2v11h14V2z M6.5,5C7.9,5,9,6.1,9,7.5S7.9,10,6.5,10S4,8.9,4,7.5S5.1,5,6.5,5zM10.5,6h3C13.8,6,14,6.2,14,6.5S13.8,7,13.5,7h-3C10.2,7,10,6.8,10,6.5S10.2,6,10.5,6zM10.5,8h3C13.8,8,14,8.2,14,8.5C14,8.8,13.8,9,13.5,9h-3C10.2,9,10,8.8,10,8.5C10,8.2,10.2,8,10.5,8z"></path> </svg> <span class="card-estimate add-topic-background-color">14 hours</span> </div> <strong class="card-type">Conference</strong> <h3 itemprop="name" class="card-title">Treehouse Festival June 2021</h3> <p itemprop="description" class="card-description">Treehouse Festival is an online conference designed for Treehouse students and all aspiring developers and designers. The presentations will empower those that attend with skills and a network to transition to a tech career or level-up in their current roles. Sessions include “Designing with a Developer Mindset,” “Computer Science, Emulation, and the NES,” “Interview with a Treehouse Grad”, and more!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark2049292" role="img"> <title id="checkmark2049292">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3727" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3727"> <a class="card-box" href="/library/string-manipulation-with-javascript"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/string-manipulation-with-javascript"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT19M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">19 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">String Manipulation with JavaScript </h3> <p itemprop="description" class="card-description">Learn and practice string manipulation methods that will allow you more control over data in your JavaScript programs.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8879584" role="img"> <title id="checkmark8879584">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3722" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3722"> <a class="card-box" href="/library/hello-frontend-web-development-fewd"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/hello-frontend-web-development-fewd"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT33M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">33 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">Hello Front-End Web Development (FEWD)</h3> <p itemprop="description" class="card-description">Front-end web developers write the code that turns a static mockup into an interactive web page. In this workshop, we’ll take a look at the types of code front-end developers write, and even try it out ourselves. But before we do that, let’s take a closer look at the term front-end. Front-end developers are sometimes referred to as client-side developers, since everything we code is directly viewable by the client–in other words, the visitor to our website or app.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9396711" role="img"> <title id="checkmark9396711">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/467" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-467"> <a class="card-box" href="/library/treehouse-festival-december-2020"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/treehouse-festival-december-2020"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT12H" /> </div> <div class="card-progress"> <svg class="conference-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,15h-5.8l1.7,2.1c0.3,0.3,0.1,0.7-0.3,0.9c-0.4,0.2-1,0.1-1.2-0.2L9.1,15H8.8l-2.2,2.7c-0.2,0.3-0.8,0.4-1.2,0.2C5,17.7,4.8,17.4,5.1,17L6.8,15H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v13C18,14.5,17.6,15,17,15z M16,2H2v11h14V2z M6.5,5C7.9,5,9,6.1,9,7.5S7.9,10,6.5,10S4,8.9,4,7.5S5.1,5,6.5,5zM10.5,6h3C13.8,6,14,6.2,14,6.5S13.8,7,13.5,7h-3C10.2,7,10,6.8,10,6.5S10.2,6,10.5,6zM10.5,8h3C13.8,8,14,8.2,14,8.5C14,8.8,13.8,9,13.5,9h-3C10.2,9,10,8.8,10,8.5C10,8.2,10.2,8,10.5,8z"></path> </svg> <span class="card-estimate add-topic-background-color">12 hours</span> </div> <strong class="card-type">Conference</strong> <h3 itemprop="name" class="card-title">Treehouse Festival December 2020</h3> <p itemprop="description" class="card-description">Treehouse Festival is an online conference designed for Treehouse students and all aspiring developers and designers. The presentations will empower those that attend with skills and a network to transition to a tech career or level-up in their current roles. Sessions include “Designing with a Developer Mindset,” “Computer Science, Emulation, and the NES,” “Interview with a Treehouse Grad”, and more!</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark6647000" role="img"> <title id="checkmark6647000">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3713" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3713"> <a class="card-box" href="/library/svg-workflow-and-tools"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/svg-workflow-and-tools"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT31M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">31 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">SVG Workflow and Tools </h3> <p itemprop="description" class="card-description">Learn useful tools and techniques for optimizing, organizing, and structuring your SVG files. Then learn to size and scale your SVG with inline attributes.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark4967069" role="img"> <title id="checkmark4967069">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Intermediate</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/4888" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-4888"> <a class="card-box" href="/library/accessibility-for-web-developers"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/accessibility-for-web-developers"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT91M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> </ul> <span class="card-estimate">91 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">Accessibility For Web Developers</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>4595 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Accessibility is a process that specifically considers the needs of people with disabilities. In this course, you’ll learn about the standards in place to guide developers in creating experiences that are accessible to all users as well as tools and techniques to ensure your projects are up to those standards. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark3860885" role="img"> <title id="checkmark3860885">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/465" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-465"> <a class="card-box" href="/library/treehouse-festival-july-2020"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/treehouse-festival-july-2020"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT12H" /> </div> <div class="card-progress"> <svg class="conference-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,15h-5.8l1.7,2.1c0.3,0.3,0.1,0.7-0.3,0.9c-0.4,0.2-1,0.1-1.2-0.2L9.1,15H8.8l-2.2,2.7c-0.2,0.3-0.8,0.4-1.2,0.2C5,17.7,4.8,17.4,5.1,17L6.8,15H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v13C18,14.5,17.6,15,17,15z M16,2H2v11h14V2z M6.5,5C7.9,5,9,6.1,9,7.5S7.9,10,6.5,10S4,8.9,4,7.5S5.1,5,6.5,5zM10.5,6h3C13.8,6,14,6.2,14,6.5S13.8,7,13.5,7h-3C10.2,7,10,6.8,10,6.5S10.2,6,10.5,6zM10.5,8h3C13.8,8,14,8.2,14,8.5C14,8.8,13.8,9,13.5,9h-3C10.2,9,10,8.8,10,8.5C10,8.2,10.2,8,10.5,8z"></path> </svg> <span class="card-estimate add-topic-background-color">12 hours</span> </div> <strong class="card-type">Conference</strong> <h3 itemprop="name" class="card-title">Treehouse Festival July 2020</h3> <p itemprop="description" class="card-description">Treehouse Festival 2020</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9979107" role="img"> <title id="checkmark9979107">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3658" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3658"> <a class="card-box" href="/library/practice-semantic-html"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/practice-semantic-html"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT6M" /> </div> <div class="card-progress"> <svg class="practice-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 22 22"> <title>practiceIcon Copy 5</title> Created with Sketch. <g id="practiceCardInAppPracticeIcon-Copy"> <g id="practiceIcon-Copy-5"> <path d="M11,12.5908182 C10.1214154,12.5908182 9.40918178,11.8785846 9.40918178,11 C9.40918178,10.1214154 10.1214154,9.40918178 11,9.40918178 C11.8785846,9.40918178 12.5908182,10.1214154 12.5908182,11 C12.5908182,11.8785846 11.8785846,12.5908182 11,12.5908182 Z M11,10.7728181 C10.8745309,10.7728181 10.7728181,10.8745309 10.7728181,11 C10.7728181,11.1254691 10.8745309,11.2271819 11,11.2271819 C11.1254691,11.2271819 11.2271819,11.1254691 11.2271819,11 C11.2271819,10.8745309 11.1254691,10.7728181 11,10.7728181 Z" id="Oval"></path> <path d="M11,16.2726364 C8.08800332,16.2726364 5.7273636,13.9119967 5.7273636,11 C5.7273636,8.08800332 8.08800332,5.7273636 11,5.7273636 C13.9119967,5.7273636 16.2726364,8.08800332 16.2726364,11 C16.2726364,13.9119967 13.9119967,16.2726364 11,16.2726364 Z M11,14.4546363 C12.907943,14.4546363 14.4546363,12.907943 14.4546363,11 C14.4546363,9.09205704 12.907943,7.54536368 11,7.54536368 C9.09205704,7.54536368 7.54536368,9.09205704 7.54536368,11 C7.54536368,12.907943 9.09205704,14.4546363 11,14.4546363 Z" id="Oval-Copy"></path> <path d="M11,21.4089999 C5.25126808,21.4089999 0.59100008,16.7487319 0.59100008,11 C0.59100008,5.25126808 5.25126808,0.59100008 11,0.59100008 C16.7487319,0.59100008 21.4089999,5.25126808 21.4089999,11 C21.4089999,16.7487319 16.7487319,21.4089999 11,21.4089999 Z M11,18.5910001 C15.1923936,18.5910001 18.5910001,15.1923936 18.5910001,11 C18.5910001,6.80760642 15.1923936,3.40899992 11,3.40899992 C6.80760642,3.40899992 3.40899992,6.80760642 3.40899992,11 C3.40899992,15.1923936 6.80760642,18.5910001 11,18.5910001 Z" id="Oval-Copy-2"></path> </g> </g> </svg> <span class="card-estimate add-topic-background-color">6 min</span> </div> <strong class="card-type">Practice</strong> <h3 itemprop="name" class="card-title">Practice Semantic HTML</h3> <p itemprop="description" class="card-description">In this workshop, you'll practice the basics of semantic HTML. When you write markup that clearly communicates the meaning of your content, it is said that you're writing semantic markup.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark2017308" role="img"> <title id="checkmark2017308">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3657" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3657"> <a class="card-box" href="/library/practice-structuring-and-grouping-content"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/practice-structuring-and-grouping-content"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT10M" /> </div> <div class="card-progress"> <svg class="practice-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 22 22"> <title>practiceIcon Copy 5</title> Created with Sketch. <g id="practiceCardInAppPracticeIcon-Copy"> <g id="practiceIcon-Copy-5"> <path d="M11,12.5908182 C10.1214154,12.5908182 9.40918178,11.8785846 9.40918178,11 C9.40918178,10.1214154 10.1214154,9.40918178 11,9.40918178 C11.8785846,9.40918178 12.5908182,10.1214154 12.5908182,11 C12.5908182,11.8785846 11.8785846,12.5908182 11,12.5908182 Z M11,10.7728181 C10.8745309,10.7728181 10.7728181,10.8745309 10.7728181,11 C10.7728181,11.1254691 10.8745309,11.2271819 11,11.2271819 C11.1254691,11.2271819 11.2271819,11.1254691 11.2271819,11 C11.2271819,10.8745309 11.1254691,10.7728181 11,10.7728181 Z" id="Oval"></path> <path d="M11,16.2726364 C8.08800332,16.2726364 5.7273636,13.9119967 5.7273636,11 C5.7273636,8.08800332 8.08800332,5.7273636 11,5.7273636 C13.9119967,5.7273636 16.2726364,8.08800332 16.2726364,11 C16.2726364,13.9119967 13.9119967,16.2726364 11,16.2726364 Z M11,14.4546363 C12.907943,14.4546363 14.4546363,12.907943 14.4546363,11 C14.4546363,9.09205704 12.907943,7.54536368 11,7.54536368 C9.09205704,7.54536368 7.54536368,9.09205704 7.54536368,11 C7.54536368,12.907943 9.09205704,14.4546363 11,14.4546363 Z" id="Oval-Copy"></path> <path d="M11,21.4089999 C5.25126808,21.4089999 0.59100008,16.7487319 0.59100008,11 C0.59100008,5.25126808 5.25126808,0.59100008 11,0.59100008 C16.7487319,0.59100008 21.4089999,5.25126808 21.4089999,11 C21.4089999,16.7487319 16.7487319,21.4089999 11,21.4089999 Z M11,18.5910001 C15.1923936,18.5910001 18.5910001,15.1923936 18.5910001,11 C18.5910001,6.80760642 15.1923936,3.40899992 11,3.40899992 C6.80760642,3.40899992 3.40899992,6.80760642 3.40899992,11 C3.40899992,15.1923936 6.80760642,18.5910001 11,18.5910001 Z" id="Oval-Copy-2"></path> </g> </g> </svg> <span class="card-estimate add-topic-background-color">10 min</span> </div> <strong class="card-type">Practice</strong> <h3 itemprop="name" class="card-title">Practice Structuring and Grouping Content</h3> <p itemprop="description" class="card-description">Practice the fundamentals of structuring and grouping content with markup.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9020134" role="img"> <title id="checkmark9020134">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3656" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3656"> <a class="card-box" href="/library/practice-file-paths"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/practice-file-paths"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT11M" /> </div> <div class="card-progress"> <svg class="practice-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 22 22"> <title>practiceIcon Copy 5</title> Created with Sketch. <g id="practiceCardInAppPracticeIcon-Copy"> <g id="practiceIcon-Copy-5"> <path d="M11,12.5908182 C10.1214154,12.5908182 9.40918178,11.8785846 9.40918178,11 C9.40918178,10.1214154 10.1214154,9.40918178 11,9.40918178 C11.8785846,9.40918178 12.5908182,10.1214154 12.5908182,11 C12.5908182,11.8785846 11.8785846,12.5908182 11,12.5908182 Z M11,10.7728181 C10.8745309,10.7728181 10.7728181,10.8745309 10.7728181,11 C10.7728181,11.1254691 10.8745309,11.2271819 11,11.2271819 C11.1254691,11.2271819 11.2271819,11.1254691 11.2271819,11 C11.2271819,10.8745309 11.1254691,10.7728181 11,10.7728181 Z" id="Oval"></path> <path d="M11,16.2726364 C8.08800332,16.2726364 5.7273636,13.9119967 5.7273636,11 C5.7273636,8.08800332 8.08800332,5.7273636 11,5.7273636 C13.9119967,5.7273636 16.2726364,8.08800332 16.2726364,11 C16.2726364,13.9119967 13.9119967,16.2726364 11,16.2726364 Z M11,14.4546363 C12.907943,14.4546363 14.4546363,12.907943 14.4546363,11 C14.4546363,9.09205704 12.907943,7.54536368 11,7.54536368 C9.09205704,7.54536368 7.54536368,9.09205704 7.54536368,11 C7.54536368,12.907943 9.09205704,14.4546363 11,14.4546363 Z" id="Oval-Copy"></path> <path d="M11,21.4089999 C5.25126808,21.4089999 0.59100008,16.7487319 0.59100008,11 C0.59100008,5.25126808 5.25126808,0.59100008 11,0.59100008 C16.7487319,0.59100008 21.4089999,5.25126808 21.4089999,11 C21.4089999,16.7487319 16.7487319,21.4089999 11,21.4089999 Z M11,18.5910001 C15.1923936,18.5910001 18.5910001,15.1923936 18.5910001,11 C18.5910001,6.80760642 15.1923936,3.40899992 11,3.40899992 C6.80760642,3.40899992 3.40899992,6.80760642 3.40899992,11 C3.40899992,15.1923936 6.80760642,18.5910001 11,18.5910001 Z" id="Oval-Copy-2"></path> </g> </g> </svg> <span class="card-estimate add-topic-background-color">11 min</span> </div> <strong class="card-type">Practice</strong> <h3 itemprop="name" class="card-title">Practice File Paths</h3> <p itemprop="description" class="card-description">Sharpen your HTML skills by practicing writing file paths for images and links.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8142679" role="img"> <title id="checkmark8142679">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card workshop topic-front-end" data-location="library" data-activity="workshop/3492" itemscope="itemscope" itemtype="https://schema.org/Course" id="Workshop-3492"> <a class="card-box" href="/library/html-dialog"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html-dialog"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT11M" /> </div> <div class="card-progress"> <svg class="workshop-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M18,15l-2.8,2.7C15,17.9,14.7,18,14.5,18l0,0l0,0c-0.3,0-0.5-0.1-0.7-0.3L11,15l0,0l0,0l0,0l0,0V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1V15L18,15L18,15z M16,2h-3v2h3V2z M16,13.8V5h-3v8.8l1.5,1.2l0,0L16,13.8zM6,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h5c0.6,0,1,0.4,1,1v16C7,17.6,6.6,18,6,18zM5,2H2v2h1.5C3.8,4,4,4.2,4,4.5S3.8,5,3.5,5H2v2h0.5C2.8,7,3,7.2,3,7.5S2.8,8,2.5,8H2v2h1.5C3.8,10,4,10.2,4,10.5S3.8,11,3.5,11H2v2h0.5C2.8,13,3,13.2,3,13.5S2.8,14,2.5,14H2v2h3V2z"></path> </svg> <span class="card-estimate add-topic-background-color">11 min</span> </div> <strong class="card-type">Workshop</strong> <h3 itemprop="name" class="card-title">HTML Dialog</h3> <p itemprop="description" class="card-description">Dialog boxes are a common design pattern across many websites, so the W3C created the <code><dialog></code> element as part of the HTML standard. In this Workshop, we'll learn how to use the <code><dialog></code> element in combination with JavaScript to trigger modal and non-modal windows.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8760850" role="img"> <title id="checkmark8760850">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/3832" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-3832"> <a class="card-box" href="/library/html-basics-2"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html-basics-2"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT3H" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <span class="card-estimate">3 hours</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">HTML Basics</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>51835 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Learn HTML (HyperText Markup Language), the language common to every website. HTML describes the basic structure and content of a web page. If you want to build a website or web application, you'll need to know HTML. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5580641" role="img"> <title id="checkmark5580641">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/3662" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-3662"> <a class="card-box" href="/library/html-video-and-audio-2"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html-video-and-audio-2"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT79M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> </ul> <span class="card-estimate">79 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">HTML Video and Audio</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>9966 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Text and images have always been the foundation of web content, but more than ever, video and audio are also a part of that content mix. Fortunately, we can now create standards-based video and audio players that don't require the use of plugins. Adding video and audio to a webpage is almost as easy as adding an image or formatting some text. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5115085" role="img"> <title id="checkmark5115085">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/422" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-422"> <a class="card-box" href="/library/the-treehouse-show-2"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/the-treehouse-show-2"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT5H" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">5 hours</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">The Treehouse Show</h3> <p itemprop="description" class="card-description">The Treehouse Show is our weekly conversation with the Treehouse Community.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark6709030" role="img"> <title id="checkmark6709030">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/1482" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-1482"> <a class="card-box" href="/library/responsive-images"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/responsive-images"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT65M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> </ul> <span class="card-estimate">65 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">Responsive Images</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>6272 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Using the new source-set and sizes attributes, and the new picture element, it's possible to create images that behave better in a responsive design. These new pieces of markup allow us to deliver the right image to the right device, based on resolution, pixel density, and other factors we define. This will help web pages load faster and look better, and the most capable devices will get the best looking images possible. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark1996396" role="img"> <title id="checkmark1996396">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Advanced</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/1112" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-1112"> <a class="card-box" href="/library/svg-basics"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/svg-basics"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT46M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> </ul> <span class="card-estimate">46 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">SVG Basics</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>16371 <small>students</small></span> </div> <p itemprop="description" class="card-description"> Scalable Vector Graphics (SVG) is an XML markup language for creating two-dimensional images using vectors. This is different from traditional raster-based image formats that use pixels, like JPEG and PNG. When used on web pages, SVG images provide an infinite level of detail, so they look sharp regardless of screen size or pixel density. In this course, we'll look at situations where SVGs are better than PNG and JPEG files, as well as when an SVG might not be the best choice. Finally, we'll learn how to modify SVGs using CSS. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8934842" role="img"> <title id="checkmark8934842">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Intermediate</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/602" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-602"> <a class="card-box" href="/library/treehouse-club-html"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/treehouse-club-html"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT44M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> </ul> <span class="card-estimate">44 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">Treehouse Club: HTML</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>35165 <small>students</small></span> </div> <p itemprop="description" class="card-description"> If you’ve never written a line of code before, this is the place to start! In this project, you’ll learn how to edit pre-written HTML code. By the end of this course, you’ll be more comfortable with using Treehouse’s programming tool Workspaces and have a basic understanding of HTML structure. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark8478533" role="img"> <title id="checkmark8478533">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Novice</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/702" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-702"> <a class="card-box" href="/library/html-tables"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html-tables"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT59M" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> </ul> <span class="card-estimate">59 min</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">HTML Tables</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>45203 <small>students</small></span> </div> <p itemprop="description" class="card-description"> The web is filled with text and images, but it's also filled with information like sports scores throughout the years, lists of employee names and email addresses, or nutrition facts for your favorite foods. HTML tables enable the display information in what is commonly known as tabular data, which is information that's stored in a table-like structure of columns and rows. In general, anything that you might put into a spreadsheet could go in a table. There are many use cases for a table, so it's important to add them to your skills because it's a very common method for displaying information. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark7644955" role="img"> <title id="checkmark7644955">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card course syllabus topic-front-end" data-location="library" data-activity="syllabus/542" itemscope="itemscope" itemtype="https://schema.org/Course" id="Syllabus-542"> <a class="card-box" href="/library/html-forms"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html-forms"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT2H" /> </div> <div class="card-progress"> <svg class="course-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M0,1.1v13.3c0,0.6,0.5,1.1,1.1,1.2c1.9,0.2,5.5,0.6,6.8,1.5c0.1,0.1,0.2,0.2,0.3,0.3l0.4,0.4c0.2,0.2,0.6,0.2,0.8,0l0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3c1.3-1,4.9-1.4,6.8-1.5c0.6-0.1,1.1-0.6,1.1-1.2V1.1C18,0.5,17.5,0,16.9,0C14.9,0.1,11,0.5,9,1.9C7,0.5,3.1,0.1,1.1,0C0.5,0,0,0.5,0,1.1z M8,15c-2-0.9-4.5-1.2-6-1.3V2c1.8,0.1,4.5,0.6,6,1.7V15z M16,13.7c-1.5,0.1-4,0.4-6,1.3V3.7c0.6-0.5,1.5-0.8,2.4-1.1c0.8-0.2,1.6-0.4,2.4-0.5C15.2,2.1,15.6,2,16,2V13.7z"></path> </svg> <ul class="card-stages"> <li>1</li> <li>2</li> <li>3</li> </ul> <span class="card-estimate">2 hours</span> </div> <strong class="card-type">Course</strong> <h3 itemprop="name" class="card-title">HTML Forms</h3> <div class="rating-and-student-count"> <div class="star-rating-container"> <svg class="star-small-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> <svg class="star-small-icon active" preserveAspectRatio="xMinYMin meet" viewBox="0 0 16 16"> <path d="M16,6.2c0,0.1-0.1,0.3-0.2,0.5l-3.5,3.6l0.8,5c0,0,0,0.1,0,0.2c0,0.1,0,0.3-0.1,0.4C12.9,16,12.8,16,12.7,16 c-0.1,0-0.2,0-0.4-0.1L8,13.5l-4.3,2.4C3.5,16,3.4,16,3.3,16c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.4c0,0,0-0.1,0-0.2l0.8-5 L0.2,6.7C0.1,6.5,0,6.3,0,6.2C0,6,0.2,5.8,0.5,5.7L5.4,5l2.2-4.6C7.7,0.1,7.8,0,8,0c0.2,0,0.3,0.1,0.5,0.4L10.6,5l4.8,0.7 C15.8,5.8,16,6,16,6.2L16,6.2z"></path> </svg> </div> | <span>60771 <small>students</small></span> </div> <p itemprop="description" class="card-description"> The web is a two-way communication medium. There are lots of HTML elements for displaying data and producing output, and conversely, there are also lots of HTML elements for accepting input. Accepting input from the user means creating web forms. In this course, we’ll learn about all the most important form elements that web professionals use on a daily basis. </p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark6256931" role="img"> <title id="checkmark6256931">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title"></span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li><li class="difficulty"><span>Beginner</span></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/13" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-13"> <a class="card-box" href="/library/css3-master-class"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/css3-master-class"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT75M" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">75 min</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">CSS3 Master Class</h3> <p itemprop="description" class="card-description">Learn how to build a real-world site using everything from Border Radius, Border Image, Box Shadow, Linear and Radial Gradients and more.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark7305438" role="img"> <title id="checkmark7305438">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="pro-content"><a href="/account/enrollment"><span>Courses Plus</span></a></li><li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/12" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-12"> <a class="card-box" href="/library/fluid-grids"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/fluid-grids"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT78M" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">78 min</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">Fluid Grids</h3> <p itemprop="description" class="card-description">Learn how to create fluid grid layouts using percentage based widths. We'll go over everything you need to know to extract fluid grid calculations from high fidelity mockups.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9314373" role="img"> <title id="checkmark9314373">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="pro-content"><a href="/account/enrollment"><span>Courses Plus</span></a></li><li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/9" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-9"> <a class="card-box" href="/library/html5-mobile-web-applications"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/html5-mobile-web-applications"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT4H" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">4 hours</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">HTML5 Mobile Web Applications</h3> <p itemprop="description" class="card-description">Learn how to build a mobile HTML5 web app that will work across multiple devices, from start to finish using canvas, localStorage and video.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark1469216" role="img"> <title id="checkmark1469216">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="pro-content"><a href="/account/enrollment"><span>Courses Plus</span></a></li><li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/17" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-17"> <a class="card-box" href="/library/treehouse-quick-tips"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/treehouse-quick-tips"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT3H" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">3 hours</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">Treehouse Quick Tips</h3> <p itemprop="description" class="card-description">Treehouse Quick Tips are fast and easy lessons that you can start applying now. Learn to create stunning designs in Photoshop, beautiful websites, and useful mobile apps for Android and iOS.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark5165044" role="img"> <title id="checkmark5165044">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> <li class="card bonus-content-series topic-front-end" data-location="library" data-activity="bonus_content_series/16" itemscope="itemscope" itemtype="https://schema.org/Course" id="BonusContentSeries-16"> <a class="card-box" href="/library/the-treehouse-show-2012-2015"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="url" content="/library/the-treehouse-show-2012-2015"> <meta itemprop="category" content="HTML" /> <meta itemprop="availability" content="https://schema.org/InStock" /> </div> <div itemprop="provider" itemscope itemtype="https://schema.org/Organization"> <meta itemprop="name" content="Treehouse" /> <link itemprop="url" href="https://teamtreehouse.com" /> </div> <div itemprop="hasCourseInstance" itemscope itemtype="https://schema.org/CourseInstance"> <meta itemprop="courseMode" content="Online" /> <meta itemprop="courseWorkload" content="PT30H" /> </div> <div class="card-progress"> <svg class="bonus-icon card-icon" preserveAspectRatio="xMinYMin meet" viewBox="0 0 18 18"> <path d="M17,18H1c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1h16c0.6,0,1,0.4,1,1v16 C18,17.6,17.6,18,17,18z M11,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C10,16.6,10.4,17,11,17z M7,17c0.6,0,1-0.4,1-1 c0-0.6-0.4-1-1-1s-1,0.4-1,1C6,16.6,6.4,17,7,17z M3,17c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1s-1,0.4-1,1C2,16.6,2.4,17,3,17z M3,1 C2.4,1,2,1.4,2,2s0.4,1,1,1s1-0.4,1-1S3.6,1,3,1z M7,1C6.4,1,6,1.4,6,2s0.4,1,1,1s1-0.4,1-1S7.6,1,7,1z M11,1c-0.6,0-1,0.4-1,1 s0.4,1,1,1s1-0.4,1-1S11.6,1,11,1z M15,1c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S15.6,1,15,1z M16,4H2v10h14V4z M15,15 c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1s1-0.4,1-1C16,15.4,15.6,15,15,15z M7.5,6c0.1,0,0.1,0,0.2,0l4.1,2.5C11.9,8.7,12,8.8,12,9 c0,0.1-0.1,0.3-0.2,0.4l-4.1,2.5C7.6,12,7.5,12,7.5,12c-0.1,0-0.2,0-0.2-0.1C7.1,11.8,7,11.7,7,11.5v-5c0-0.2,0.1-0.3,0.2-0.4 C7.3,6,7.4,6,7.5,6z"></path> </svg> <span class="card-estimate add-topic-background-color">30 hours</span> </div> <strong class="card-type">Bonus Series</strong> <h3 itemprop="name" class="card-title">The Treehouse Show (2012 - 2015)</h3> <p itemprop="description" class="card-description">The Treehouse Show is your weekly dose of web design and web development news, hosted by Nick Pettit and Jason Seifer.</p> <div class="card-status"> <svg class="complete-icon card-status-icon" preserveAspectRatio="xMinYMin meet" viewBox="140 0 140 120" aria-labelledby="checkmark9778212" role="img"> <title id="checkmark9778212">Checkmark</title> <path d="M197.3,120l-52.8-52c-6-6-6-17,0-23c7-6,16.9-6,23.9,0l26.9,27l54.8-66c6-7,16-8,23.9-2c7,6,8,16,2,23 L197.3,120z"></path> </svg> <span class="card-status-title">Viewed</span> </div> </a> <ul class="card-tags tags"> <li class="topic-front-end topic topic"><a data-filter-list-val="topic:html" href="/library/topic:html"><span>HTML</span></a></li> <li class="truncated-tags"><span></span><ul></ul></li> </ul> </li> </ul> </div> <div id="no-results" style="display:"> <p><b>Whoops!</b> Perhaps you can try a broader search.</p> <p><a href="#" class="filter-reset button button-secondary">Reset all filters</a></p> </div> <div class="grid-100" data-markup-move-target> <!-- Markup mover landing spot --> </div> </div> </div> </div></main> </div> <svg xmlns="http://www.w3.org/2000/svg" class="color-bar-footer" width="100%" height="3" viewBox="0 0 1441 3" preserveAspectRatio="none"> <g fill="none" fill-rule="evenodd"> <rect width="144" height="3" fill="#0B88C3"/> <rect width="144" height="3" x="144" fill="#00D377"/> <rect width="144" height="3" x="288" fill="#00B950"/> <rect width="144" height="3" x="432" fill="#FFD247"/> <rect width="144" height="3" x="576" fill="#FF9800"/> <rect width="144" height="3" x="720" fill="#FF464F"/> <rect width="144" height="3" x="864" fill="#FF82B3"/> <rect width="144" height="3" x="1008" fill="#FF4385"/> <rect width="144" height="3" x="1152" fill="#A47DCC"/> <rect width="145" height="3" x="1296" fill="#875BB5"/> </g> </svg> <footer> <div class="footer"> <!-- Left --> <div class="footer-left"> <ul class="links-2020-footer list-unstyled"> <h4>Treehouse</h4> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked About" data-event-label="Source: Footer" href="/about">About</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Blog" data-event-label="Source: Footer" href="https://blog.teamtreehouse.com/">Blog</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Careers" data-event-label="Source: Footer" href="/jobs">Careers</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Community" data-event-label="Source: Footer" href="/community/topic:html">Community</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Stories" data-event-label="Source: Footer" href="/stories">Stories</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse Shop" data-event-label="Source: Footer" href="https://teespring.com/stores/teamtreehouse">Shop</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Contact" data-event-label="Source: Footer" href="/support">Contact</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Contact" data-event-label="Source: Footer" href="/giftcard">Gift Card</a></li> </ul> </div> <!-- Middle --> <div class="footer-middle"> <h4 class="catcta"><a href="/library">See Full Catalogue</a></h4> <div class="footer-catalogue"> <div class="footer-catalogue-tech"> <h4><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Techdegrees" data-event-label="Source: Footer" href="/techdegree">Techdegree</a></h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Front End Web Development" data-event-label="Source: Footer" href="/techdegree/front-end-web-development">Front End Web Development</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Full Stack JavaScript" data-event-label="Source: Footer" href="/techdegree/full-stack-javascript">Full Stack JavaScript</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Python Development" data-event-label="Source: Footer" href="/techdegree/python-development">Python Development</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Data Analysis" data-event-label="Source: Footer" href="/techdegree/data-analysis">Data Analysis</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked UX Design" data-event-label="Source: Footer" href="/techdegree/ux-design">UX Design</a></li> </ul> </div> <div class="footer-catalogue-tracks"> <h4>Tracks</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Learn to Code for Beginners" data-event-label="Source: Footer" href="/tracks/learn-to-code-for-beginners">Learn to Code for Beginners</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning Python" data-event-label="Source: Footer" href="/tracks/beginning-python">Beginning Python</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning SQL" data-event-label="Source: Footer" href="/tracks/beginning-sql">Beginning SQL</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Beginning Java" data-event-label="Source: Footer" href="/tracks/beginning-java">Beginning Java</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked See More Tracks" data-event-label="Source: Footer" href="/tracks">...see more</a></li> </ul> </div> <div class="footer-catalogue-courses"> <h4>Courses</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked JavaDcript Basics" data-event-label="Source: Footer" href="/library/javascript-basics">JavaScript Basics</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Intro to HTML & CSS" data-event-label="Source: Footer" href="/library/introduction-to-html-and-css">Intro to HTML & CSS</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Python Basics" data-event-label="Source: Footer" href="/library/python-basics">Python Basics</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked CSS Layout" data-event-label="Source: Footer" href="/library/css-layout">CSS Layout</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked See more Courses" data-event-label="Source: Footer" href="/library">...see more</a></li> </ul> </div> </div> </div> <!-- Right --> <div class="footer-right"> <h4>Explore</h4> <ul class="links-2020-footer list-unstyled"> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Plans" data-event-label="Source: Footer" href="/plans">Plans</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Affiliates" data-event-label="Source: Footer" href="https://join.teamtreehouse.com/affiliates">Affiliates</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Perks" data-event-label="Source: Footer" href="/perks">Perks</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Physical Library Access" data-event-label="Source: Footer" href="/libraries/find-your-library">Free Treehouse Near Me</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse for Libraries" data-event-label="Source: Footer" href="https://join.teamtreehouse.com/libraries/">Treehouse for Libraries</a></li> <li><a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Treehouse for Teams" data-event-label="Source: Footer" href="/teams">Treehouse for Businesses</a></li> </ul> </div> </div> <div class="footer-tail"> <ul class="list-unstyled social"> <li><a title="Twitter" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Twitter Icon" data-event-label="Source: Footer" href="https://twitter.com/treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="twitter-icon" aria-labelledby="twitterIcon9516307" role="img"> <title id="twitterIcon9516307">Twitter</title> <path d="M19,8.3c-0.5,0.2-1,0.4-1.5,0.4c0.6-0.3,1-0.9,1.2-1.5c-0.5,0.3-1.1,0.5-1.7,0.7C16.5,7.3,15.8,7,15,7 c-1.5,0-2.7,1.2-2.7,2.8c0,0.2,0,0.4,0.1,0.6c-2.2-0.1-4.2-1.2-5.5-2.9C6.7,7.9,6.5,8.4,6.5,8.9c0,1,0.4,1.8,1.2,2.3 c-0.4,0-1.2-0.1-1.2-0.3c0,0,0,0,0,0c0,1.3,0.9,2.5,2.2,2.7c-0.2,0.1-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.5-0.1c0.3,1.1,1.3,1.9,2.5,1.9 c-0.9,0.7-2.1,1.2-3.3,1.2c-0.2,0-0.4,0-0.6,0c1.2,0.8,2.6,1.2,4.1,1.2c4.9,0,7.6-4.2,7.6-7.9c0-0.1,0-0.2,0-0.4 C18.2,9.4,18.6,8.9,19,8.3z"></path> </svg></a></li> <li><a title="YouTube" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked YouTube Icon" data-event-label="Source: Footer" href="https://youtube.com/user/gotreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="youtube-icon" aria-labelledby="youtubeIcon5324185" role="img"> <title id="youtubeIcon5324185">YouTube</title> <path d="M19.5,8.2c-0.2-0.7-0.7-1.2-1.4-1.4C16.9,6.5,12,6.5,12,6.5s-4.9,0-6.1,0.3C5.2,7,4.7,7.6,4.5,8.2C4.2,9.5,4.2,12,4.2,12 s0,2.5,0.3,3.8c0.2,0.7,0.7,1.2,1.4,1.4c1.2,0.3,6.1,0.3,6.1,0.3s4.9,0,6.1-0.3c0.7-0.2,1.2-0.7,1.4-1.4c0.3-1.2,0.3-3.8,0.3-3.8 S19.8,9.5,19.5,8.2z M9.9,15V9l5.2,3L9.9,15z"></path> </svg></a></li> <li><a title="Facebook" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Facebook Icon" data-event-label="Source: Footer" href="https://facebook.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="facebook-icon" aria-labelledby="facebookIcon1922897" role="img"> <title id="facebookIcon1922897">Facebook</title> <path d="M10.3,19.8V13H7.8v-2.8h2.5V8c0-2.4,1.5-3.8,3.7-3.8c1.1,0,2.2,0.2,2.2,0.2v2.4h-1.2c-1.2,0-1.6,0.8-1.6,1.5v1.8h2.7 L15.6,13h-2.3v6.8H10.3z"></path> </svg></a></li> <li><a title="LinkedIn" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked LinkedIn Icon" data-event-label="Source: Footer" href="https://linkedin.com/company/treehouse-island-inc-"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="linked-in-icon" aria-labelledby="linkedinIcon5351897" role="img"> <title id="linkedinIcon5351897">LinkedIn</title> <path d="M17.5,5.5h-11C6,5.5,5.6,6,5.5,6.5v11.1c0,0.5,0.4,0.9,1,0.9h11c0.5,0,0.9-0.4,1-0.9V6.5C18.5,6,18.1,5.5,17.5,5.5z M9.4,16.6H7.5v-6.2h1.9V16.6z M8.4,9.5C7.8,9.5,7.3,9,7.3,8.4s0.5-1.1,1.1-1.1s1.1,0.5,1.1,1.1S9,9.5,8.4,9.5z M16.6,16.6h-1.9v-3 c0-0.7,0-1.7-1-1.7s-1.2,0.8-1.2,1.6v3.1h-1.9v-6.2h1.8v0.9c0.4-0.6,1-1,1.8-1c2,0,2.3,1.3,2.3,3L16.6,16.6z"></path> </svg></a></li> <li><a title="Instagram" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Instagram Icon" data-event-label="Source: Footer" href="https://instagram.com/teamtreehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="instagram-icon" aria-labelledby="instagramIcon3507580" role="img"> <title id="instagramIcon3507580">Instagram</title> <path d="M16.6,18.5H7.4c-1,0-1.9-0.8-1.9-1.9V7.4c0-1,0.8-1.9,1.9-1.9h9.3c1,0,1.9,0.8,1.9,1.9v9.3C18.5,17.7,17.7,18.5,16.6,18.5z M12,10.1c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9s1.9-0.8,1.9-1.9S13,10.1,12,10.1z M15.7,7.4c-0.6,0-0.9,0.4-0.9,0.9 s0.4,0.9,0.9,0.9s0.9-0.4,0.9-0.9S16.3,7.4,15.7,7.4z M16.6,12h-0.9c0,2-1.7,3.7-3.7,3.7S8.3,14,8.3,12H7.4v3.7 c0,0.6,0.4,0.9,0.9,0.9h7.4c0.6,0,0.9-0.4,0.9-0.9V12z"></path> </svg></a></li> <li><a title="TikTok" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked TikTok Icon" data-event-label="Source: Footer" href="https://tiktok.com/@team.treehouse"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 24 24" class="tiktok-icon"> <g id="BXaky5.tif"> <g> <path d="M17.6,8.5C17.6,8.5,17.6,8.5,17.6,8.5c-0.1,0-0.1,0-0.2-0.1c-0.8-0.1-1.5-0.5-2-1.1C15,7,14.7,6.6,14.5,6.1 C14.5,6,14.4,6,14.3,6c-0.6,0-1.1,0-1.7,0c-0.2,0-0.2,0-0.2,0.2c0,2.6,0,5.2,0,7.8c0,1.1-0.8,1.9-1.9,1.9c-1,0-1.9-0.8-1.9-1.9 c0-1,0.8-1.9,1.9-1.9c0.2,0,0.4,0,0.6,0c0.1,0,0.2,0,0.2-0.2c0-0.6,0-1.2,0-1.8c0,0,0-0.1,0-0.1c-0.4,0-0.8,0-1.2,0 c-2.1,0.2-3.6,2.1-3.5,4.2c0.1,2.1,1.8,3.7,3.9,3.8c2.2,0,4.1-1.7,4.1-3.9c0-1.5,0-3.1,0-4.6c0-0.1,0-0.1,0-0.2 c0.8,0.8,1.7,1.2,2.8,1.3C17.4,9.8,17.5,9.2,17.6,8.5z"></path> </g> </g> </svg></a></li> <li><a title="Discord" target="_blank" rel="noopener" data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Discord Icon" data-event-label="Source: Footer" href="https://discord.com/invite/RNNxkTHAUT"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 14 11" class="discord-icon"> <g id="surface1"> <path d="M 11.859375 1.035156 C 10.941406 0.609375 9.96875 0.308594 8.972656 0.136719 C 8.835938 0.382812 8.710938 0.636719 8.601562 0.898438 C 7.539062 0.734375 6.457031 0.734375 5.394531 0.898438 C 5.285156 0.636719 5.160156 0.382812 5.027344 0.136719 C 4.027344 0.308594 3.054688 0.613281 2.136719 1.039062 C 0.308594 3.769531 -0.1875 6.4375 0.0585938 9.066406 C 1.128906 9.863281 2.328125 10.472656 3.601562 10.863281 C 3.886719 10.472656 4.140625 10.058594 4.359375 9.625 C 3.945312 9.46875 3.546875 9.277344 3.164062 9.050781 C 3.265625 8.976562 3.363281 8.902344 3.457031 8.828125 C 4.566406 9.355469 5.777344 9.628906 7 9.628906 C 8.222656 9.628906 9.433594 9.355469 10.542969 8.828125 C 10.636719 8.90625 10.734375 8.980469 10.835938 9.050781 C 10.453125 9.277344 10.050781 9.472656 9.636719 9.628906 C 9.855469 10.0625 10.109375 10.472656 10.394531 10.863281 C 11.671875 10.476562 12.871094 9.867188 13.941406 9.066406 C 14.230469 6.019531 13.445312 3.378906 11.859375 1.035156 Z M 4.675781 7.449219 C 3.984375 7.449219 3.414062 6.816406 3.414062 6.035156 C 3.414062 5.257812 3.964844 4.617188 4.671875 4.617188 C 5.378906 4.617188 5.945312 5.257812 5.933594 6.035156 C 5.921875 6.816406 5.378906 7.449219 4.675781 7.449219 Z M 9.324219 7.449219 C 8.632812 7.449219 8.066406 6.816406 8.066406 6.035156 C 8.066406 5.257812 8.617188 4.617188 9.324219 4.617188 C 10.035156 4.617188 10.597656 5.257812 10.585938 6.035156 C 10.570312 6.816406 10.027344 7.449219 9.324219 7.449219 Z M 9.324219 7.449219 "></path> </g> </svg></a></li> </ul> <div class="legal-links"> <a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Terms & Conditions" data-event-label="Source: Footer" href="/terms">Terms & Conditions</a></li> <span>|</span> <a data-featurette="analytics-click-event" data-event-category="button" data-event-action="M: Clicked Privacy" data-event-label="Source: Footer" href="/privacy">Privacy</a></li> </div> <p class="copyright-message">© 2025 Treehouse Island, Inc.</p> </div> </footer> <div id="mini-profile-container"></div> <div id="tarp" class="modal-tarp" style="display: none;" data-featurette="tarp"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/8.4.4/swiper-bundle.min.js" defer="defer" aysnc="true"></script> <script src="https://ecs-static.teamtreehouse.com/assets/application_vendor-190e58c76a02c6db7ade130f3dd31bde5c398709b1af3261fd56a768836c437c.js" crossorigin="anonymous" defer="defer" integrity="sha256-GQ5Yx2oCxtt63hMPPdMb3lw5hwmxrzJh/VanaINsQ3w="></script> <script src="https://ecs-static.teamtreehouse.com/assets/application-35a8d45d797f31fa96a9e8c1bf74532a40290afe0afe98b7cc63ee27379c151b.js" crossorigin="anonymous" defer="defer" integrity="sha256-NajUXXl/MfqWqejBv3RTKkApCv4K/pi3zGPuJzecFRs="></script> <!-- Segment.io Analytics --> <script type="text/plain" class="optanon-category-2" async> !function(){ var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0"; analytics.load("DMUKccVYvuuUIVSJlokCJe0YQyGm9qVb"); analytics.ready(function(){ window.analytics.segmentDebug = window.analytics.debug; window.analytics.debug = function(state) { if (state == null) { state = true; } $.cookie("_treehouse_analytics_debug", state); return state; }; }) window.recordedAnalytics = [] function recordAnalyticsCall(callType, event, properties, options) { if ($.cookie("_treehouse_analytics_debug") == "true") { window.recordedAnalytics.push([callType, event, properties, options]) console.debug("Analytics: ", callType, ("'" + event + "'"), properties, options); } } analytics.on('alias', function(e, p, o) { recordAnalyticsCall('alias', e, p, o)}); analytics.on('identify', function(e, p, o) { recordAnalyticsCall('identify', e, p, o)}); analytics.on('group', function(e, p, o) { recordAnalyticsCall('group', e, p, o)}); analytics.on('track', function(e, p, o) { recordAnalyticsCall('track', e, p, o)}); analytics.on('page', function(e, p, o) { recordAnalyticsCall('page', e, p, o)}); var request_id = "649552e2-16fb-4292-8098-cdb15256901b"; function trackIdentity() { window.analytics.identify({"visitor_id":"8980945128","session_id":"357f9588-8365-4f12-9bdb-c8b4a7fd45fb"}); } function trackPage() { window.analytics.page({ visitor_id: "8980945128", session_id: "357f9588-8365-4f12-9bdb-c8b4a7fd45fb", request_id: request_id }); } trackIdentity(); trackPage(); $(document).on("pjax:success", function(event, body, status, xhr, options) { request_id = xhr.getResponseHeader("X-Request-Id"); trackPage(); }); }}(); //# sourceURL=_analytics_footer.erb </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/7320745.js"></script> <!-- End of HubSpot Embed Code --> <script src="https://ecs-static.teamtreehouse.com/packs/js/application-9900001412a776dd2112.js"></script> <!-- Include the recaptcha javascript library --> </body> </html>