<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Blog Title</title>
  <subtitle>This is a longer description about your blog.</subtitle>
  <link href="https://example.com/feed/feed.xml" rel="self" />
  <link href="https://example.com/" />
  <updated>2024-03-14T00:00:00Z</updated>
  <id>https://example.com/</id>
  <author>
    <name>Your Name</name>
  </author>
  <entry>
    <title>Embracing fluid layouts to craft dynamic web pages</title>
    <link href="https://example.com/articles/embracing-fluid-layouts-dynamic-web-pages/" />
    <updated>2024-03-14T00:00:00Z</updated>
    <id>https://example.com/articles/embracing-fluid-layouts-dynamic-web-pages/</id>
    <content type="html">&lt;p&gt;Responsive design is not a new concept on the web. For many years we have utilised media queries to adapt web pages across screen sizes and devices. Yet, in true engineer fashion, most people took a very systematic approach to this.&lt;/p&gt;
&lt;h2 id=&quot;standerdised-breakpoints&quot;&gt;Standerdised breakpoints&lt;/h2&gt;
&lt;p&gt;The most common of these is to pick 3-4 common device sizes to focus on and create a set of consistent breakpoints. These are usually named something like: mobile, tablet, large tablet and desktop. With this approach, every time you need a new page, the designer will provide 4 designs; 1 for each size. Then during the build, the developer will match their media queries to those designs. Those pages are then checked at those breakpoints to make sure they match the designs. Once everyone is happy with the result, the page gets deployed and we move on to the next one.&lt;/p&gt;
&lt;p&gt;As long as you did some research when picking the breakpoints, this approach can work well. Assuming the majority of your users will see that page at those exact viewport sizes (or close to them).  But it&#39;s likely that between those breakpoints, the page won&#39;t look it&#39;s best. For example, when a single column layout gets stretched so far the page looks empty. Or times when the content is a little tight for a few pixels until you hit that next breakpoint.&lt;/p&gt;
&lt;p&gt;In such cases, a fluid layout approach could be a better solution. The concept is that the layout is completely fluid and will adjust as and when it needs to. So the values you use in your media queries could be completely different between pages. This is because you are building the pages to suit the layout of the content rather than a static list of values. Fluid layouts allow for a more seamless transition as the viewport scales. This helps you eliminate any content displaying in an odd way between breakpoints.&lt;/p&gt;
&lt;h2 id=&quot;how-fluid-layouts-differ-from-breakpoints&quot;&gt;How fluid layouts differ from breakpoints&lt;/h2&gt;
&lt;p&gt;The best way to approach creating fluid layouts is to utilise fluid units. Percentages (%), viewport width (vw) and fractions (fr) are the main ones you will need to get familiar with. These units will create some basic responsive behaviour even without any media queries! You can then layer in media queries at points where content needs to adapt to a particular viewport size. The goal is for your page to look good at any size and on any device. Whether a user is on a particularly narrow phone (hello Samsung fold) or on an ultrawide 49&amp;quot; display.&lt;/p&gt;
&lt;p&gt;By adopting a fluid layout approach, you ensure that your website appears as intended. You also mitigate the risk of jarring layout changes at specific breakpoints. Instead, the layout will fill the screen in a natural way and provide a more satisfying experience.&lt;/p&gt;
&lt;h2 id=&quot;but-what-about-consistency&quot;&gt;But what about consistency?&lt;/h2&gt;
&lt;p&gt;A fluid approach to layouts doesn’t mean an end to consistency. There will be use-cases where a standardised set of breakpoints will come in handy. Some areas of your page may need to be in alignment and change at the same time. So it&#39;s still useful to have a few consistent queries to rely on.&lt;/p&gt;
&lt;p&gt;The trick is use them only where they are useful rather than to restrict yourself and others on your team. You should still have the freedom to add any other media queries you need to make the page look it&#39;s best. Even if those queries don&#39;t fit into a standardised set.&lt;/p&gt;
&lt;h2 id=&quot;fluid-typography-is-your-friend&quot;&gt;Fluid typography is your friend&lt;/h2&gt;
&lt;p&gt;Making your typography more fluid will also help  in achieving the fluid effect. By using CSS functions like clamp() you can make your typography scale with the viewport. This is a much nicer effect than an abrupt font size change and helps keep everything on your page balanced. And for those supporting older browsers - you can achieve the same effect with a combination of calc() formulas and media queries.&lt;/p&gt;
&lt;p&gt;Remember, the goal is to create a smoother visual transition as the screen size changes. Fluid layouts and typography are all about embracing the web&#39;s inherent flexibility and making your site look great at any size.&lt;/p&gt;
&lt;p&gt;Beyond the visual aesthetics, fluid layouts are also about improving the user experience. They  provide better readability across screen sizes and devices than adaptive layouts. Also, they ensure that interactive elements are accessible, regardless of the device size.&lt;/p&gt;
&lt;h2 id=&quot;give-fluid-layouts-a-try&quot;&gt;Give fluid layouts a try&lt;/h2&gt;
&lt;p&gt;To conclude, I&#39;d like to invite you all to give this approach a try. Especially those who have never strayed from their consistent set of breakpoints. In addition to the many issues the fluid layout approach solves, it can also help you future proof!&lt;/p&gt;
&lt;p&gt;The increasing variety of device sizes and resolutions can make development very difficult. We dread the idea of new devices with unique screen resolutions getting launched. And if they become popular enough, it could result in having to refactor all your pages to fit the new normal. With fluid layouts, these issues will be far less likely. Your site will adapt seamlessly to any screen size and ensure a consistent user experience.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>CSS in 2024 - Properties &amp; Values for Modern Development</title>
    <link href="https://example.com/articles/css-2024-properties-and-values-for-modern-development/" />
    <updated>2024-02-07T00:00:00Z</updated>
    <id>https://example.com/articles/css-2024-properties-and-values-for-modern-development/</id>
    <content type="html">&lt;p&gt;It has been a long while since I posted anything to this blog! Recently I&#39;ve put some time into it, cleaned up the cob-webs and updated the design. Now I just need some juicy content, and first up is CSS!&lt;/p&gt;
