<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Website design - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Website design - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 26 Jun 2026 22:47:46 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/website-design/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Choose a CMS – Tips for Content Management Systems ]]>
                </title>
                <description>
                    <![CDATA[ By Scott Gary If you're an entrepreneur or a developer, chances are you'll work with a content management systems (CMS) at some point. And knowing how to analyze the many features of the CMS options out there is important when choosing the right one ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-choose-a-cms/</link>
                <guid isPermaLink="false">66d460f2ffe6b1f641b5fa7f</guid>
                
                    <category>
                        <![CDATA[ cms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 01 Jun 2023 23:06:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/how-to-choose-cms.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Scott Gary</p>
<p>If you're an entrepreneur or a developer, chances are you'll work with a content management systems (CMS) at some point. And knowing how to analyze the many features of the CMS options out there is important when choosing the right one for your use case.</p>
<p>In this article, I'll explain why CMSs exist, the problems they help solve, and I'll also offer helpful guidance in choosing the right CMS for your needs.</p>
<h2 id="heading-what-is-a-cms">What is a CMS?</h2>
<p>You can think of a CMS as an extremely user-friendly database for your website’s content.</p>
<p>A CMS provides an intuitive interface that allows website owners and content creators to manage a website's content without requiring advanced technical skills.</p>
<p>As an example, think about it from the perspective of someone who wants to own a blog, but doesn’t know anything about web development. It would be very difficult, if not impossible, for this person to modify the source code of the web site in order to add a new article to the blog.</p>
<p>This is where a CMS comes in. The CMS is linked to the owner’s website, and the site has built in code that pulls data from the CMS and automatically publishes this data on the site. In this example, the data could be a new blog article and image.</p>
<h2 id="heading-headless-cms-vs-traditional-cms">Headless CMS vs Traditional CMS</h2>
<p>You may have heard the term “headless CMS” floating around, and wondered what that was all about. Nowadays, CMSs come in two flavors; a traditional CMS, and a headless CMS. Let’s take a look at a few definitions to get a better grasp of each:</p>
<h3 id="heading-what-is-a-traditional-cms">What is a Traditional CMS?</h3>
<p>A traditional CMS is a complete website management system that not only stores your content in a user-friendly database, but also offers a front end, usually a WYSIWYG style editor to build out your actual web page. </p>
<p>The front-end UI designer and backend storage system are unified in one intuitive interface. Wordpress is a famous example of a traditional CMS.</p>
<h3 id="heading-what-is-a-headless-cms">What is a Headless CMS?</h3>
<p>A headless CMS is similar to the traditional CMS, but without the front-end WYSIWYG editor to build your site. If you think of your actual webpage as the “head”, and your content as the “body”, then this starts to make sense. </p>
<p>A headless CMS is totally independent of your site’s design, and you can typically use any framework of choice and connect it to the headless CMS. The headless CMS acts similar to a backend database, but is tailor-made for handling typically used website content like images and rich text.</p>
<h2 id="heading-when-do-i-need-a-cms">When Do I Need a CMS?</h2>
<p>Before concerning yourself with choosing the right CMS for your needs, it is essential to understand whether you actually need one. CMSs are designed to streamline the process of creating, editing, and managing digital content, primarily for websites.</p>
<p>If you’re wondering whether you should consider a CMS, ask yourself the following questions:</p>
<ol>
<li>Does the website require frequent content updates, such as articles or product listings?</li>
<li>Will there be multiple content authors collaborating on the website's content?</li>
<li>Does the website require flexible content structuring and organization to accommodate future changes?</li>
</ol>
<p>If you answered yes to one of these questions, there’s a good chance that your project would benefit from the features offered by a good CMS.</p>
<h2 id="heading-cms-integration-and-compatibility">CMS Integration and Compatibility</h2>
<p>It’s important to consider ease of integration with your chosen system or framework. You may be considering adding some functionality to your site such as an e-commerce system or customer relationship management (CRM) software. Or you may just be starting a new project from scratch.</p>
<p>Either way, it is crucial to ensure that the CMS you select can seamlessly integrate with these systems.</p>
<p>Most frameworks, such as Next.js, Gatsby or Astro, will offer a list of official CMS plugins that streamline the process of integration. Of course, a CMS can be added to any project without an official plugin by utilizing the API from your CMS of choice, and coding everything manually.</p>
<p>But it’s usually wise to look for a CMS that is supported by your framework, as it takes much of the heavy lifting out of the equation and allows you to focus on other pressing concerns.  </p>
<p>For example my blog has a list of the <a target="_blank" href="https://www.ohmycrawl.com/nextjs/best-cms/">best CMS for Next.js</a> to choose from. Most frameworks have a number of CMSs that are compatible and created by 3rd party developers.</p>
<p>When searching for a CMS with seamless integration and compatibility, look to your framework’s official docs for guidance, which should tell you what public libraries are available.</p>
<h2 id="heading-cms-features-to-consider">CMS Features to Consider</h2>
<p>When evaluating CMS options, do some research and testing rather than going for the first option that pops up. While the specific requirements may vary depending on your project, here are some fundamental features to look for:</p>
<ol>
<li><strong>User-Friendliness:</strong> The CMS should have an intuitive and user-friendly interface, enabling non-technical users to manage and update content easily. </li>
<li><strong>Content Organization:</strong> Effective content organization is crucial for a CMS. Look for features such as categorization, tagging, and metadata management to ensure your content is easily searchable and conveniently organized.</li>
<li><strong>SEO Optimization:</strong> Ensure the CMS supports essential SEO features, such as image optimization, full-featured rich text editors, and friendly URLs.</li>
</ol>
<h2 id="heading-common-cms-pitfalls">Common CMS Pitfalls</h2>
<p>There are a few potential pitfalls you should consider, because utilizing a CMS doesn’t always live up to expectations. Here are a few common challenges:</p>
<ol>
<li><strong>Overwhelming Complexity:</strong> This may seem oxymoronic, considering my earlier statement that CMSs are supposed to simplify things. But everyone is different, and one CMS may not suit your taste as much as the next person. It’s a good idea to create an account and take a look around, maybe even create some content, just to get a feel for whether the CMS is right for you.</li>
<li><strong>Hidden Costs:</strong> Many CMSs claim they are free. But almost all of them begin charging when you reach a certain threshold of traffic or storage capacity. It’s important that you do your research, and ensure that you’re considering whether your project will venture into the realm of “paid service” sooner than you expected.</li>
<li><strong>Limited Support and Documentation:</strong> When encountering issues or needing assistance, reliable support and comprehensive documentation is paramount. Ensure that the CMS you choose has an active community, official support channels, and extensive documentation or user guides. This support network can be invaluable in troubleshooting problems and learning how to make the most of the CMS's features.</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Choosing the right CMS is an important decision that can impact your website's performance, scalability, and ease of management. By understanding the purpose of a CMS and evaluating your specific needs, you can make an informed decision that aligns with your goals.   </p>
<p>Ultimately, a CMS should empower you to efficiently create, manage, and update content, allowing you to focus on delivering a compelling user experience. At the end of the day, meaningful content is the goal, and a CMS should be a helpful hand that guides you through the process.  </p>
<p>Hope you enjoyed the post. If you want to learn more about CMSs and SEO in general checkout <a target="_blank" href="https://www.ohmycrawl.com/">OhMyCrawl</a>.  If you want to follow along with one of my side projects, checkout my latest site <a target="_blank" href="http://trustingeeks.com">Trust In Geeks</a> to follow my journey.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Create a Website Free of Cost – Website Builder Platform Guide ]]>
                </title>
                <description>
                    <![CDATA[ If you are interested in creating a website that requires no coding at all, then you can use a free website builder. In this article, I will provide you with a list of four free website builders you can choose from when creating your websites. Here i... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-create-a-website-free-of-cost-website-builder-platform-guide/</link>
                <guid isPermaLink="false">66b8d9768cd1c2aa053d49b8</guid>
                
                    <category>
                        <![CDATA[ No Code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ website development, ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jessica Wilkins ]]>
                </dc:creator>
                <pubDate>Tue, 16 Nov 2021 15:53:09 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/11/andrew-neel-cckf4TsHAuw-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you are interested in creating a website that requires no coding at all, then you can use a free website builder.</p>
<p>In this article, I will provide you with a list of four free website builders you can choose from when creating your websites.</p>
<p>Here is the complete list. If you find an option you like, then click on the link and it will take you to that section of the article.</p>
<ol>
<li><a class="post-section-overview" href="#heading-wix">Wix</a></li>
<li><a class="post-section-overview" href="#heading-weebly">Weebly</a></li>
<li><a class="post-section-overview" href="#heading-site123">SITE123</a></li>
<li><a class="post-section-overview" href="#heading-carrd">Carrd</a></li>
</ol>
<h2 id="heading-wix">Wix</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-12.54.06-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><a target="_blank" href="https://www.wix.com/">Wix</a> was founded in 2006, and it is a very popular free drag and drop website builder.</p>
<p>The free version comes with the following options:</p>
<ul>
<li>Up to 500 MB (megabytes) of storage and bandwidth </li>
<li>Assigned URL: accountname.wixsite.com/siteaddress</li>
<li>Wix ads appearing on every page</li>
</ul>
<p>You can sign up using an email address and password or with Facebook, Google or Apple.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.06.05-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you want to create a new website, you will be walked through a questionnaire to create the basic setup.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.08.02-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You have the option to design your website choosing from 100's of templates and drag and drop features. Or you can choose the [Wix Artificial Design Intelligence](https://support.wix.com/en/article/about-wix-adi#:~:text=Wix%20Artificial%20Design%20Intelligence%20(ADI,a%20stunning%20site%20for%20you!&amp;text=From%20billions%20of%20combinations%20including,%2Da%2Dkind%20free%20site!) which will create a website for you. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.11.36-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you choose the [Wix Artificial Design Intelligence](https://support.wix.com/en/article/about-wix-adi#:~:text=Wix%20Artificial%20Design%20Intelligence%20(ADI,a%20stunning%20site%20for%20you!&amp;text=From%20billions%20of%20combinations%20including,%2Da%2Dkind%20free%20site!) option, then you will be asked a series of questions on what kinds of design themes and features you are interested in.</p>
<p>Once you choose your templates, then the Wix ADI will create your basic website where you can customize the pages. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.16.29-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can also see what these sites would look like on mobile devices.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.17.28-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you choose to use the template editor, you can browse through hundreds of free templates and customize them to your liking. You can also add your own media including videos and images. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.20.21-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>When you are finished creating your site, click on Publish in the upper right hand corner of the page.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.22.13-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>It is easy to get your website up and running using clean, professional designs and there is no coding knowledge necessary.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.25.06-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-weebly">Weebly</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.42.34-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><a target="_blank" href="https://www.weebly.com/">Weebly</a> was founded in 2006 and it is a free website builder that makes it easy to build blogs, online stores, and personal sites using customizable templates. </p>
<p>The free account will provide the following options:</p>
<ul>
<li>SSL security</li>
<li>Access to the community forum</li>
<li>Access to dozens of website templates</li>
<li>Chat and Email support</li>
</ul>
<p>You can create your own account using a username and password or you can login with Facebook, Google, or Square. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.47.29-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Once you are signed in, then you can choose between a business website or personal.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.50.25-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>There are dozens of themes to choose from that you can customize to your liking.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.51.24-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>In the Weebly editor, you can add media like videos, images, files and more. You can also add features like social icons, search boxes and forms. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-1.55.56-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Once you are done customizing your website, then you click on Publish located in the upper right hand corner. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.07.36-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-site123">SITE123</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.28.25-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><a target="_blank" href="https://www.site123.com/">SITE123</a> was founded in 2015 and is a free website builder that gives you access to dozens of templates and layouts to choose from. </p>
<p>The free version comes with the following features:</p>
<ul>
<li>250 MB Storage</li>
<li>250 MB Bandwidth</li>
<li>24/7 Live chat support</li>
</ul>
<p>To get started, you can choose what kind of website you want to build.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.33.12-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can choose your website name.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.33.44-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can sign up with an email and password or with Facebook or Google. Once you are signed in then you can customize your website.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.35.49-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can also preview what it would look like in desktop, tablet, or mobile view.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.36.41-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Once you are done editing your website, then you can publish it by clicking on the green publish button in the upper right hand corner. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.37.44-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you are interested in adding a custom domain for your site, then you will need to pay for that.</p>
<h2 id="heading-carrd">Carrd</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.54.01-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><a target="_blank" href="https://carrd.co/">Carrd</a> is a free website builder where you can browser through dozens of templates and create one-page websites. </p>
<p>You can create a free account by using your name, email, and password.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.56.21-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Once you are signed in, then you can choose from dozens of templates.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.57.55-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can then modify the template by changing colors, fonts, and adding images.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.58.57-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>When you are done editing your page, click on the publish option located in the upper right hand corner. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/Screen-Shot-2021-11-15-at-2.59.44-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you are interested in having custom domains, Google analytics, and custom forms, then you can sign up for the <a target="_blank" href="https://carrd.co/pro">pro version</a>.</p>
<p>I hope you enjoyed this article on free Website builders.  </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Create a Portfolio Website – A Beginner Developer's Guide ]]>
                </title>
                <description>
                    <![CDATA[ At the beginning of 2021, I decided to revamp my portfolio site, as I do every other year.  If you've never deployed a website before, it can be quite confusing figuring out how to get your website online. Things like getting a domain name, uploading... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/beginners-guide-to-creating-a-portfolio-website/</link>
                <guid isPermaLink="false">66b9065d2fd266308aa6ff72</guid>
                
                    <category>
                        <![CDATA[ beginners guide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ personal development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ portfolio ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jemima Abu ]]>
                </dc:creator>
                <pubDate>Mon, 29 Mar 2021 22:29:35 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/A-Beginner-s-Guide-To-Creating-A-Portfolio-Website-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>At the beginning of 2021, I decided to revamp <a target="_blank" href="https://www.jemimaabu.com"><strong>my portfolio site</strong></a>, as I do every other year. </p>
<p>If you've never deployed a website before, it can be quite confusing figuring out how to get your website online. Things like getting a domain name, uploading the necessary files and choosing where to host your site can be overwhelming.</p>
<p>I remembered how difficult I found it to setup my website the first time and I wanted to help other people avoid the mistakes I made, so I sent out this tweet:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/portfolio-tweet.png" alt="Tweet from @jemimaabu on Twitter. Text says &quot;Aii, I'm changing my website design again. This time, I want to have a pair programming session with someone who's trying to set up a portfolio website. We'll discuss everything you need to know from getting a domain name to deploying the website online. Send me a DM&quot;. 12:15PM. Jan 24, 2021. Twitter for Android" width="600" height="400" loading="lazy"></p>
<p>I got more responses than I expected, so I ended up scheduling 9 sessions of 2 hours each for every weekend in February.</p>
<p>The idea was, at the end of February, I should have completed my portfolio design since I assumed helping other people would ensure I stayed on track with my plan. That plan didn't work out, but I did learn a lot in the process.</p>
<p>At the end of February, I successfully helped 6 developers (ranging from entry to mid level, and a 1:2 female-to-male ratio from 3 different countries) set up their portfolio website in one form or the other. I'll be documenting the main lessons from each session here.</p>
<p>In this article, we'll cover everything you need to know about setting up your portfolio site – from buying a domain name to deploying the site online. So let's get started.</p>
<h2 id="heading-1-how-to-get-a-domain-name">1) How to Get a Domain Name</h2>
<p>A domain name is the location of your site online. It's like having a username for the world wide web which visitors type into the URL bar to go to your site. </p>
<p>A domain name consists of a name (like <code>google</code>) and an extension (like <code>.com</code>) and it points to a specific IP address for the site you're deploying.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/domain.jpeg" alt="URL bar showing &quot;http://www.&quot;" width="600" height="400" loading="lazy"></p>
<p>Purchasing a domain name from a registry allows you determine what location that domain points to. There are multiple registries where you can purchase a domain from, so you should do your research and decide which one works for you.</p>
<p>Here are some domain registries I'd recommend based on their features:</p>
<ol>
<li><strong><a target="_blank" href="https://shareasale.com/r.cfm?b=1197848&amp;u=2778801&amp;m=46483&amp;urllink=&amp;afftrack=0https://www.shareasale.com/r.cfm?u=2778801&amp;m=46483&amp;b=518798">NameCheap</a></strong> – This is one of the more popular platforms, so it comes with a lot of customer support and hassle-free setup. They also offer free domain privacy. I'd recommend using this if you want to purchase a domain quickly.</li>
<li><strong><a target="_blank" href="https://www.bluehost.com/track/jemabu">Bluehost</a></strong> – Bluehost offers great hosting choices and comes with an inbuilt WordPress platform. I've personally used Bluehost for some client sites in the past and I really like the clean interface and onboarding guide it provides. I'd recommend using Bluehost for hosting WordPress sites.</li>
<li><a target="_blank" href="https://www.namesilo.com/?rid=17e7856ns"><strong>NameSilo</strong></a> – A major benefit of NameSilo is that <a target="_blank" href="https://www.namesilo.com/pricing?rid=17e7856ns">they offer free add-ons</a> such as WHOIS Privacy (keeping your registration details safe) and Email Forwarding (sending emails from <code>me@mysite.com</code> to your actual email address). I'd recommend using this if you need a lot of extra add-ons on your domain.</li>
<li><a target="_blank" href="https://www.netim.com/?partnerid=AJ2220"><strong>Netim</strong></a> – I'd recommend using Netim for purchasing geographical domains such as <code>.eu</code> or <code>.me</code>. A fun option is to purchase a domain that ends with the last characters in your name e.g. <code>www.jemi.ma</code>. </li>
</ol>
<blockquote>
<p>Watch out for hidden fees when purchasing a domain. Lots of registries tend to offer very cheap or even free domain names but there are usually extra charges in the renewal method. Look out for the add-ons which you might not need.</p>
</blockquote>
<p>A couple of the developers in the pair programming sessions had paid for <code>.com</code> domain names but the majority didn't own a domain name and weren't interested in purchasing one, at least for the time being. </p>
<p>The benefits of having a custom domain name are:</p>
<ul>
<li>it improves your SEO rankings  </li>
<li>it looks more professional when you're sending a link to a prospective employer or client.</li>
</ul>
<p>Domain providers charge for domain names annually, and a <code>.com</code> domain might cost you $10 to $30 dollars per year, depending on any extra additions. </p>
<p>If you aren't comfortable with paying for a domain name yet, you can opt for a free domain option. We'll explore free domain options in the next section.</p>
<h2 id="heading-2-how-to-choose-a-hosting-platform">2) How to Choose a Hosting Platform</h2>
<p>When you build a website, you can access it on your machine by going to <code>localhost</code> or index.html. However, if you want other people to be able to access your website on the internet, you need to upload it to a hosting platform.</p>
<p>A hosting platform is the <code>localhost</code> of the internet – it's a server that can be accessed by everyone.</p>
<p>Most domain registries also offer hosting options but it's not necessary to have your domain and hosting from the same place, as most registries charge an extra fee for hosting. Once you've purchased a domain name, you can use any hosting platform you'd like.</p>
<p>There's a number of hosting platforms that offer free hosting and domain names (with the platform domain attached) and you can choose any platform depending on how you'd like to structure your portfolio.</p>
<p>Let's explore the following options.</p>
<h3 id="heading-how-to-host-a-portfolio-site-without-writing-code">How to host a portfolio site without writing code</h3>
<p><strong>Platform: <a target="_blank" href="https://webflow.grsm.io/jemabu">webflow.com</a></strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/webflow.png" alt="An image of the webflow.com homepage. Image contains text &quot;The modern way to build for the text. Webflow empowers designers to build professional, custom websites in a completely visual canvas with no code.&quot;" width="600" height="400" loading="lazy"></p>
<p>Webflow is a drag-and-drop site that allows you create great looking websites by writing little to no code. </p>
<p>With Webflow, you can create amazing layouts and animations by using the HTML and CSS functions on their dashboard, and it comes with an inbuilt CMS so you don't have to worry about updating content or storing images.</p>
<p>Webflow offers a free domain option with a <code>webflow.io</code> extension, for example <code>myportfolio.webflow.io</code>. With this option, you can create a static site with 2 pages. They also have a <a target="_blank" href="https://webflow.grsm.io/jadsc">showcase of projects</a> you can clone from and <a target="_blank" href="https://webflow.grsm.io/jafrm">an online forum</a> where you can get most of your questions answered. </p>
<p>I'd recommend Webflow to designers and developers who have knowledge of CSS layouts and animations and want to quickly setup their site. </p>
<h3 id="heading-how-to-host-a-static-portfolio-built-with-html-and-css">How to host a static portfolio built with HTML and CSS</h3>
<p><strong>Platform</strong>: <a target="_blank" href="https://pages.github.com/"><strong>GitHub Pages</strong></a></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/gitpages.png" alt="GitHub Pages Websites for you and your projects. Hosted directly from your GitHub repository. Just edit, push, and your changes are live." width="600" height="400" loading="lazy"></p>
<p>GitHub Pages is a feature from the GitHub platform that allows you display the code from your repository on a <code>github.io</code> site – so the URL would look like <code>my-portfolio.github.io</code></p>
<p>GitHub pages are best suited for static websites (that is, a site built with HTML and CSS with fixed content and no server interaction or build process needed). It's also very simple to set up and can take as little as 10 minutes to get your site up and running.</p>
<p>To create a GitHub Page, your repository should include an <code>index.html</code> file in the root folder. Then, go to the Settings page of your repository and select your master branch as the source in the Github Pages section.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-13-at-18.01.23.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>This was the method most of the developers used during the pair programming sessions as it took the least amount of time and had little to no complications. I'd recommend Github Pages for beginner developers who want to deploy their static sites quickly.</p>
<h3 id="heading-how-to-host-a-site-that-uses-a-framework-like-react-or-vue">How to host a site that uses a framework like React or Vue</h3>
<p><strong>Platform:</strong> <a target="_blank" href="https://www.netlify.com/"><strong>Netlify</strong></a></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/netlify.png" alt="Netlify homepage. Modern web apps shipped faster An intuitive Git-based workflow and powerful serverless platform to build, deploy, and collaborate on web apps " width="600" height="400" loading="lazy"></p>
<p>If you're building your website with a front-end framework which requires a build process, Netlify is your best bet. It's perfect for dynamic sites (that is, a site that generates content from a server or has functionality that requires scripting – like sending messages through a contact form) and it also works with static sites.</p>
<p><a target="_blank" href="https://www.netlify.com/topics/tutorials/">Netlify has great documentation</a> that provides information on any questions you might have related to using the site. It also has key features for improving your site like <a target="_blank" href="https://www.netlify.com/products/forms/">Netlify Forms</a> which allow you set up a contact form on your site with no server-side code needed.</p>
<p>I currently use Netlify for hosting my site and it's been my favorite platform so far. I'd recommend it for developers who want to get their site (static or dynamic) up and running without any hassle in setting up a build process.</p>
<h3 id="heading-how-to-host-a-site-with-a-backend-server">How to host a site with a backend server</h3>
<p><strong>Platform:</strong> <a target="_blank" href="https://heroku.com"><strong>Heroku</strong></a></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/heroku.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If your portfolio site requires data from a backend server (like getting a list of your projects from a RESTful app), then you'll also need to deploy that server so the frontend can access it. </p>
<p>Heroku is a platform that lets you deploy backend apps from eight supported languages (including Node.js and Python). It also allows you deploy static and dynamic front end sites so you can create two projects – one for your frontend code and the other for the backend app. </p>
<p>You can visit the <a target="_blank" href="https://devcenter.heroku.com/">Heroku Dev Center</a> for more information on getting started with Heroku.</p>
<p>I haven't personally used the Heroku platform for deploying backend apps before, but one of the programmers in the pair programming session did so I thought I'd include it as well. I'd recommend it for full-stack developers who want to display their frontend and backend skills on their portfolio.</p>
<h2 id="heading-3-how-to-deploy-your-site">3) How to Deploy Your Site</h2>
<p>Deploying a site means placing the code you've written on the hosting platform. In older platforms, you'd have to upload the code and all resources to a cPanel (which is basically File Explorer for hosting platforms).</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/cpanel.png" alt="Image" width="600" height="400" loading="lazy">
<em>Source: <strong>What Is cPanel Used For And Why Do I Need It? - A2Hosting</strong></em></p>
<p>Nowadays, websites have become a lot more complicated than just <code>.html</code> files so they require different deployment methods. </p>
<p>If you have a React app, for example, the project will need to be built (like how you run <code>npm start</code> on your laptop to view the app) every time it's deployed to the domain.</p>
<p>Depending on the hosting platform you've chosen, the method of deployment is different. You can set up continuous deployment from a Github repository on Netlify (<a target="_blank" href="https://docs.netlify.com/configure-builds/get-started/">documentation here</a>) and Heroku (<a target="_blank" href="https://devcenter.heroku.com/articles/github-integration">documentation here</a>). This means every time you push a new change to your repository, the change is reflected in your site.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-13-at-19.04.00.png" alt="Create a new site From zero to hero, three easy steps to get your site on Netlify.  Connect to Git provider Pick a repository Site settings, and deploy! Continuous Deployment Choose the Git provider where your site’s source code is hosted. When you push to Git, we run your build tool of choice on our servers and deploy the result." width="600" height="400" loading="lazy"></p>
<p>If you're choosing to use a custom domain name, you'll need to link that domain name to your site. For example, on Netlify, your app is created with a <code>netlify.app</code> extension by default so it looks like <code>myportfolio.netlify.app</code>, but you can <a target="_blank" href="https://docs.netlify.com/domains-https/custom-domains/">set a custom domain name</a>. You can also set a <a target="_blank" href="https://devcenter.heroku.com/articles/custom-domains">custom domain name on Heroku</a>.</p>
<p>Linking a custom domain on these platforms means you'll need to update the DNS (Domain Name System) records from your domain provider. DNS is what allows users access your site with your domain name, for example <code>portfolio.com</code> instead of an IP address like <code>127.0.0.1</code>. You can read more on <a target="_blank" href="https://www.freecodecamp.org/news/what-is-dns/">DNS here</a>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/godaddy.gif" alt="Image" width="600" height="400" loading="lazy">
<em>Source: Add an A record - GoDaddy</em></p>
<h2 id="heading-4-how-to-choose-a-design-for-your-site">4. How to Choose a Design for Your Site</h2>
<p>Another topic we covered during the sessions was choosing a design. Some of the developers already had their sites built, but some had no idea what sort of layout to go for.</p>
<p>When it comes to choosing a portfolio design, I recommend viewing other developers' portfolios for inspiration and ideas on how to structure your site. This articles shows <a target="_blank" href="https://www.freecodecamp.org/news/15-web-developer-portfolios-to-inspire-you-137fb1743cae/"><strong>15 Web Developer Portfolios</strong></a> or, if you need some more inspiration, try <a target="_blank" href="https://www.noupe.com/design/web-developer-portfolio-examples.html"><strong>63 Examples</strong></a>. </p>
<p>You can also read this article on <strong><a target="_blank" href="https://www.freecodecamp.org/news/coding-projects-to-include-in-your-frontend-portfolio/">5 Projects To Include in Your Front End Portfolio</a></strong> for project ideas<strong>.</strong></p>
<p>It's important to determine the purpose of your portfolio and make sure that purpose is evident in every part of your site. </p>
<p>For example, if you're trying to use your portfolio to get a job, make sure you highlight your skills and experience on the main page and include call-to-actions to allow people view your résumé or send you a message. </p>
<p>If your portfolio is meant to get you clients for freelance purposes, then focus on previous projects you've built and reviews from other clients.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/employ-adam.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Source: https://www.bmediagroup.com/news/employ-adam/</em></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Let's summarise what we've covered in this article. To deploy your site online, you'll have to:</p>
<ol>
<li>Purchase a domain from a domain provider.</li>
<li>Choose a hosting platform, depending on how you want to build your site.</li>
<li>Link your domain to your hosting platform by updating your DNS records on your domain provider.</li>
<li>Set up deployment of your site from your hosting platform according to their documentation.</li>
</ol>
<p>I wrote this article and offered the pair programming sessions because I remember how complicated it was to deploy my first website. I also remember how I made a lot of mistakes I could have avoided (like paying 10 times the original fee on renewal of one of my domains thanks to a bunch of add-ons I didn't need) so I hope you found it helpful.</p>
<p>If you did, or you have any other questions, you can let me know on <a target="_blank" href="https://www.twitter.com/jemimaabu">Twitter</a> or send me a message on my <a target="_blank" href="https://www.jemimaabu.com#contact">website</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ HTML Link – How to Insert a Link to a Website with HREF Code ]]>
                </title>
                <description>
                    <![CDATA[ By Dillion Megida A website is made up of of various pieces of information that live in different sections and on different pages within the site itself.  You can also find information relating to that site on pages that are on different websites.  A... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/html-link-code-how-to-insert-a-link-to-a-website-with-href-3/</link>
                <guid isPermaLink="false">66d84f26e9c1a2c18adec095</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 01 Mar 2021 18:22:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5fd76c26e6787e098393e8a7.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Dillion Megida</p>
<p>A website is made up of of various pieces of information that live in different sections and on different pages within the site itself. </p>
<p>You can also find information relating to that site on pages that are on different websites. </p>
<p>All these sections and pages are linked together in HTML using the <code>href</code> attribute.</p>
<p>In this article, we'll look at the term <em>Hyperlink</em>. Then we'll learn about the different ways you can create hyperlinks, what <code>href</code> does, and how to appropriately use the <code>href</code> attribute to link sections and pages.</p>
<h2 id="heading-what-are-hyperlinks">What are Hyperlinks?</h2>
<p>In HTML, there are various forms of links. In images, there is the <code>src</code> attribute to "link" the source of an image. </p>
<p>For stylesheets, there is the <code>link</code> tag with the <code>href</code> attribute to "link" the source of a stylesheet. </p>
<p>For anchor tags, there is the <code>href</code> attribute to "link" the referenced section or page. Anchor links are also called hyperlinks.</p>
<p>When a user follows a hyperlink, they are navigating to that page. Hyperlinks are elements that reference another document, such that when a user clicks on that element, they are directed to the new document.</p>
<h2 id="heading-when-to-use-hyperlinks">When to Use Hyperlinks</h2>
<p>As stated above, you may want to link various pages (within your website or externally) or sections on your website. </p>
<p>In this article, I'll highlight three ways of creating hyperlinks. These different ways are important to know because they determine the values of the <code>href</code> attribute. </p>
<p>Alright, let's look at those three different ways now.</p>
<h3 id="heading-1-when-you-want-to-link-to-sections-of-a-page">1. When you want to link to sections of a page</h3>
<p>You might use this method, for example, when you're creating a page with a table of contents.</p>
<p>In this case, you may not want your readers to have to scroll down to the last section. It would be nice if they could just click on it in the table of contents and the browser would take them there directly. </p>
<p>This type of linking occurs in the same document, and just takes the reader to different sections. We'll learn how to create a hyperlink for this use case when we learn about the <code>href</code> attribute.</p>
<h3 id="heading-2-when-you-want-to-link-to-another-page-within-a-website">2. When you want to link to another page within a website</h3>
<p>On your site, you might have a home page, about page, services page, and other types of pages. This method helps users navigate from one page to another.</p>
<h3 id="heading-3-when-you-want-to-link-to-external-pages">3. When you want to link to external pages</h3>
<p>Sometimes, your website may not contain certain information and another website may have it. In such cases, you might want to reference the other website. </p>
<p>To do this, you would create an external hyperlink that navigates the user to the other website.</p>
<p>These are the three major ways of linking pages. Let's now see how the <code>href</code> attribute can help you enable them.</p>
<h2 id="heading-how-to-use-the-href-attribute">How to Use the <code>href</code> Attribute</h2>
<p>The <code>href</code> is an attribute used to reference another document. You can find it on <code>link</code> tags and <code>anchor</code> tags.</p>
<p>The <code>href</code> attribute is used on anchor tags (<code>a</code>) to create hyperlinks in websites. The value of the attribute contains the URL which the hyperlink points to. You can use it like this:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"URL"</span>&gt;</span>Hyperlink<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p>However, the URL values can be different depending on what you're pointing to. For the three ways we looked at earlier, let's see how you can use <code>href</code>.</p>
<h3 id="heading-1-how-to-use-href-to-link-sections-within-a-document">1. How to use <code>href</code> to link sections within a document</h3>
<p>In this case, the value will be the <code>id</code> of the element that starts the section. That means we will have something like this:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#second-section"</span>&gt;</span>Go to second section<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
<span class="hljs-comment">&lt;!--
  Some stuffs here
 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">section</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"second-section"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>Second section<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">section</span>&gt;</span>
</code></pre>
<p>When the "Go to second section" hyperlink is clicked, the browser scrolls down to the section with the associated <code>id</code>. Also the URL in the URL bar of the browser changes. </p>
<p>For example, if the previous URL was <code>mywebsite.com</code>, the new URL will be <code>mywebsite.com#second-option</code>.</p>
<h3 id="heading-2-how-to-use-href-to-link-pages-within-a-website">2. How to use <code>href</code> to link pages within a website</h3>
<p>To use <code>href</code> this way, you need to understand what Relative URLs and Absolute URLs are.</p>
<p>Relative URLs are short URLs that point to a document on the same website. It's more like, from where you are, how do you get to this other place on the same website? </p>
<p>This is in contrast to Absolute URLs. For these, you aren't concerned with where you currently are – you provide the full details to get to another place like you were starting from the beginning.</p>
<p>For navigations between pages that live on a website, you can use any of these URLs, but Relative URLs are commonly used.</p>
<p>Say you're on the home page, and you want to reference the about page. Here's how to use the <code>href</code> attribute to do that:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">'/about'</span> &gt;</span>About page<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p>From the homepage (say <code>mywebsite.com</code>), the above link will navigate to <code>mywebsite.com/about</code>.</p>
<p>There's something worth noting about the slash (<code>/</code>) before the link. The <code>/</code> tells the browser to append the link to the root of the site (which is the domain). So the root is <code>mywebsite.com</code> and the link is appended like so: <code>mywebsite.com/about</code>.</p>
<p>If the slash was absent (<code>&lt;a href='about'&gt;</code>), the browser would replace the current path with <code>/about</code>.</p>
<p>For example, if we were currently on <code>mywebsite.com/projects/generator</code>, and we had the following links:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">'about'</span>&gt;</span>About 1<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">'/about'</span>&gt;</span>About 2<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p>"About 1" would navigate to <code>mywebsite.com/projects/about</code> (replacing the current path <code>/generator</code>) and "About 2" would navigate to <code>mywebsite.com/about</code></p>
<h3 id="heading-3-how-to-use-href-to-link-to-pages-on-another-website">3. How to use <code>href</code> to link to pages on another website</h3>
<p>Since it's on a different website, there's no way we can use Relative URLs. For this, we need to specify the absolute source of the document we are referencing.</p>
<p>For example, say we're on <code>mywebsite.com</code>, and we want to reference <code>google.com</code>, this is how we'd do it with <code>href</code>:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">'https://google.com'</span>&gt;</span>Google<span class="hljs-tag">&lt;<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p>If we had only written <code>google.com</code>, the browser would treat it as a page within a website, thereby appending it to <code>mywebsite.com</code>.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this article, we've seen how the <code>href</code> attribute allows us to create different types of links. These various links show the different ways that documents/pages can be referenced within a website.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Design a Website Prototype from a Wireframe ]]>
                </title>
                <description>
                    <![CDATA[ You may have heard the old saying: "Measure twice, cut once." Well that is exactly why you should plan out a website before you build it. And that's where prototyping comes in. When we design our websites, we progress from wireframing to prototyping ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/designing-a-website-ui-with-prototyping/</link>
                <guid isPermaLink="false">66be0167e517c1bd493f0d9f</guid>
                
                    <category>
                        <![CDATA[ prototyping ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ #wireframe ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Adrian Twarog ]]>
                </dc:creator>
                <pubDate>Mon, 21 Sep 2020 17:19:57 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/09/ui-design-from-wireframe.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>You may have heard the old saying: "Measure twice, cut once." Well that is exactly why you should plan out a website before you build it. And that's where prototyping comes in.</p>
<p>When we design our websites, we progress from <a target="_blank" href="https://www.freecodecamp.org/news/what-is-a-wireframe-ux-design-tutorial-website/">wireframing</a> to prototyping to – finally – a full design.</p>
<p>I wanted to explore and expand on what Prototyping actually means by taking you through the full process.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/_P3CrgFlXhg" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>Note that I created another course that covers the first step of designing a website: building a wireframe. You can <a target="_blank" href="https://www.freecodecamp.org/news/what-is-a-wireframe-ux-design-tutorial-website/">read about wireframing and watch my 30 minute video course here</a>.</p>
<p>In this tutorial, we'll cover:</p>
<ol>
<li>What an Early Prototype is</li>
<li>Creating a Structure: Frame, Rows, Columns</li>
<li>Adding Content: Header, Slider, About</li>
<li>Designing Sections</li>
<li>Conclusion: What we've learned from the prototyping process</li>
</ol>
<h2 id="heading-what-is-an-early-prototype">What is an Early Prototype?</h2>
<p>A prototype is normally the secondary iteration of a design, as it is built on top of a wireframe. </p>
<p>A wireframe usually involves a simple drawn sketch via paper, pen, or online tool. Next we build the prototype, which is our more refined mockup for the website or app.</p>
<p>Let's take a look at the early wireframe we built <a target="_blank" href="https://www.freecodecamp.org/news/what-is-a-wireframe-ux-design-tutorial-website/">in the previous article</a>: </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/Wireframe.svg" alt="Image" width="600" height="400" loading="lazy">
<em>The wireframe we created in <a target="_blank" href="https://www.freecodecamp.org/news/what-is-a-wireframe-ux-design-tutorial-website/">my previous wireframing course</a>.</em></p>
<p>It has a number of pages, sections, and areas where text and images will be added later.</p>
<p>The goal, then, in the Prototype is to build this visually, but without adding color or images.</p>
<p>In this example, I will be using <a target="_blank" href="https://www.figma.com/">Figma</a> to do the Prototype. You can <a target="_blank" href="https://www.figma.com/file/mh52sQHBF8Bq2pIZhLKVuh/freeCodeCamp-Website-Ui?node-id=0%3A1">view the whole Figma protype here</a>.</p>
<h2 id="heading-how-to-create-a-website-prototype-structure-frame-rows-columns">How to Create a Website Prototype Structure: Frame, Rows, Columns</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/columns-3.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p>When we created the wireframe, we considered the grids – but they were hand drawn. </p>
<p>When doing an early prototype, we have to define them properly so that the whole design follows the grid structure.</p>
<p>In this example, I will be using a 12-column design with a regular width of 1140px, which is traditionally used and seen in Bootstrap designs. This gives us a 15-30px margin between grid units. </p>
<p>This will be useful later when we collapse the columns to rows for mobile responsiveness.</p>
<p>You can create your own grid structure in Figma. But be aware that you (or someone else) will later need to actually code these designs.</p>
<p>Whenever you're designing something, be sure to take the developer into consideration.</p>
<h2 id="heading-how-to-add-content-to-a-website-prototype-header-slider-sections">How to Add Content to a Website Prototype: Header, Slider, Sections</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/slider.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Unlike the Wireframe, we are no longer representing text with lines, and headers with blocks. Instead we need to fill out content for a mockup. </p>
<p>This doesn't mean adding colors or images. But it does mean we have to show real text.</p>
<p>At this stage, it's a great idea to make sure that the header and sections are shown with the actual content they will be intended to hold. This will allow better selection for colors and images in later stages of the design.</p>
<p>In this part of the example, I built out the slider with hero text, and a description underneath. There are a few things to look out for at this phase of the prototype process:</p>
<ul>
<li>Font sizing and positioning</li>
<li>Content location and spacing</li>
<li>Margins and padding between sections and content</li>
</ul>
<h2 id="heading-how-to-design-sections-of-the-website-prototype">How to Design Sections of the Website Prototype</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/about.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p>For prototyping and the final mockup, it's important to start layering your groups and sections. Sections can include things like the header, the "about us" section, and the sponsors section.</p>
<p>You can create groups in your UI tool (Figma does this with Ctrl+G). Label your sections and set them with different background colors. This will make it easy to identify them, and will allow you to easily move them about.</p>
<p>Too many times I've been asked to move certain parts of a website up and down the grouping. By grouping all your components into sections, you will make it much easier on yourself  during the prototype phase of the design work.</p>
<h2 id="heading-conclusion-what-we-have-learned-from-the-prototyping-process">Conclusion: What We Have Learned from the Prototyping Process</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/conclusion.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p>As we build out the rest of the design, it's important to ensure that this early prototype does not become a full mockup for a website design.</p>
<p>It's easy to get carried away. But the goal of doing a prototype after a wireframe is to ensure that we can continue to plan the website's development. </p>
<p>It's much easier to identify problems and issues in the early planning stages and update them before diving into creating the full design. Such prototyping may only take you a few hours, but it can save days worth of effort later in the process.</p>
<p>Once you've prototyped multiple pages, you can move on to the full mockup design phase. This will involve figuring out color theory, typography, and images that work accordingly. We will take a look at this in the next article in this series next month.</p>
<h2 id="heading-bonus-adding-an-interactive-prototype-run">Bonus: Adding an Interactive Prototype Run</h2>
<p>We only created a single page for this example. This said, prototyping also allows you to create an emulated example of the site operating.</p>
<p>This emulation is very useful for conducting demos, testing how clients respond to seeing a real world example of an early mock-up, and revising how all of your links flow.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/08/freeCodeCamp.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I hope you enjoyed this article. If you don't know who I am, I'm Adrian from Australia. ? I have a tiny channel on Twitter &amp; YouTube, so if you want to know more about me or enjoy my content, check me out sometime ?</p>
<ul>
<li><strong>Youtube:</strong> <a target="_blank" href="https://youtube.com/adriantwarog">https://youtube.com/adriantwarog</a></li>
<li><strong>Twitter:</strong> <a target="_blank" href="https://twitter.com/adrian_twarog">https://twitter.com/adrian_twarog</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I created a website for my Apple collection ]]>
                </title>
                <description>
                    <![CDATA[ By Leonardo Faria A while ago I started an Apple collection. I've been following Apple hardware (and its aesthetics) since I was a teenager, but at that time I didn't the have money to own a Mac.  I got my first Mac when I was 19. It was an ]]>
                </description>
                <link>https://www.freecodecamp.org/news/creating-a-website-for-my-apple-collection/</link>
                <guid isPermaLink="false">66d85170b56109a3fff9ddb8</guid>
                
                    <category>
                        <![CDATA[ mac ]]>
                    </category>
                
                    <category>
                        <![CDATA[ projects ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 08 Nov 2019 16:42:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/11/collection.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Leonardo Faria</p>
<p>A while ago I started an Apple collection. I've been following Apple hardware (and its aesthetics) since I was a teenager, but at that time I didn't the have money to own a Mac. </p>
<p>I got my first Mac when I was 19. It was an iBook 700 Mhz, acquired on an eBay-like website in Brazil. The money came from a Flash project. </p>
<p>After living in Canada for a few years now, I have some extra money to spend on a hobby. Most of the time I buy the devices from people on Craigslist.</p>
<p>After a few laptops and iDevices, I decided that I should start collecting info about my iThings. In the beginning, I created a Gist containing the model, serial number, how I got the device, the minimum/maximum OS, and so on.</p>
<p>The list kept getting bigger and bigger, and the content started looking messy. I thought showing this content on a website would be perfect, and I didn't need to hire a developer :D </p>
<p>At first, I decided I would organize my data in an SQL database, with the information distributed in different columns and tables. After that, I would create a graphQL API to provide me the data needed to populate my UI – probably written in React, compiled with Babel and packed with Webpack.</p>
<p>Reading the previous paragraph aloud, you can see that there are many technologies, and that I even ignored the backend language and UI details like SASS or styled-components. It all sounded a bit overwhelming when my ultimate goal was showing a list of items in a nice design.</p>
<p>That being said, I thought about how I can deliver this content without:</p>
<ul>
<li>An API or any backend work</li>
<li>Any JS framework/library</li>
<li>Any JS tooling (Webpack, Babel, etc.)</li>
<li>Any CSS work</li>
</ul>
<p>On top of these constraints, I had a few stretch goals:</p>
<ul>
<li>Create a website with good accessibility</li>
<li>Create a website that works on old browsers, since I have computers running Mac OS 9.2 and iDevices running iOS 3</li>
</ul>
<p>Challenge accepted. One index.html, a few vanilla JS files, and no custom CSS. I'd like to share the experience of building the site with you.</p>
<p>TL,DR:</p>
<ul>
<li><a target="_blank" href="https://bit.ly/collection-website">Final website</a></li>
<li><a target="_blank" href="https://bit.ly/collection-source">Source code</a></li>
</ul>
<p>Let's talk about the constraints, point by point:</p>
<h2 id="heading-no-api-or-any-backend-work">No API or any backend work</h2>
<p>A while ago I saw a SaaS product called <a target="_blank" href="https://steinhq.com/">Stein</a>. You create your data inside a Google Sheets document and they give you an endpoint with your data. Their library works like Handlebars, and it looked perfect for my use case:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">data-stein-url</span>=<span class="hljs-string">"https://api.steinhq.com/v1/storages/5cc158079ec99a2f484dcb40/Sheet1"</span> <span class="hljs-attr">data-stein-limit</span>=<span class="hljs-string">"2"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>{{title}}<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>By {{author}}<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span>

    {{content}}

    Read on <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"{{link}}"</span>&gt;</span>Medium<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<h2 id="heading-no-js-frameworklibrary-and-tooling">No JS framework/library and tooling</h2>
<p>I decided to avoid adding a framework or library in this project since the use case didn’t need one. All JS interactions on this page are quite simple (show/hide menus, open a modal screen, handle permalinks).</p>
<p>Since I was not using a framework/library, I could avoid adding Webpack and Babel. No need to dig into presets and loaders.</p>
<p>P.S. You can argue that I could have chosen create-react-app or Next.js and get all these problems solved, but no.</p>
<h2 id="heading-no-css-work">No CSS work</h2>
<p>I love writing CSS, especially when I can use SASS, but I decided not to write any CSS here. I had a few good reasons to avoid doing it:</p>
<ul>
<li>I had no designs in mind, and despite the fact that I could do something decent-looking, I didn’t want to put time and energy into it</li>
<li>I wanted to use <a target="_blank" href="https://tailwindcss.com">Tailwind CSS</a></li>
</ul>
<p>If you've never heard about Tailwind CSS, please don’t just think, “It's just an alternative to Bootstrap.” Here is a good, short explanation from their website:</p>
<blockquote>
<p>Most CSS frameworks do too much.<br>…<br>Instead of opinionated predesigned components, Tailwind provides low-level utility classes that let you build completely custom designs without ever leaving your HTML.</p>
</blockquote>
<p>This is pretty much true. A quick search gives you many web apps “rebuilt” with Tailwind CSS:</p>
<ul>
<li><a target="_blank" href="https://tailwindcomponents.com/component/whatsapp-web-clone">Whatsapp</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/telegram-desktop-using-tailwindcss">Telegram</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/facebook-clone">Facebook</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/reddit-clone">Reddit</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/youtube-clone">Youtube</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/slack-clone-1">Slack</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/coinbase-clone">Coinbase</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/github-profile-clone">Github</a></li>
<li><a target="_blank" href="https://tailwindcomponents.com/component/trello-panel-clone">Trello</a></li>
<li><a target="_blank" href="https://codepen.io/drehimself/full/vpeVMx/">Twitter</a></li>
<li><a target="_blank" href="https://www.youtube.com/watch?v=_JhTaENzfZQ">Netlify</a></li>
</ul>
<h2 id="heading-create-a-website-with-good-accessibility">Create a website with good accessibility</h2>
<p>Last month I started taking accessibility courses at <a target="_blank" href="https://dequeuniversity.com/curriculum/packages/full">Deque University</a>. Their content is great and it reminded me that <strong>HTML is accessible by default</strong>. By using a semantic HTML structure and testing basic things like keyboard navigation and colour contrast you eliminate several barries that move people with disabilities away from your content. </p>
<p>I am not an accessibility expert, but here are a few accessibility-related things I’ve worked on for this website:</p>
<ul>
<li>Disable stylesheets: By disabling stylesheets you can ensure that your content follows a logical/structural way.</li>
<li>VoiceOver: VoiceOver is included in macOS and iOS. It is <a target="_blank" href="https://webaim.org/articles/voiceover/">very simple to use</a>, and by experimenting with it you can have a better understanding of how people use this feature. </li>
<li>Modals: Modals can be problematic. I decided to follow <a target="_blank" href="https://bitsofco.de/accessible-modal-dialog/">Ire Aderinokun’s</a> approach.</li>
<li><a target="_blank" href="https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd">axe</a>: The extension is an accessibility checker for WCAG 2 and Section 508 accessibility rules. </li>
</ul>
<p>It is not perfect -- there are a few things that I didn’t work on for my site, like adding a skip link to the main content. If you are curious, <a target="_blank" href="https://github.com/leonardofaria/collection/pull/1">here is the Pull Request with all the changes</a>.</p>
<h2 id="heading-create-a-website-that-works-in-old-browsers">Create a website that works in old browsers</h2>
<p>I couldn’t achieve this objective since I had no control over scripts and styles. However, it doesn’t seem to be impossible. A few things I noticed:</p>
<ul>
<li><a target="_blank" href="https://github.com/SteinHQ/Expedite">Expedite</a> (Stein client) uses <a target="_blank" href="https://github.com/SteinHQ/Expedite/blob/master/index.js#L51-L54">fetch</a>, which was only <a target="_blank" href="https://caniuse.com/#feat=fetch">added in Safari 10</a>. The request to their server could be probably replaced with an XMLHttpRequest.</li>
<li>Tailwind uses Flexbox in many elements. Safari only started supporting Flexbox in iOS 7. Maybe I could write a few properties for their existing elements to achieve a decent look.</li>
<li>SSL Certificates may be an issue for old browsers.</li>
</ul>
<h2 id="heading-conclusions">Conclusions</h2>
<p>Making this website was super fun. Having this kind of pet project gave me a good reason to work with tech that I don't use in my job. Maybe in the future, Stein and/or TailwindCSS will be useful to prototype a feature or build a hackathon project. </p>
<p>The fact that I added “constraints” to my project made me think outside the box. Even though I didn't achive all my objectives, it helped me understand more and more about how all the pieces are connected.</p>
<p>I totally recommend doing something like this to give you a chance to play with different tech. It doesn't need to be an Apple collection -- you can create a site to list your favourite books or the best hikes you've done. In this case, the journey matters more than the goal. </p>
<p>Out of curiosity, I tracked my time using <a target="_blank" href="https://clockify.me">Clockify</a> and between coding, creating the data, testing and writing this post I’ve worked 13 hours on this. </p>
<p><em>Also posted on <a target="_blank" href="http://bit.ly/collection-post">my blog</a>. Follow me on <a target="_blank" href="https://twitter.com/leozera">Twitter</a></em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Hourly Billing vs Value Based Pricing for Web Designers ]]>
                </title>
                <description>
                    <![CDATA[ By Kyle Prinsloo If you are a web designer/developer who currently bills per hour, I hope I can persuade you to change your pricing method to value based pricing. In this article, I discuss both of these methods in detail and without the fluff so you... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/hourly-billing-value-pricing/</link>
                <guid isPermaLink="false">66d4602147a8245f78752a91</guid>
                
                    <category>
                        <![CDATA[ clients ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Freelancing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ pricing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 31 Jul 2019 10:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/07/hourly-billing-freecodecamp.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Kyle Prinsloo</p>
<p>If you are a web designer/developer who currently bills per hour, I hope I can persuade you to change your pricing method to value based pricing.</p>
<p>In this article, I discuss both of these methods in detail and without the fluff so you can just get the nuggets and practical understanding to make an informed decision from there.</p>
<p>On a serious note, if you apply what you will read about today, you can really earn more, work less and be a more fulfilled freelancer - and I don't just say this half-heartedly.</p>
<p>Enough fluff, let’s get straight to it:</p>
<h2 id="heading-billing-by-the-hour">Billing By The Hour</h2>
<p><img src="https://studywebdevelopment.com/images/hourly-billing.jpg" alt="hourly-billing" width="600" height="400" loading="lazy"></p>
<p>I’ll start with this pricing method first because it’s the most popular.</p>
<p>I am well aware that there are many web designers/developers out there who make a very good living by using the hourly billing method, but in my opinion, value based billing is far better than hourly billing.</p>
<p>To explain why, these are some common truths about hourly billing:  </p>
<ul>
<li>There are times when you argue over invoices and timesheets which wastes time for both parties (yes, there are <a target="_blank" href="https://www.shopify.com/partners/blog/94448774-6-of-the-best-time-tracking-apps-for-designers-developers-and-agencies">software programs</a> to track this, but even that can be disputed by a client).</li>
<li>Feeling like you have to be “micro-managed” by the hour. Clients would often want an estimate of the total hours before the project starts. They would then make a decision to go ahead with the project based on the estimate and not the final cost.</li>
<li>There’s no incentive to stay up to date with the latest technologies, software or tools to make your job easier because if you do, you get paid less.</li>
<li>The longer the project is, the better it is for you (more income) and the worse it is for the client (more expense).</li>
</ul>
<h2 id="heading-billing-hourly-is-harmful-for-your-working-relationship-with-the-client">Billing Hourly is Harmful for Your Working Relationship with the Client</h2>
<p>To illustrate this point, let’s say you wanted to build an additional room on to your house.</p>
<p>The builder tells you it will cost $75k based on his best estimates and you go ahead with the agreement.</p>
<p>The builder completes 80% of the project and then says it’s going to cost another $15k to finish the remainder.</p>
<p>How would you feel? Would you work with them again? Would you refer them to friends?</p>
<p>Probably not. And it’s the same thing with web design/development projects.</p>
<p>If the project is not planned correctly, things can really turn bad if you now realize you are losing money and then tell the client it’s going to cost 30% more because of “xyz”.</p>
<h2 id="heading-hourly-billing-discourages-efficiency-and-innovation">Hourly Billing Discourages Efficiency and Innovation</h2>
<p>Let’s say that the same web design project comes to you and 9 other web designers. You each have different hourly rates that you decided would be fair for your expertise.</p>
<p>“John” charges $45 per hour and others charge $75 per hour and then there’s this one guy (who I’ll name Bob) who charges $150 per hour.</p>
<p>Bob, with his experience in finding better ways to complete projects, codes the website in 3 hours = total fee of $450.</p>
<p>John, with his lack of experience, knowledge and efficiency, codes the website in 16 hours = total fee of $720.</p>
<p>Hourly billing encourages you to not work smart and to drag the hours so you get paid more.</p>
<p>Look, <em>some</em> websites can be done in less than a day – even a few hours if you have all the info ready and you know exactly what needs to be done.</p>
<p>If you are charging by the hour, why would you rush to get this website done as soon as possible when you could delay it by a few days and get paid more for it?</p>
<p>Maybe there’s a snippet of code you can buy for $100 that can save you 3 days of coding time, but you are hesitant to do this because that means you lose out on getting paid more and you have bills to pay.</p>
<p>In other words, the client is paying you for 3 days extra (which would be more than $1,000) because you don't want to use a $100 code snippet as this means you lose out on $1,000.</p>
<p>Can you see why this is harmful to you and your client?</p>
<p><strong>Here’s another practical example:</strong></p>
<p>If you are working on 3 client projects (retainer or once-off) at the same time and it takes you up to 2 hours per week to track your hours, prepare invoices, process payments, organise the accounting/tax side, etc. that can take almost a full working day each week just to handle this boring administrative task.</p>
<p>This is beyond crazy. You are not hired as an administrator or debtors clerk or whatever else – don’t fall into this pit.</p>
<p>On top of that, you’ll deal with one or two clients who always question everything and this takes even more of your time. This leads to a lack of trust down the line and nobody wants to work like that.</p>
<p>I know these are very simple examples, but it still holds true in more complex projects as well.</p>
<p>Your clients need to know this. Use the same analogy above or something that makes sense to you, but this is very important in moving forward.</p>
<h2 id="heading-your-income-is-capped">Your Income is Capped</h2>
<p>There are only so many hours you can work in a year. Let’s say you are earning $60k per year.</p>
<p>If we work on roughly 250 working days, this is $240 per day and $30 per hour (8 working hours each day).</p>
<p>Firstly, not many web developers/designers are booked every hour for the whole year, but let’s say this is the case. What if you wanted to earn $100k next year?</p>
<p>That would mean you need to increase your hourly billing to $50.</p>
<p>Although it’s only $20 extra per hour, that’s $160 extra per day, $800 per week and over $3k per month <strong>extra</strong> for a client to consider. It can often be a deal breaker in keeping retainer clients or signing up new clients for weekly/monthly projects.</p>
<p>Unless your existing clients really value your services, they will not understand why you now all of a sudden value your services at almost twice the price for the same amount of work.</p>
<p>It’s very likely that they will start looking for other freelancers with a lower hourly rate.</p>
<p>New clients or prospective clients may not sign up with your premium service as you are almost double the “going rate” for other freelancers with similar expertise.</p>
<p><strong>Bottom line:</strong> increasing your income is not easy. Although you want a higher income, the clients you work with really don’t care about your income desires and they don’t want a higher expense.</p>
<p><strong>Bottom line of the bottom line:</strong> Guess who <em>really</em> makes the final decision at the end? (it’s not you)</p>
<p>The solution is not some fancy tool or time-tracking software.</p>
<p>Yes, these can help, but this is more like a temporary fix and it doesn’t deal with the main issues mentioned above.</p>
<p>Remember: It’s in the client’s best interests that you don’t bill by the hour. You just need to educate them on this.</p>
<p>Value Based Pricing</p>
<p><img src="https://studywebdevelopment.com/images/value-based-pricing.jpg" alt="value-based-pricing" width="600" height="400" loading="lazy"></p>
<p>To avoid any misconceptions about this pricing method, it’s not a fixed amount that is calculated by your cost + your desired profit.</p>
<p>Here are some common truths about value based pricing:</p>
<ul>
<li>You don’t sell hours (like everyone else does) – you sell results (or the potential results).</li>
<li>There’s an incentive to stay up to date with the latest technologies, software or tools to make your job easier and to become more efficient.</li>
<li>It allows you to really create something amazing and not to worry about going over the client’s desired budget.</li>
<li>There are no hidden financial surprises to clients. You take all the risk in delivering the project within the total cost you’ve informed the client about.</li>
<li>You can work with less clients and provide a better service because you are often earning significantly more.</li>
</ul>
<p>You are essentially providing a fixed amount based on the projected return or outcome of the project.</p>
<p>You must probably be thinking that this sounds all fancy, but how can it be applied?</p>
<p><strong>Here’s a short summary:</strong></p>
<p>Find out the potential value of the project to the client over a year. In other words, find out the potential increase in sales that the business could be making after you create the website.</p>
<p>Then base your price off of this potential return.</p>
<p><strong><em>Example #1 – The Existing Business Website:</em></strong></p>
<p>A business sells agricultural drones via their website. They ask you to create a website focused around getting more sales.</p>
<p>After you ask the basic questions (refer to the <em>Prospective Clients Checklist</em>), your 2 main questions should be:</p>
<ul>
<li><ol>
<li>How many sales do you currently get each month?</li>
</ol>
</li>
<li><ol start="2">
<li>What is the average sales value of a drone?</li>
</ol>
</li>
</ul>
<p>They answer with:</p>
<ul>
<li>10 sales per month</li>
<li>$8,500 each</li>
</ul>
<p>You then do simple math to figure out how much they make each month ($8,500 x 10 = $85,000).</p>
<p>You look at their current site and see where they are losing sales and you work on a low estimate of what you expect sales could increase by after you make a conversion-centred website.</p>
<p>In this scenario, let’s say you are confident it would at least be 2 sales extra per month.</p>
<p>This would mean the business would make an additional $16,000 per month and almost $200,000 after one year.</p>
<p>After informing the client of this in the proposal and why you feel this is a low and realistic estimate, you then give your website cost based on the potential annual return.</p>
<p>For this example, your price could be $10,000 - $15,000.</p>
<p>Would you, ‘as the business owner’ be willing to pay around 5% of what you could potentially make after one year?</p>
<p>Of course.</p>
<p><strong><em>Example #2 – The New Business Website:</em></strong></p>
<p>A business sells agricultural drones and they want a new website.</p>
<p>They ask you to create a website focused around getting sales.</p>
<p>After you ask the basics questions (refer to the <em>Prospective Clients Checklist</em>), your main question should be:  </p>
<ul>
<li>What is the average sales value of a drone?</li>
</ul>
<p>They answer with:</p>
<ul>
<li>$8,500 each</li>
</ul>
<p>After doing further research about the market and their marketing plan, you are confident that you can create a conversion-centred website that can convert into at least 4 sales each month (or one sale per week).</p>
<p>This equals $34,000 per month and over $400,000 in a year.</p>
<p>Your price could easily be $10,000 - $15,000 and it would make sense to the prospective client after you have explained the value of the potential return.</p>
<p><strong>Remember:</strong> your responsibility is to make the business see this as a necessary investment and not a cost. You need to explain why you are the right person for the project.</p>
<p>By breaking it down like this and being practical about it, you instantly stand out from the crowd of other freelancers who say things like, “I estimate that this project will take about 120 hours X my hourly rate of $45 = $5.4k”.</p>
<p>The bottom line is that it's a win for you and a win for the client.</p>
<p>By thinking about <strong>OUTCOMES</strong>, it shows you understand the project as the business does. You are not thinking about <strong>HOURS</strong> like everyone else does.</p>
<p>Now of course this is a very simplified summary. You would have to deal with the objections clients or potential clients may have like:</p>
<ul>
<li><p>100% payment upfront</p>
</li>
<li><p>Questions about pricing</p>
</li>
<li><p>Doubts of the client</p>
</li>
</ul>
<p>As far as I know, this method works in any product or service industry – even lawyers and accountants. The issue is not whether it works, but rather who is actually doing it effectively.</p>
<p>The truth is that this model is simple in theory, but in practice you might stuff up in a few areas.</p>
<p>That’s OK… don’t have a narrow mindset. You are running a marathon and not a sprint.</p>
<p>It takes a lot of trial and error and ultimately you will learn by experience about what, how and when to say the right things that will get you higher paying clients.</p>
<p>Learn from your mistakes, see where you can improve and each year you will become better in how you handle objections, how you communicate and more.</p>
<p>I hope this has helped you to rethink this topic.</p>
<p>If you’d like to learn more and improve your skillset and become a happier freelancer that earns more, make sure to check out <a target="_blank" href="https://studywebdevelopment.com/freelancing.html">my course</a>.</p>
<p>Until next time,</p>
<p>Kyle</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 6 Things Aspiring Web Developers Should Consider ]]>
                </title>
                <description>
                    <![CDATA[ By Kyle Prinsloo Becoming a web developer can be as challenging as working out every day. It’s important to know what it will take to succeed as a web developer. Here are 6 things to consider for aspiring web developers:    1 – The Right Attitude and... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/tips-for-aspiring-web-developers/</link>
                <guid isPermaLink="false">66d4603547a8245f78752a95</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Freelancing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 17 Jul 2019 10:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/07/tips-for-web-developers-freecodecamp.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Kyle Prinsloo</p>
<p>Becoming a web developer can be as challenging as working out every day.</p>
<p>It’s important to know what it will take to succeed as a web developer.</p>
<p>Here are 6 things to consider for aspiring web developers:   </p>
<h2 id="heading-1-the-right-attitude-and-belief">1 – The Right Attitude and Belief</h2>
<p>The first hurdle to get through is <strong>yourself</strong>.</p>
<p>Let me explain:</p>
<p>Why is it that some people in difficult situations manage to succeed and those who have ‘perfect’ upbringings sometimes end up in positions that don’t make sense at all?</p>
<p>You don't want to become a web developer.</p>
<p>You want to become a successful web developer.</p>
<p>(sounds cheesy, but it's true).</p>
<p>The next step after aligning your attitude to becoming a web developer is BELIEVING that you are one.</p>
<p>You may be thinking, “but I don’t know enough to be called a web developer” or “but how can I be a web developer if I haven’t even started yet?”</p>
<p>These are valid questions… and I’m not saying you should lie about being a web developer or that you should take on work far beyond what you are able to do at this moment.</p>
<p>What I am saying is that you need to “trick” your brain and boost your confidence in BELIEVING that you are a web developer rather than second guessing it. Try it and I can assure you that this method is far better than doubting the fact.</p>
<p>If someone asks you, “so what do you do?” tell them without any doubts, “I’m a web developer/freelancer.”</p>
<p>This may lead nowhere, but you’d be surprised how many people will be very interested in the fact that you are a web developer/freelancer. Almost as if you pulled some Star Wars Jedi mind trick on them.</p>
<p>Whether you’d like to become a web developer or freelancer, your mind-set and attitude is crucial to your success.</p>
<h2 id="heading-2-determination-and-discipline">2 – Determination and Discipline</h2>
<p>Failure and doubt are inevitable. The question is how you will deal with it when it happens.</p>
<p>You need to be determined, motivated and driven to really be successful at web development. There are many aspiring web developers out there. Not all of them will be determined and driven and motivated.</p>
<p>Not all of them will be disciplined in learning web development. That might not sound right, but it is true. We are all busy with other things and you may even have a full-time job while you learn web development (that’s in fact how I started).</p>
<p>The hard part is not starting… it’s whether you keep going. You need to be disciplined in learning.</p>
<p>Set a schedule and stick to it.</p>
<p>I used to work from 8am-6pm, come home to my wife and be exhausted, eat, relax for a bit, and then start learning to code from 8pm to 1am/2am for a few months. That was very challenging for me, but I needed to be highly focused and it worked out well because of that discipline.</p>
<p>Maybe you have children or other important priorities, but don’t make excuses. If it’s important to you, you will make a plan to learn and you will force yourself to be disciplined.</p>
<h2 id="heading-3-stubbornnesspersistence">3 – Stubbornness/Persistence</h2>
<p>You may be thinking, “why stubbornness?”</p>
<p>It’s good to be stubborn or persistent as you learn.</p>
<p>What I mean by that is if you have an error in your code or if it is not coming out how you’d planned and thought (which happens more often than you might think,) don’t just move on if you can’t find the solution and don’t cut any corners. Be stubborn and figure it out.</p>
<p>Although it may take you longer to figure out, what you learn by being stubborn in this regard is that your knowledge will remain with you and you will be more efficient and effective in your future projects because of this.</p>
<h2 id="heading-4-prioritising">4 – Prioritising</h2>
<p>If you want to do something great, it comes with sacrifice. This is challenging to accept for most people.</p>
<p>If you want to be a great programmer or freelancer and you are complaining that you don’t have time, then just look at your daily/weekly/monthly routine to see what you can remove to free up more time so that you can learn more, develop your skills and apply what you know.</p>
<p>One of the biggest distractions I’ve eliminated in my life is watching TV. It was hard to do at first, but even if I got given a free TV the size of my wall, with free unlimited movies and series, I wouldn’t even be interested now.</p>
<p>I’m not the only strange one out there who does this. Seth Godin, one of the greatest marketers and thought leaders of our time is also a big advocate for not wasting time watching TV.</p>
<p>Whether you are a student, a full time employee, a husband/wife/father/mother, you need to know how to prioritise.</p>
<p>Every single day there is around 140,000 websites added to the internet. Imagine… that’s almost 2 websites EVERY SECOND!</p>
<p>So if you are interested in creating a website for your own business, it will be good to start asap!</p>
<p>Do what you need to do, don’t neglect your family, cut out the TV, cut out distractions and learn how to code – after all, that is your goal so be serious about it and work towards it.</p>
<h2 id="heading-5-the-skills">5 - The Skills</h2>
<p>You can’t become an accountant without understanding accountancy. The same principle applies for web development.</p>
<p>In order to be a web developer, you need to know what web development is, how it works, the programming languages and their importance, what to learn, communication skills, problem solving, innovation and more.</p>
<p>It’s important that you know how to learn effectively. To read more into this, I’ve broken down the programming languages in my free <a target="_blank" href="https://studywebdevelopment.com/web-development-ebook.html">eBook</a>.</p>
<h2 id="heading-6-your-goals">6 – Your Goals</h2>
<p>You need to define your goals.</p>
<p><strong>WHY</strong> do you want to be a web developer/freelancer?</p>
<p>Would you like to learn web development and apply for work and be an employee?</p>
<p>Would you like to be a freelance web developer and work for yourself?</p>
<p>When you create a website, what is your deadline?</p>
<p>Once you have your goals, make sure you are driven by it and focus on working towards achieving them. Don’t be like most people and set goals that fade away after a few months…</p>
<p><strong>How to set your goals in 5 simple steps:</strong></p>
<p>Be S.M.A.R.T (Specific, Measurable, Attainable, Realistic, Time-Bound)  </p>
<p><strong>Specific</strong>: To become a freelance web developer<br><strong>Time Bound</strong>: 12 months<br><strong>Measurable</strong>: I will measure my progress every month and set defined goals to reach my specific goal.<br><strong>Attainable</strong>: Challenging, but yes.<br><strong>Realistic</strong>: Definitely.</p>
<p>Once your main goal has been set, break down the 12 months into medium-term goals, in this case it would be:</p>
<p>*Don’t worry if these terms are a bit technical for you, I explain more in my <a target="_blank" href="https://studywebdevelopment.com/web-development-ebook.html">eBook</a>.</p>
<p>In 3 months, I want to know Frontend Web Development<br>In 6 months, I want to know Backend Web Development<br>In 9 months, I want to start working on my portfolio website, build my brand, improve on my business knowledge and perfect my web development skills.<br>By 12 months, I want a portfolio of 5 websites, I want to be a full-stack web developer and I want to know the fundamentals of freelancing and gaining clients.</p>
<p>Once I have my medium-term goals, I break it up into my monthly goals:</p>
<p><strong>Frontend Web Development</strong><br>Month 1 – Learn HTML &amp; CSS<br>Month 2 – Learn JavaScript<br>Month 3 – Create website using HTML, CSS &amp; JavaScript  </p>
<p><strong>Backend Web Development</strong><br>Month 4 – Learn PHP<br>Month 5 – Learn more advanced PHP<br>Month 6 – Make a functional, dynamic website with HTML, CSS, JavaScript &amp; PHP  </p>
<p><strong>Portfolio, Personal Brand, Business Knowledge, Web Development Knowledge</strong><br>Month 7 – Create a personal portfolio website, social media profiles and build a personal brand<br>Month 8 – Reach out to businesses &amp; organisations to create websites for them<br>Month 9 – Improve portfolio, web development skills and personal brand  </p>
<p><strong>Portfolio of 5 Websites, Full-Stack Web Developer, Freelance Fundamentals, Clients</strong><br>Month 10 – Must have a minimum of 5 websites on portfolio<br>Month 11 – Learn freelance fundamentals and business essentials<br>Month 12 – Reach out to prospective clients, promote your work and get clients</p>
<p>Now that you have your monthly goals, break it down into daily goals:</p>
<p>You don’t need to study full-time to make this goal a reality – this would help for sure, but if you are working and you can only study part-time that is also fine. If you can dedicate 3-4 hours every night to this schedule, I fully believe that you can accomplish this goal if you are dedicated, disciplined and motivated enough.</p>
<p>This is just a very short example and a simplified guideline, and it is not intended to be a comprehensive goal-breakdown, I just want to illustrate how it could be done. The programming languages mentioned above are just examples too.</p>
<p>Write out your goals, print it out and stick to it.</p>
<p>One of THE MOST important aspects of achieving your goal is:</p>
<h3 id="heading-accountability"><strong>ACCOUNTABILITY</strong></h3>
<p>If you are accountable to someone and you have weekly/monthly calls to discuss the progress and he/she holds you accountable and motivates you when you feel like giving up or have any doubts, it will push you through and help you stay focused. The more honest and ‘hard-core’ your accountability partner is; the better!</p>
<p>I had an accountability partner when I started freelancing, and it was crucial in playing a major part in my freelancing success today.</p>
<p>Last, but not least… <strong>TAKE ACTION</strong><strong>,</strong> adapt and stop making excuses.</p>
<p>Until next time,</p>
<p>Kyle</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to use CSS position to layout a website (with example code) ]]>
                </title>
                <description>
                    <![CDATA[ By Jessica Chan Using CSS position to layout elements on your website can be hard to figure out. What’s the difference between absolute, relative, fixed, and sticky? It can get confusing pretty quickly. To help, this tutorial will guide you through a... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-use-css-position-to-layout-a-website-with-example-code-38592bb9e276/</link>
                <guid isPermaLink="false">66d4615c230dff016690588f</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Website design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 07 Apr 2019 19:22:00 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*9cRn62IAywuaywMSJ2X6_g.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Jessica Chan</p>
<p>Using CSS position to layout elements on your website can be hard to figure out. What’s the difference between absolute, relative, fixed, and sticky? It can get confusing pretty quickly.</p>
<p>To help, this tutorial will guide you through all the CSS position properties. And you’ll be able to get your website layouts pixel perfect!</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/hkjjCnRFDug" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h3 id="heading-what-does-css-position-do">What does CSS position do?</h3>
<p>Using CSS, you can layout all your elements on your webpage visually. For example, you can position an element at the very top of your page, or 50px below the element before it.</p>
<p>To control just how an element will appear in the layout, you need to use the CSS <code>position</code> property. In addition, you can utilize some other position-related properties: <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>, and <code>z-index</code>. (We’ll get more into those later on.)</p>
<p>The <code>position</code> property can take five different values: <code>static</code>, <code>relative</code>, <code>absolute</code>, <code>fixed</code>, and <code>sticky</code>.</p>
<p>It sounds like a lot, but don’t worry!</p>
<p>Here’s how each value for CSS <code>position</code> works:</p>
<h3 id="heading-1-static">1. Static</h3>
<p><code>Position: static</code> is the default value that an element will have. This means if you don’t declare <code>position</code> for an element in CSS, it will automatically be set to <code>static</code>.</p>
<blockquote>
<p><em>It’s important to note that having a static position is the same as not setting the <code>position</code> property at all. (This will come into play a bit later on with absolute positioning.)</em></p>
</blockquote>
<p>Elements that are statically positioned will appear on the page in what we call the normal flow. For example, if you have multiple <code>&lt;d</code>iv&gt; elements one after the other, they will appear on the page directly below one another.</p>
<p>Here’s a quick demo to illustrate static position. We are using the following HTML markup:</p>
<pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"parent purple"</span>&gt;&lt;/div&gt;
</code></pre><pre><code>&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"another green"</span>&gt;&lt;/div&gt;
</code></pre><p>And here’s the CSS we’re using:</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.first</span> { 
   // No position set, so it's static 
} 
<span class="hljs-selector-class">.another</span> { 
   // No position set, so it's static 
   <span class="hljs-attribute">top</span>: <span class="hljs-number">50px</span>; 
}
</code></pre>
<p>The second element has a <code>top</code> property set to <code>50px</code>. You would think that this would move it down 50px, right?</p>
<p>However, here is how it will look on a webpage:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/nE-u6IOvcuqDCbvpCGOUUyNNpIrzrC94gu8I" alt="Image" width="800" height="400" loading="lazy">
_View original code in [Codepen](https://codepen.io/thecodercoder/pen/XQKLdR" rel="noopener" target="<em>blank" title=")</em></p>
<p>Since both elements have a static position, none of the layout CSS properties will do anything. This makes that <code>top</code> property have no effect on how the second element is displayed.</p>
<p>So that second element ends up being directly below the first element, with no space between.</p>
<p>How can we fix this? Let’s move on to the next position:</p>
<h3 id="heading-2-relative">2. Relative</h3>
<p><code>Position: relative</code> is similar to <code>static</code> in that relatively positioned elements will follow the normal flow of the webpage. But the main difference is that using <code>relative</code> will now unlock the other CSS layout properties.</p>
<p>Think about it this way: you are setting the element to be positioned relative to other elements on the page.</p>
<p>Let’s see what this looks like, and adjust our CSS like this:</p>
<pre><code>.first { 
   <span class="hljs-attr">position</span>: <span class="hljs-keyword">static</span>; 
} 
.another { 
   <span class="hljs-attr">position</span>: relative; 
   top: <span class="hljs-number">50</span>px; 
}
</code></pre><p>All the CSS is exactly the same, except that we changed the second element to use <code>position: relative</code>. Doing this makes that <code>top: 50px</code> work!</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/WW2W75wz3QauqDbhgwlDpH80GcRbr1W63XX0" alt="Image" width="800" height="463" loading="lazy">
_View original code on [Codepen](https://codepen.io/thecodercoder/pen/bJePJe" rel="noopener" target="<em>blank" title=")</em></p>
<p>You can see that the second element is now 50px below the first one, adding that space between them.</p>
<h3 id="heading-relatively-positioned-parent-and-child-elements">Relatively positioned parent and child elements</h3>
<p>Let’s try another example, using a parent element with a child element nested inside it. Both have <code>position: relative</code> set.</p>
<p>Here’s the HTML for that:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"parent purple"</span>&gt;</span> 
   <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"child magenta"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span> 
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>And our CSS styles:</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.parent</span> { 
   <span class="hljs-attribute">position</span>: relative; 
} 
<span class="hljs-selector-class">.child</span> { 
   <span class="hljs-attribute">position</span>: relative; 
   <span class="hljs-attribute">top</span>: <span class="hljs-number">0px</span>; 
   <span class="hljs-attribute">left</span>: <span class="hljs-number">0px</span>; 
}
</code></pre>
<p>And here’s what that code will look like in real life:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/j4ia5pGejB3E0xyKGWOMMSxo6wYNyT3Lqbot" alt="Image" width="800" height="319" loading="lazy">
_View original code on [Codepen](https://codepen.io/thecodercoder/pen/oOLKBK" rel="noopener" target="<em>blank" title=")</em></p>
<p>You can see that the pink child element is nicely nested inside the purple parent element. The child is also positioned as close to the top and left inside the parent as is possible. (It will go as far up as the parent text)</p>
<p>Position relative is relatively straight-forward, right? Well, hold on to your hats, because things are about to get crazy with <code>position absolute</code>.</p>
<h3 id="heading-3-absolute">3. Absolute</h3>
<p><code>Position: absolute</code> will cause an element to be taken out of that normal flow of the webpage.</p>
<p>Wait, what does that mean?</p>
<p>So before, using static or relative positioning, elements would be nicely displayed one below the other, depending on their order in the HTML markup. But with absolute positioning, the element is completely taken out of that entire flow.</p>
<p>To help explain, let’s do a comparison to illustrate the difference between relative and absolute positioning.</p>
<p>In the previous example, we had a parent element with a child element, both positioned relatively. And the child was nested inside the parent element.</p>
<p>Let’s change that child to be positioned absolutely in the parent!</p>
<p>Our CSS will now look like this:</p>
<pre><code>.parent { 
   <span class="hljs-attr">position</span>: relative; 
} 
.child { 
   <span class="hljs-attr">position</span>: absolute; 
   top: <span class="hljs-number">0</span>px; 
   left: <span class="hljs-number">0</span>px;
}
</code></pre><p><img src="https://cdn-media-1.freecodecamp.org/images/fVmPUWI3fHrC2dhTDK8v-Wny4cZhCh-aUDRc" alt="Image" width="800" height="230" loading="lazy">
_View original code on [Codepen](https://codepen.io/thecodercoder/pen/RORXWN" rel="noopener" target="<em>blank" title=")</em></p>
<p>The pink child element now looks very different from our last example.</p>
<p>While it is still within the confines of the parent element, it is positioned at the very top and very left of the parent. It’s even covering up the parent text content!</p>
<p>This is due to the <code>top: 0px</code> and <code>left: 0px</code> styles of the child, combined with the child being absolutely positioned. In the normal flow of things, elements wouldn’t be on top of (and covering up) other elements.</p>
<p>But since the child is absolute, it’s essentially on a different layer than the normal elements. So it can be positioned on top of what else is on the webpage.</p>
<p>But it will stay within the boundaries of the parent element– as long as the parent has its position set. Which leads us to our next point.</p>
<p>There is one other tricky aspect to child elements with absolute positioning…</p>
<h3 id="heading-an-absolutely-positioned-element-needs-to-position-itself-in-relation-to-a-positioned-ancestor">An absolutely positioned element needs to position itself in relation to a positioned ancestor.</h3>
<p>When you take an element out of the normal flow by using <code>position: absolute</code>, it will look for an ancestor element that has its own position set. This is so the child knows what element it should position itself in relation to.</p>
<p>So what happens if a child element is absolutely positioned, but the parent element doesn’t have a position set?</p>
<p>Here’s our CSS for this illustration:</p>
<pre><code class="lang-css"><span class="hljs-selector-class">.parent</span> { 
   // No position set, so it's static 
} 
<span class="hljs-selector-class">.child</span> { 
   <span class="hljs-attribute">position</span>: absolute; 
   <span class="hljs-attribute">top</span>: <span class="hljs-number">0px</span>; 
   <span class="hljs-attribute">left</span>: <span class="hljs-number">0px</span>; 
}
</code></pre>
<p>And here’s what the resulting webpage would look like:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/USE0MNOMfgjm5aUE3mxezET6AqB2v-bDZtV9" alt="Image" width="800" height="220" loading="lazy">
_View original code on [Codepen](https://codepen.io/thecodercoder/pen/EJgxYm" rel="noopener" target="<em>blank" title=")</em></p>
<p>The child has now escaped the confines of the parent element, since the parent has no position set. And the child has gone up to the next (grand)parent element, in this case the <code>&lt;bo</code>dy&gt; element, which is as far as it can go.</p>
<p>(A somewhat sad metaphor would be that this “orphaned” child is looking up the ancestry tree for someone that will be its “parent.”)</p>
<p><strong>This is a huge cause of unexpected behavior in CSS for many developers.</strong></p>
<p>If you can remember to always set the parent element of a child element to have <code>position</code> set to <code>relative</code> or <code>absolute</code> (in most cases), you will avoid having your child elements flying up the page to who knows where ?</p>
<p>So, to summarize relative and absolute positioning:</p>
<blockquote>
<p><em>The main difference between relative and absolute positioning is that <code>position: absolute</code> will take a child element completely out of the normal flow of the document. And that child will be positioned in relation to the first parent element that has its own position set.</em></p>
</blockquote>
<p>The last two <code>position</code> values, <code>fixed</code> and <code>sticky</code>, are similar in some ways to <code>position: absolute</code>. But they also are related to your scroll position on the page.</p>
<p>Let’s take a look:</p>
<h3 id="heading-4-fixed">4. Fixed</h3>
<p><code>Position: fixed</code> will take the element out of the normal flow, and also position it in the same place in the viewport (what’s visible on screen). This means that scrolling will not affect its position at all.</p>
<p>Let’s see what this looks like in the code. Here’s our HTML:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"first purple"</span>&gt;</span> 
   Lorem ipsum dolor sit amet, consectetur adipiscing elit....
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span> 
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"another green"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>And in our CSS, we’ve set the second element to be <code>position: fixed</code>:</p>
<pre><code>.first { 
   <span class="hljs-attr">position</span>: relative; 
} 
.another { 
   <span class="hljs-attr">position</span>: fixed; 
   top: <span class="hljs-number">0</span>px; 
   left: <span class="hljs-number">0</span>px; 
}
</code></pre><p>And this is what that will look like:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0Aixaa9pedgy2gBfA-UDyPzY9XbIG6U1962O" alt="Image" width="800" height="546" loading="lazy">
_See original code on [Codepen](https://codepen.io/thecodercoder/pen/rbMNVj" rel="noopener" target="<em>blank" title=")</em></p>
<p>The green fixed element will stay positioned to the top and left corner of the viewport. And if you scroll, the purple element will scroll up normally, but the green element will remain stuck to where we positioned it.</p>
<blockquote>
<p><strong><em>Tip</em></strong><em>: A fixed element must have a <code>top</code> or <code>bottom</code> position set. If it doesn’t, it will simply not exist on the page at all.</em></p>
</blockquote>
<p><code>Position: fixed</code> is commonly used to make navigation bars that are always affixed to the top. It’s a super helpful property!</p>
<p>Next, we’ll take a look at sticky positioning, which is like fixed positioning but with a little extra.</p>
<h3 id="heading-5-sticky">5. Sticky</h3>
<p><code>Position: sticky</code> elements will initially behave like <code>position: relative</code> elements, but if you keep scrolling, they will get taken out of the normal flow and behave like <code>position: fixed</code> wherever you have positioned them.</p>
<p>This can be really useful if you want to stick an element that’s initially farther down the page to the top of the screen.</p>
<p>In this code example, we have our green sticky element between two purple elements containing a lot of text. (All the better for scrolling!)</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"first purple"</span>&gt;</span> 
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.... 
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span> 
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"another green"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span> 
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"purple"</span>&gt;</span> 
   Lorem ipsum dolor sit amet, consectetur adipiscing elit.... 
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>And the CSS for our sticky element:</p>
<pre><code>.first { 
   <span class="hljs-attr">position</span>: relative; 
} 
.another { 
   <span class="hljs-attr">position</span>: sticky; 
   top: <span class="hljs-number">0</span>px; 
}
</code></pre><p>And here’s what it looks like on the webpage!</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/sXZdc3S5-X8saH18qUoFelbM7dHHa9SBiYzX" alt="Image" width="800" height="556" loading="lazy">
_See original code on [Codepen](https://codepen.io/thecodercoder/pen/oOzBYd" rel="noopener" target="<em>blank" title=")</em></p>
<p>As you scroll down the page, when you see the green element come into the viewport, it seems like a normal, relatively positioned element. But as you keep scrolling, instead of scrolling off the page, it will become fixed and stick to the top of the viewport.</p>
<p>Just like fixed elements, a sticky element must have <code>top</code> or <code>bottom</code> set in the CSS. If it doesn’t have it, the element will continue to behave as if it was relatively positioned, and will never become sticky.</p>
<blockquote>
<p><strong><em>A note on browser support:</em></strong></p>
<p><em>Currently, <code>position: sticky</code> doesn’t have complete support across the board. Newer browser versions do support it, but no versions of IE do. This may be important if you’re working on a client project where IE 11 support is necessary. You can check out the current support on <a target="_blank" href="https://caniuse.com/#feat=css-sticky">CanIUse.com</a></em></p>
</blockquote>
<h3 id="heading-in-closing">In closing</h3>
<p>I hope that you’ve found this tutorial and code examples on CSS positioning helpful! If you have any questions or feedback, feel free to leave a comment below ?</p>
<p><em>Other resources:</em></p>
<ul>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/position">Mozilla Developer Network: CSS Position</a></li>
<li><a target="_blank" href="https://css-tricks.com/almanac/properties/p/position/">CSS Tricks: position</a></li>
</ul>
<h4 id="heading-want-more"><strong>Want more?</strong></h4>
<p>I'm creating a course in responsive design! <a href="https://coder-coder.com/responsive-design-beginners/">Sign up here</a> to get emailed when it's published.</p>

<p>I write web development tutorials on my blog c<a href="https://coder-coder.com">oder-coder.com</a>, post mini-tips on <a href="https://www.instagram.com/thecodercoder/">Instagram</a> and coding tutorials on <a href="https://www.youtube.com/c/codercodertv">YouTube</a>.</p>

 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