&lt;p&gt;CSS has come such a long way in the last couple of years and is still evolving. It can take new features a while to get integrated into new browsers though. So you have to wait for them to have enough support to make them safe to use in production on large scale products. Unfortunately, this means we sometimes forget to start using new features, even when the support is in place.&lt;/p&gt;
&lt;p&gt;So, to help you stay up to date I have put a little round up of some CSS properties and values that I think will be really useful to add to your daily use in 2024.&lt;/p&gt;
&lt;h2 id=&quot;properties&quot;&gt;Properties&lt;/h2&gt;
&lt;p&gt;Let’s start the list with some of the properties.&lt;/p&gt;
&lt;h3 id=&quot;margin-block-and-margin-inline&quot;&gt;Margin-block &amp;amp; margin-inline&lt;/h3&gt;
&lt;p&gt;I had seen these properties around for a while but never actually used them until I redesigned this blog. I found them very useful though. The idea is to use the writing mode to figure out the orientation of the element. So margin-block will add margins to the top/bottom of the element and margin-inline applies to the sides. Then if the writing mode changes the values rotate with the element. The block property will always be above and below the text and the inline property will be on the left and right. It’s pretty clever and very useful for those developing for different languages.&lt;/p&gt;
&lt;p&gt;My personal favourite use case though is to centre align items! You can utilise margin-inline: auto to position block elements in the centre of the container. You no longer have to set the let and right margins individually or override top and bottom values.&lt;/p&gt;
&lt;h3 id=&quot;padding-block-and-padding-inline&quot;&gt;Padding-block &amp;amp; padding-inline&lt;/h3&gt;
&lt;p&gt;This works the same way as the margin properties but for padding. In my experience, introducing these has been very useful. And you can still mix it in with the original set of properties. For example, if you want equal padding on all 4 sides or if you want to target a specific side of the element.&lt;/p&gt;
&lt;h3 id=&quot;block-size-and-inline-size&quot;&gt;Block-size &amp;amp; inline-size&lt;/h3&gt;
&lt;p&gt;Again, very similar to the previous properties - but this time a replacement for width and height.  Since this site is only using horizontal left-to-right writing mode, I didn&#39;t use these properties in this project. There are definitely some good use cases for them though. Particularly if you have any transitions that manipulate the orientation of the element.&lt;/p&gt;
&lt;h3 id=&quot;inset-inset-block-and-inset-inline&quot;&gt;Inset, inset-block &amp;amp; inset-inline&lt;/h3&gt;
&lt;p&gt;This one is such a time saver for those absolutely positioned elements! You no longer have to write 4 lines to set top, bottom, left and right to 0. Now you can just use inset which will set all 4 properties in one. And you can actually provide 4 values to it if you want to set different values to each side. The shorthand works the same way as margin or padding and it makes things so much easier. You also have the inset-block and inset-inline properties which work the same way as the other inline and block properties.&lt;/p&gt;
&lt;h3 id=&quot;aspect-ratio&quot;&gt;Aspect-ratio&lt;/h3&gt;
&lt;p&gt;This one is not new! But I think it can get forgotten so I wanted to give it a shout out. You no longer need to do padding hacks to make elements keep their aspect ratio on resizing. This can be good for hero components that have background images with some text and need to keep their shape.&lt;/p&gt;
&lt;h2 id=&quot;values&quot;&gt;Values&lt;/h2&gt;
&lt;p&gt;Now time to look at some of the values you can start implementing.&lt;/p&gt;
&lt;h3 id=&quot;clamp&quot;&gt;Clamp()&lt;/h3&gt;
&lt;p&gt;This is technically a function but is used as a value so I’m going to put it here. The function clamps the middle value between an upper and lower bound. It’s particularly useful for fluid typography without needing to add media queries. This is the most typical use case, but it can be used as a value for any property so you can get creative with it.&lt;/p&gt;
&lt;h3 id=&quot;dvw-and-dvh-units&quot;&gt;Dvw &amp;amp; dvh units&lt;/h3&gt;
&lt;p&gt;The vw and vh units are so useful and have become pretty mainstream in CSS. But did you know there are more viewport units? Svw and svh represent small viewport width and height, and lvw and lvh represent large viewport width and height. These take into account the browser interface, with small being the smallest the browser can be and large being the largest.&lt;/p&gt;
&lt;p&gt;All the viewport units are useful, but browsers with varying interface sizes tend to be dynamic. For example, on mobile devices the browser can adjust as you scroll. So if you wanted something to be full screen, the other units may not work at all times. This is why dynamic viewport units - dvw and dvh are so useful! They will adjust with the dynamic browser interface and keep things in proportion at all times!&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;These are just a few of the properties and values that I think will elevate your CSS code. And they are well supported so safe to start using immediately. This is just a small sample of the new CSS features that can elevate your code. I&#39;m going to save some of them for their own dedicated posts though. If you&#39;re interested in reading about that, make sure to check back often for new articles. In the meantime, please sign up for the newsletter to stay up to date. Also, follow along on social media for more frequent updates.&lt;/p&gt;
&lt;p&gt;Happy coding 🙂&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Switching my blog from Gatsby to Eleventy (11ty)</title>
    <link href="https://example.com/articles/switching-my-blog-from-gatsby/" />
    <updated>2021-09-01T00:00:00Z</updated>
    <id>https://example.com/articles/switching-my-blog-from-gatsby/</id>
    <content type="html">&lt;p&gt;Firstly I’d like to say a big hello and welcome back! I know it’s been a while but I’m back with a new design, which I really love as well as a new tech stack behind the scenes which I’d like to tell you a little more about.&lt;/p&gt;
&lt;h2 id=&quot;some-background&quot;&gt;Some background&lt;/h2&gt;
&lt;p&gt;Before we dive in though, a little background. The previous version of this website was built with Gatsby.js which is pretty awesome and I&#39;m glad I took the time to try it out. The documentation and community is amazing with lots of starter templates for every website imaginable. It’s also based on React.js which is still growing in popularity so it’s somewhat familiar to most of us. I would still highly recommend it as a great framework.&lt;/p&gt;
&lt;p&gt;However, I always thought that React generated just a little too much JavaScript for my liking. Especially for a simple website where the amount of actual required Javascript was minimal (currently less than 50 lines of JS code for the whole site). So while I think it’s a really great option (and it gave me the opportunity to practice my react skills) it was a little too much for this particular project.&lt;/p&gt;
&lt;p&gt;When I decided to create a new design for this site and bring it back to life, it wasn’t my intention to completely re-code it. The plan was just to update a few of the components and CSS since that would be quicker. However I quickly found that it was taking longer and I wasn’t really enjoying the process. Plus I still felt like React was a little too much for a personal site that only had a handful of pages. So I decided it was time to dig out my list of new tech I’ve been wanting to try (which I know every developer has) and see if there’s a better option. Enter Eleventy (also known as 11ty).&lt;/p&gt;
&lt;p&gt;Eleventy is a javascript based static site generator and does require node.js to generate the site files (similar to Gatsby) but my favourite part is that you get to choose everything including the templating language. I really appreciate the flexibility it offers and the fact that I could set up my project exactly the way I wanted and it worked perfectly. The other great thing is that it has zero boilerplate client side JavaScript, which means any JavaScript on the site is only what you put there. This is brilliant and means that it will even work for people who have javascript disabled (or at least mostly depending on how much interaction you built in - which is more than can be said about a lot of sites these days).&lt;/p&gt;
&lt;p&gt;The fact that there is such a huge prominence put on accessibility and performance is another reason for my choice. I love that the community encourages developers to get the highest lighthouse scores and make sure that the websites we create are accessible and performant.&lt;/p&gt;
&lt;p&gt;In total, it took about 2 and a half weeks to completely re-code my entire site over to Eleventy (or more accurately 2 weekends and a few evenings) which I was really impressed with and it’s generally been a pleasure to work with! I decided to use nunjucks for templating and found it really easy to work with even though I had never used it before. I have also heard good things about it’s integration with netlify, although I didn’t go down that route so can’t speak from experience. I highly recommend giving Eleventy a go for anyone who is thinking of starting a personal site or a side project.&lt;/p&gt;
&lt;h2 id=&quot;useful-links&quot;&gt;Useful links&lt;/h2&gt;
&lt;p&gt;I wanted to leave a few links for both frameworks/generators that I found really useful in case anyone else was curious and wanted to try them out!&lt;/p&gt;
&lt;h3 id=&quot;gastby&quot;&gt;Gastby&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gatsbyjs.com/docs/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;Gatsby documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sitepoint.com/gatsby-guide/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;Getting started with Gatsby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.netlify.com/with/gatsby/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;Deploy Gatsby on Netlify&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;eleventy&quot;&gt;Eleventy&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.11ty.dev/docs/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;Eleventy documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://11ty.rocks/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;11ty Rocks (tips &amp;amp; resources)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.netlify.com/blog/2020/04/09/lets-learn-eleventy-boost-your-jamstack-skills-with-11ty/&quot; rel=&quot;noreferrer&quot; target=&quot;_blank&quot;&gt;lets learn Eleventy! (includes video version)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-next&quot;&gt;What’s next&lt;/h2&gt;
&lt;p&gt;Now that the site is in better shape you can count on seeing some new posts a little more frequently. I also want to create some starter themes, templates and some other resources so do keep an eye out for those and if you have any suggestions of articles or resources you’d like to see feel free to reach out on my social media channels.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Create a CSS only image gallery</title>
    <link href="https://example.com/articles/create-css-only-image-gallery/" />
    <updated>2020-04-26T00:00:00Z</updated>
    <id>https://example.com/articles/create-css-only-image-gallery/</id>
    <content type="html">&lt;p&gt;Sometimes all you need is a simple web page. You might be creating a prototype or throwing together a landing page to gauge interest for a new product. Setting up environments and builds can take up unnecessary time when you can just use any text editor to write a simple HTML &amp;amp; CSS web page and run it straight in the browser! However, if that page needs a gallery you usually end up finding a JavaScript library to make it work.&lt;/p&gt;
&lt;p&gt;But you don’t need JavaScript to create a library. Well, you probably do if you want some complex logic, but if you just need a way to show people a larger version of a thumbnail you can do it with CSS alone. It’s pretty straight forward, I’ll show you.&lt;/p&gt;
&lt;h2 id=&quot;start-with-the-structure&quot;&gt;Start with the structure&lt;/h2&gt;
&lt;p&gt;Let&#39;s start with the HTML.
The structure is important here as we are going to be using radio inputs to determine the selected image. Therefore, the input, thumbnail and large image all need to be in a container together and in a specific order. Look at the sample HTML code below:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery__item&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;radio&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img-1&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;checked&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery__selector&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery__img&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://i.picsum.photos/id/1015/600/400.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img-1&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery__thumb&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://i.picsum.photos/id/1015/150/100.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make sure the ID on the input matches the for on the &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; element. The large image should be after the &lt;code&gt;&amp;lt;input/&amp;gt;&lt;/code&gt; tag and the thumbnail should go inside the &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt;. Create multiple gallery__item divs, one for each of your images. Remember to make sure each has a unique ID but the same name attribute for the functionality to work.&lt;/p&gt;
&lt;h2 id=&quot;make-it-look-good&quot;&gt;Make it look good&lt;/h2&gt;
&lt;p&gt;Now for the styling. I will be using SCSS in the examples just to make it a little easier. Let&#39;s start with some basic setup:&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;* &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;box-sizing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; border-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token property&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$max-img-width&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 600px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token property&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$max-img-height&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 400px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;img &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;max-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;vertical-align&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; top&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The gallery will be responsive but you will need a maximum width and height of your large image. There are also some additional properties for all the images. The vertical alignment will remove the space below the images and the maximum width will mean the images will scale down within a container.&lt;/p&gt;
&lt;p&gt;Now to add some styling to the gallery container. It will be centred and capped at the larges width of the image. The padding will create a space for the large image to be positioned in and the percentage padding will allow the image to maintain the correct aspect ratio.&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.gallery &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; flex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10px auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;max-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$max-img-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; relative&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding-top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$max-img-height&lt;/span&gt;/&lt;span class=&quot;token variable&quot;&gt;$max-img-width&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; screen &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;min-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$max-img-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;padding-top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$max-img-height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The image needs to be absolutely positioned within the padding space created by the container. It also means it will break out of the row of thumbnails. You can change the image transition and the thumbnail spacing to best match the rest of your page.&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.gallery__img &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; opacity 0.3s ease-in-out&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.gallery__thumb &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding-top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 6px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 6px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The styling for the input is the most important part, and it’s what makes everything work. The input itself needs to be hidden so you don’t have a radio button floating around and then the images can be styled when the input is selected. In this case, the opacity is changed to make the large image visible and the thumbnail image gets a box-shadow so you can see that it’s selected.&lt;/p&gt;
&lt;pre class=&quot;language-scss&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.gallery__selector &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token selector&quot;&gt;&lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;:checked &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token selector&quot;&gt;+ .gallery__img &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token selector&quot;&gt;~ .gallery__thumb &gt; img &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 0 0 3px #0be2f6&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;final-result&quot;&gt;Final result&lt;/h2&gt;
&lt;p&gt;That’s it! Now you have a functional image gallery without needing any JavaScript. Here is an example of what the final result looks like:&lt;/p&gt;
&lt;iframe height=&quot;400&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;CSS Image Gallery&quot; src=&quot;https://codepen.io/Lubna/embed/MWapdjE?default-tab=result&amp;theme-id=dark&quot; frameborder=&quot;no&quot; loading=&quot;lazy&quot; allowtransparency=&quot;true&quot; allowfullscreen=&quot;true&quot;&gt;
&lt;/iframe&gt;
&lt;script async=&quot;&quot; src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
</content>
  </entry>
  <entry>
    <title>Courses &amp; tutorials to refresh web development skills</title>
    <link href="https://example.com/articles/courses-and-tutorials-to-refresh-your-web-dev-skills/" />
    <updated>2020-04-19T00:00:00Z</updated>
    <id>https://example.com/articles/courses-and-tutorials-to-refresh-your-web-dev-skills/</id>
    <content type="html">&lt;p&gt;Technology is always changing and evolving and the same goes for programming and web development. I feel like almost every week I find out about a new framework, library or API that can be used to make your websites and apps a little more powerful and easier to build. I think everyone has a handful of go-to tools that you refer to every time you start a new project but it’s important to keep learning and updating that toolset so it doesn’t become outdated.&lt;/p&gt;
&lt;p&gt;Keep in mind, you don’t have to learn or like everything you come across. Some tools you find may not be to your taste and that is fine, but it’s a good idea to try them out so you can make up your mind. I tend to keep a list of new things I’d like to try out and add to it every time I come across something new. Then when I have some time I have something to refer to. So I thought I would share some of my recommendations for things you can learn to improve your web development skills. I tried to share courses that are free (or have a free option) so hopefully, they will be accessible to most people.&lt;/p&gt;
&lt;h2 id=&quot;css-flexbox-and-grid&quot;&gt;CSS flexbox &amp;amp; grid&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://example.com/static/img/articles/courses-tutorials/css-flexbox-grid.webp&quot; alt=&quot;CSS flexbox &amp;amp; grid&quot;&gt;&lt;/p&gt;
&lt;p&gt;CSS flexbox and grid have been around for a while now but have continued to gain popularity since browser support has grown (especially for grid). There are quite a few things to remember when trying to create layouts using these methods and plenty of cheat sheets for it online. I found these mini code games quite useful though. I think the practical element of writing the correct code to progress through the game helps you remember it more easily than looking up a specific use case. So if you are looking to advance your CSS templating knowledge you should give them a go.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://flexboxfroggy.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flexbox Froggy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cssgridgarden.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grid Garden&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;content-design&quot;&gt;Content design&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://example.com/static/img/articles/courses-tutorials/content-design.webp&quot; alt=&quot;Introduction to content design&quot;&gt;&lt;/p&gt;
&lt;p&gt;If you are looking to level up your content design skills then try out this course. It was designed by The Government Digital Service and gives an introduction to content design as well as content design principles you can use. Content is often overlooked but it’s an important part of any website so if you are struggling to find your tone of voice or unsure how to structure your content then definitely give this one a try.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.futurelearn.com/courses/introduction-to-content-design&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to content design&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;react-js&quot;&gt;React.js&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://example.com/static/img/articles/courses-tutorials/react.webp&quot; alt=&quot;Learn React.js&quot;&gt;&lt;/p&gt;
&lt;p&gt;I think React is awesome! For anyone who knows JavaScript, it’s pretty easy to learn and once you know it the possibilities are endless. It’s a good place to start as it can be used on small and large websites. Also, there is quite a lot of demand for React skills in the job market. I learned React a few years ago when we decided to start using it at work and I’m so glad I did. The React docs are pretty good for anyone looking to start but I have also found a couple of courses for those who prefer a more structured approach.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://egghead.io/courses/the-beginner-s-guide-to-react&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Beginner&#39;s Guide to React&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.codecademy.com/learn/react-101&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;Learn ReactJS&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;graphql&quot;&gt;GraphQL&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://example.com/static/img/articles/courses-tutorials/graphql.webp&quot; alt=&quot;Tutorial for GraphQL&quot;&gt;&lt;/p&gt;
&lt;p&gt;GraphQL is quite new to me and to be honest I didn’t like it at first. Being a front-end developer I didn’t think it was for me but I’m glad I gave it a try. I’m still relatively new to it and still have lots to learn but from what I’ve learned so far it’s very powerful. I feel it’s a nice way for front-end developers to try out more of the server-side parts of a website and maybe even a first step into becoming a more full-stack developer.
This course is really good and even lets you pick your tech-stack so you can use it in an environment you are already familiar with.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.howtographql.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Fullstack Tutorial for GraphQL&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;gatsby&quot;&gt;Gatsby&lt;/h2&gt;
&lt;p&gt;This blog is built with Gatsby so I thought I would include it here as a bonus. Gatsby is a framework based on React but the starter apps make it so easy to get started. If you are building a personal website I highly recommend it. I don’t have a course to share for this one but I did recently create a quick start guide on Instagram that you can refer to. Alternatively, the Gatsby docs are really good and will have you on your way in no time.&lt;/p&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-captioned=&quot;&quot; data-instgrm-permalink=&quot;https://www.instagram.com/p/B_Fj9o1Df-O/?utm_source=ig_embed&amp;amp;utm_campaign=loading&quot; data-instgrm-version=&quot;13&quot; style=&quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&quot;&gt;&lt;div style=&quot;padding:16px;&quot;&gt; &lt;a href=&quot;https://www.instagram.com/p/B_Fj9o1Df-O/?utm_source=ig_embed&amp;amp;utm_campaign=loading&quot; style=&quot; background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;&quot; target=&quot;_blank&quot;&gt; &lt;div style=&quot; display: flex; flex-direction: row; align-items: center;&quot;&gt; &lt;div style=&quot;background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;&quot;&gt;&lt;/div&gt; &lt;div style=&quot;display: flex; flex-direction: column; flex-grow: 1; justify-content: center;&quot;&gt; &lt;div style=&quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;&quot;&gt;&lt;/div&gt; &lt;div style=&quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;padding: 19% 0;&quot;&gt;&lt;/div&gt; &lt;div style=&quot;display:block; height:50px; margin:0 auto 12px; width:50px;&quot;&gt;&lt;svg width=&quot;50px&quot; height=&quot;50px&quot; viewBox=&quot;0 0 60 60&quot; version=&quot;1.1&quot; xmlns=&quot;https://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;https://www.w3.org/1999/xlink&quot;&gt;&lt;g stroke=&quot;none&quot; stroke-width=&quot;1&quot; fill=&quot;none&quot; fill-rule=&quot;evenodd&quot;&gt;&lt;g transform=&quot;translate(-511.000000, -20.000000)&quot; fill=&quot;#000000&quot;&gt;&lt;g&gt;&lt;path d=&quot;M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div style=&quot;padding-top: 8px;&quot;&gt; &lt;div style=&quot; color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;&quot;&gt; View this post on Instagram&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;padding: 12.5% 0;&quot;&gt;&lt;/div&gt; &lt;div style=&quot;display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;&quot;&gt;&lt;div&gt; &lt;div style=&quot;background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);&quot;&gt;&lt;/div&gt; &lt;div style=&quot;background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;&quot;&gt;&lt;/div&gt; &lt;div style=&quot;background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 8px;&quot;&gt; &lt;div style=&quot; background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;&quot;&gt;&lt;/div&gt; &lt;div style=&quot; width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: auto;&quot;&gt; &lt;div style=&quot; width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);&quot;&gt;&lt;/div&gt; &lt;div style=&quot; background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);&quot;&gt;&lt;/div&gt; &lt;div style=&quot; width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div style=&quot;display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;&quot;&gt; &lt;div style=&quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;&quot;&gt;&lt;/div&gt; &lt;div style=&quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&quot;&gt;&lt;a href=&quot;https://www.instagram.com/p/B_Fj9o1Df-O/?utm_source=ig_embed&amp;amp;utm_campaign=loading&quot; style=&quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;&quot; target=&quot;_blank&quot;&gt;A post shared by Lubna | Frontend Web Developer (@lubnadev)&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;script async=&quot;&quot; src=&quot;https://www.instagram.com/embed.js&quot;&gt;&lt;/script&gt;
&lt;p&gt;Hopefully, that has given you some ideas about some technologies you might want to look into. Happy learning!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Colouring with code</title>
    <link href="https://example.com/articles/colouring-with-code/" />
    <updated>2020-03-22T00:00:00Z</updated>
    <id>https://example.com/articles/colouring-with-code/</id>
    <content type="html">&lt;p&gt;Do you like colouring books? Are you getting a little bored and running out of things to do at home? Well, I have created some digital colouring pages that you can colour with code. There is a lot going on in the world right now so I wanted to share something lighthearted and fun. Something everyone can take part in and share with their friends and family online.&lt;/p&gt;
&lt;p&gt;The concept came to me last year while trying to think up a task to explain CSS (I created a &lt;a href=&quot;https://codepen.io/Lubna/pen/zYYzOxN&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Halloween themed colouring page&lt;/a&gt;). Since it’s a pretty easy syntax anyone should be able to use these colouring pages to create some cool art. I thought springtime would be a good theme to try out this time and hopefully, that will result in some very colourful illustrations.&lt;/p&gt;
&lt;p&gt;So here are 2 colouring pages for you to try for yourself:&lt;/p&gt;
&lt;iframe height=&quot;756&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;Hello Spring - CSS colouring page&quot; src=&quot;https://codepen.io/Lubna/embed/dyoqzwP?height=756&amp;theme-id=dark&amp;default-tab=result&quot; frameborder=&quot;no&quot; allowtransparency=&quot;true&quot; allowfullscreen=&quot;true&quot;&gt;
  See the Pen &lt;a href=&quot;https://codepen.io/Lubna/pen/dyoqzwP&quot;&gt;Hello Spring - CSS colouring page&lt;/a&gt; by Lubna
  (&lt;a href=&quot;https://codepen.io/Lubna&quot;&gt;@Lubna&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;iframe height=&quot;591&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;Cute Cacti - CSS colouring pages&quot; src=&quot;https://codepen.io/Lubna/embed/RwPYjGB?height=591&amp;theme-id=dark&amp;default-tab=result&quot; frameborder=&quot;no&quot; allowtransparency=&quot;true&quot; allowfullscreen=&quot;true&quot;&gt;
  See the Pen &lt;a href=&quot;https://codepen.io/Lubna/pen/RwPYjGB&quot;&gt;Cute Cacti - CSS colouring pages&lt;/a&gt; by Lubna
  (&lt;a href=&quot;https://codepen.io/Lubna&quot;&gt;@Lubna&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;p&gt;If you want to try it out, sign up for an account at codepen.io and click ‘fork’ in the bottom right of the pen to save a copy to your account. Then you can make any changes you like, save the results and share it online. For those who are new to CSS, just change the &lt;code&gt;fill&lt;/code&gt; and &lt;code&gt;stroke&lt;/code&gt; values to whatever colour you like (you can find many sources online for colour hex codes) and for those a little more advanced I challenge you to add some animations and cool effects.&lt;/p&gt;
&lt;p&gt;If you do have a go, share it on Twitter / Instagram with the hashtag &lt;strong&gt;#ColorWithCSS&lt;/strong&gt; so we can see all the different creations out there.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;i&gt;Credit for the original illustrations:
&lt;a href=&quot;https://www.freepik.com/free-vector/colorful-hello-spring-lettering-background_3934839.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;hello spring lettering &lt;/a&gt;,
&lt;a href=&quot;https://www.freepik.com/free-vector/hello-spring-concept-with-cactus_7082955.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;cactus illustration&lt;/a&gt;&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Using Storybook with React &amp; Typescript</title>
    <link href="https://example.com/articles/using-storybook-with-react-and-typescript/" />
    <updated>2020-03-15T00:00:00Z</updated>
    <id>https://example.com/articles/using-storybook-with-react-and-typescript/</id>
    <content type="html">&lt;p&gt;Recently I’ve been working a lot with Storybook as we are using it to document our evolving design system at work. If you haven’t heard of Storybook before, it’s a tool that lets you easily create and document UI components. It started out solely focused on React but they have added support for many other frameworks including Angular and Vue as well as just plain HTML.&lt;/p&gt;
&lt;p&gt;When we first adopted react as a framework we used it alongside FlowJs. Since both were created by Facebook it made sense to use the tools in tandem. However, after a while of using Flow, the decision was made to switch over to Typescript. Throughout this process, we were already using Storybook to visualise the react components we had, but the documentation wasn’t really part of the equation.&lt;/p&gt;
&lt;p&gt;At the end of last year, we decided to put together a more official “design system” and focus more on documenting our components as well as visualising them. It was perfect timing since Storybook had just brought out its docs addon which allows the use of .mdx files to create more custom and detailed docs. So, I set up a new instance of Storybook with all the latest updates and added all the addons we thought would be useful.&lt;/p&gt;
&lt;p&gt;This is when I started to run into some problems. For me, the most important part of storybook was the props table. I’m sure anyone who has used a component library can relate, you pick your component and try to use it but aren’t sure what the props are named and which ones are required. So you end up having to go to the repo and opening up the file to see what the props are. This makes the whole process take much longer and requires many different tools before you finally have enough information to use the component. The Storybook props table makes this a lot easier as you can see a list of all the possible props and which ones are required right alongside the component itself. Furthermore, you can annotate the props (during the creation of the component) to give more information and context around what each prop is for.&lt;/p&gt;
&lt;p&gt;Out of the box, Storybook handles React prop types on its own without much additional setup. This was not the same for Typescript though and I ended up going through a lot of trial and error before I managed to get everything working. This may change and become a little easier in the future but in order to avoid going through that again, I created a Storybook boilerplate that I could use anytime I needed a new instance of the tool. Recently, I thought it might be useful to others so I have put it on my GitHub so you can easily clone it and get started.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/lubna/storybook-react-typescript-boilerplate&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Visit storybook boilerplate repo.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After getting more experience using the tool, I feel like it’s very powerful and definitely a good choice, but I also have some tips for anyone looking to start using it.&lt;/p&gt;
&lt;h2 id=&quot;do-the-majority-of-the-setup-first&quot;&gt;Do the majority of the setup first&lt;/h2&gt;
&lt;p&gt;Take some time think about what it is that you want to accomplish with Storybook and get the setup ready first, before adding any components. I have found that adding new addons and making config changes can have a ripple effect and require you to make changes to your stories. If you have a lot of components and stories this can be a long process and can make debugging challenging.&lt;/p&gt;
&lt;h2 id=&quot;keep-storybook-in-the-same-repo-as-your-components&quot;&gt;Keep storybook in the same repo as your components&lt;/h2&gt;
&lt;p&gt;All the Storybook tools work best if they are kept in the same repo as the components. This is because Storybook needs to consume the un-compiled versions of your components (especially if you use typescript and want the props table) so the tools work best when kept together. If this is not an option or you have multiple repos with components you want to display in a single Storybook then you may have to create compiled components to use in your apps and a un-compiled version for Storybook.&lt;/p&gt;
&lt;h2 id=&quot;have-a-playground-version-of-your-storybook&quot;&gt;Have a “playground” version of your storybook&lt;/h2&gt;
&lt;p&gt;Similar to the first tip, once you have your storybook setup it’s a good idea to save it as your own boilerplate and playground. You can put a test component in there to make sure everything works and that way if you need to add a new addon or make changes to the config you have a safe environment to try it out first.&lt;/p&gt;
&lt;h2 id=&quot;keep-up-to-date-with-the-latest-version&quot;&gt;Keep up to date with the latest version&lt;/h2&gt;
&lt;p&gt;Storybook is constantly evolving and getting better so make sure you upgrade regularly to get the latest features and bug fixes. It’s also open source so you can always get involved and contribute your ideas.&lt;/p&gt;
&lt;p&gt;I hope those tips will come in handy as you create your own Storybook setup. If you want to learn more about the tool, &lt;a href=&quot;https://storybook.js.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;you can do so on their website&lt;a&gt;.&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>CSS loading spinners</title>
    <link href="https://example.com/articles/css-loading-spinners/" />
    <updated>2020-03-09T00:00:00Z</updated>
    <id>https://example.com/articles/css-loading-spinners/</id>
    <content type="html">&lt;p&gt;CSS is my favourite language. That statement can be seen as quite controversial but it’s been true ever since I started web development. I think it’s very powerful and important but can sometimes be overlooked. Because of my love for CSS, I often find myself trying to create CSS versions of things. So I thought I would share a way to create CSS spinner animations.&lt;/p&gt;
&lt;p&gt;A lot of the time loading animations are created with an image. This isn’t always the optimal way as an image can take a while to be downloaded especially over a slow network. SVG versions that are embedded into the page work a little better since they are part of the code and get loaded with the page, but the amount of SVG code can be quite large and if used in multiple places can really bulk up a web page. So if you are looking for a simple loading spinner then creating it purely from CSS can be a great option. Also, you will only need to write one class and then re-use it as many times as you need which means they won’t make your file sizes too large and cause them to take longer to be downloaded by the browser.&lt;/p&gt;
&lt;p&gt;##A simple spinner&lt;/p&gt;
&lt;p&gt;Let&#39;s start with an example of a very basic spinner:&lt;/p&gt;
&lt;iframe height=&quot;337&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;Simple CSS loading spinner&quot; src=&quot;https://codepen.io/Lubna/embed/gOpoRxX?height=337&amp;theme-id=dark&amp;default-tab=css,result&quot; frameborder=&quot;no&quot; allowtransparency=&quot;true&quot; allowfullscreen=&quot;true&quot;&gt;
  See the Pen &lt;a href=&quot;https://codepen.io/Lubna/pen/gOpoRxX&quot;&gt;Simple CSS loading spinner&lt;/a&gt; by Lubna
  (&lt;a href=&quot;https://codepen.io/Lubna&quot;&gt;@Lubna&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;p&gt;The height, width and border-width can all be altered to suit your style, the real magic is done with the border colour. Though the shape of the spinner looks round, it&#39;s still technically a square with rounded corners and therefore still has 4 sides. So, we can set a different border colour to the 4 sides to create the illusion that one quarter is filled in and the rest is semi-transparent. Alternatively, you can set the colour to &lt;code&gt;transparent&lt;/code&gt; to make the “track” part of the spinner invisible. Keep in mind that the border width needs to remain the same one all sides and setting something like &lt;code&gt;border-width: 4px 0;&lt;/code&gt; will create a weird shape (unless that is what you’re going for). Once the shape is ready, you can use &lt;code&gt;@keyframes&lt;/code&gt; to create the animation.&lt;/p&gt;
&lt;p&gt;If you are looking for something with a little different style you can try adjusting the CSS to create many different shapes and designs as well as some interesting animations. Below are a few I created to get you started, feel free to open them up on CodePen and play around with the code to see what you can come up with.&lt;/p&gt;
&lt;iframe height=&quot;561&quot; style=&quot;width: 100%;&quot; scrolling=&quot;no&quot; title=&quot;CSS only loading spinners&quot; src=&quot;https://codepen.io/Lubna/embed/VwLrRxz?height=561&amp;theme-id=dark&amp;default-tab=result&quot; frameborder=&quot;no&quot; allowtransparency=&quot;true&quot; allowfullscreen=&quot;true&quot;&gt;
  See the Pen &lt;a href=&quot;https://codepen.io/Lubna/pen/VwLrRxz&quot;&gt;CSS only loading spinners&lt;/a&gt; by Lubna
  (&lt;a href=&quot;https://codepen.io/Lubna&quot;&gt;@Lubna&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;p&gt;Of course, there will be times when you want a more custom and detailed loading animation. In those cases, I think going with an SVG version is the best option since while you can make some rather complex designs with CSS it&#39;s not practical in a production environment. Also, consider using loading skeleton layouts when loading large sections of your page and save the spinners for smaller sections. While adding a skeleton can add a little extra bulk, the perceived page load feels faster so your users will appreciate it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Why I became a STEM ambassador</title>
    <link href="https://example.com/articles/why-i-became-a-stem-ambassador/" />
    <updated>2020-03-02T00:00:00Z</updated>
    <id>https://example.com/articles/why-i-became-a-stem-ambassador/</id>
    <content type="html">&lt;p&gt;The STEM learning organisation in the UK is the largest provider of education and careers support in science, technology, engineering and mathematics (STEM). The organisation allows people who work in those fields to become STEM ambassadors and offer training and resources so that you can help introduce young people to STEM subjects and get them inspired for their future career. It’s run on a volunteer basis so everyone who signs up volunteers to donate their time for the worthy cause.&lt;/p&gt;
&lt;p&gt;I became a STEM ambassador a couple of years ago in hopes of inspiring young people to pursue a career in technology. When I was at school, we didn’t have many programs in place for professionals to come in and speak to us about their careers and their journey. The one time it did happen though, I found it extremely inspirational and positive. Now I want to give back and do that for other students that are still at school and are thinking about what comes next.&lt;/p&gt;
&lt;p&gt;I think in today&#39;s world, we make some assumptions that are not always correct. One assumption I always made, was that because young people access technology and the internet at a much younger age, they must know what developers are and what they do. However, I was mistaken. While it’s true access to technology is much more readily available, it’s also almost seamless and second nature so not everyone questions how everything works behind the scenes. Therefore even though web and software development have become much more popular as careers young people aren’t necessarily aware of that. Technology is moving fast though and is already one of the most in demand jobs so it’s important for young people to know what that means for them and what opportunities are out there.&lt;/p&gt;
&lt;p&gt;There are so many incorrect stereotypes about who developers and programmers are and what they are like and I like to think I can help dispel those. One of the main ones I feel strongly about is that all developers like and are good at maths. Don’t get me wrong, there is some maths in coding and there are some developers who are brilliant at maths, but you don’t have to be a mathematician in order to write good code. I’ve never been amazing at maths and it was actually my least favourite subject in school. I am very logical though and so coding principles make sense in my mind, quite a lot more than algebra and trigonometry did while I was in school.&lt;/p&gt;
&lt;p&gt;In addition, the benefits are not one-sided, and as a STEM ambassador you get as much out of the experience as the young people you speak to. One of the reasons I joined was to improve my public speaking skills. Giving presentations about my journey and career path helped me be more confident in what I was saying and gave me some insight into how I personally prepare for presentations. This has in turn helped me present at work to my colleagues and to the wider business. There are also plenty of networking opportunities to meet other people who have a career in STEM and learn about their field.&lt;/p&gt;
&lt;p&gt;So I just want to say, for all my fellow developers and anyone else who has a career in a STEM subject, consider becoming a STEM ambassador and inspire young people in your area. For those not in the UK there might be other organisations that do a similar thing where you live. It’s important to inspire the next generation and make sure they carry on with and improve on what we have built so far.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>My journey into web development</title>
    <link href="https://example.com/articles/my-journey-into-web-development/" />
    <updated>2020-03-01T00:00:00Z</updated>
    <id>https://example.com/articles/my-journey-into-web-development/</id>
    <content type="html">&lt;p&gt;I’m a big fan of an origin story. Reading about how a person started their career or how a product went from idea to reality is really inspiring to me, so I thought I should make my first post on this blog about my origin story and how I ended up here.&lt;/p&gt;
&lt;p&gt;When I was younger I would always be changing my mind on what I wanted to be when I grew up, as I think most kids do. The one thing I knew for sure if that I wanted to be very successful and I wanted to do something important. Then in my early teens, I settled on being a lawyer and decided that is the career path I would pursue through college and university. At around the same time I discovered graphic design, I didn&#39;t know it yet, but that discovery changed my life!&lt;/p&gt;
&lt;h2 id=&quot;it-all-started-with-a-little-site-called-myspace&quot;&gt;It all started with a little site called MySpace&lt;/h2&gt;
&lt;p&gt;For those who don’t remember it, Myspace was a very popular online social networking site between 2005 - 2008. I was never very active at social networking online as I don’t consider myself to be very good at it, but the thing that caught my eye was the customisations people were creating for myspace profiles. Myspace allowed CSS &amp;amp; JavaScript injections, and while that’s probably not very secure, it did mean that with a few lines of code you could customise your profile and make it really unique. There were hundreds of websites that offered custom layouts as well as glitter graphics, banners, album covers, music player skins, etc. and I was determined to learn and become one of those websites.&lt;/p&gt;
&lt;p&gt;I started to learn photoshop and graphic design, I joined a few forums where other graphic creators shared their designs and website links. I felt like I found a whole new world and reason to be online. I was still only about 13 years old, and like many people at the time, we had a family computer that was for everyone. This meant I only got a few hours a day to be online and practice my new hobby. I did all the photoshop tutorials I could find (which wasn’t that many at the time) and downloaded thousands of custom fonts and brushes. After a while, I got quite good and decided I was good enough to share my creations with the world. I started sharing on the forums but quickly decided I needed my own website so I went in search of how to do that.&lt;/p&gt;
&lt;p&gt;Some of you will remember a website called Piczo, where a lot of people started on their web developer journey, and I was no exception. I had one of those websites with the glittery welcome sign, an about me section, hit counter and guest book. It was terrible. But I still think of it fondly. I did outgrow Piczo relatively quickly and instead found a site builder to use. I don’t quite remember the name of it anymore but it was a very early version of a site builder where you can choose a template and colours and create pages. It was still pretty terrible but looked a bit more like a “real” website over the Piczo ones, so I happily uploaded all my graphics and sent the URL out on the forums.&lt;/p&gt;
&lt;p&gt;That just wasn’t enough for me though. The other websites looked much better than mine, they were making custom layouts for their websites and they had domains that matched the name of their sites. So I started to explore and learn. I must mention that a lot of resources we have now weren’t around then and while YouTube was a thing, it was mostly used for funny videos rather than useful tutorials, so getting started was a challenge. Luckily, I managed to get my hands on a copy of Dreamweaver (back when it was still Macromedia Dreamweaver before adobe bought them) and the familiar interface allowed me to create some very basic web pages. Through using Dreamweaver’s visual interface, talking to people on the forum and inspecting the source of the websites I liked, I managed to learn HTML and CSS. It took some time and my websites still weren’t amazing but they started to look a little more like the ones I aspired to so I was very happy.&lt;/p&gt;
&lt;p&gt;Eventually, I managed to get myself a domain (by signing up to a survey website and earning enough points to get a .info domain for free) and even convinced my mum to buy me some cheap hosting for $12 per year. One summer I even participated in a forum sale and made a pretty penny selling some of my graphics. Even though I had fallen in love with graphic and web design, I never thought of it as anything more than a hobby and still intended to become a lawyer. It wasn’t until it was time to look for work experience in the last year of high school, and I couldn’t find a law firm to work at, that my mum suggested I look at web design agencies. I didn’t end up finding any offering work experience but it did get me thinking about making my hobby a career.&lt;/p&gt;
&lt;h2 id=&quot;when-the-pieces-fell-into-place&quot;&gt;When the pieces fell into place&lt;/h2&gt;
&lt;p&gt;I decided to go to college to study Interactive Media and then on to university to get a BSc in Web &amp;amp; Multimedia. I often wonder what my life would be like if I never discovered those MySpace websites, but in the end, I’m always glad that I did. Although I’m sure I would have made a fine lawyer, I don’t think I would have loved it as much as I love being a web developer. Besides, I think I still achieved my childhood dream. I consider myself successful in my field and the websites I help build can impact people&#39;s lives, which can definitely be classed as important.&lt;/p&gt;
</content>
  </entry>
</feed>