├── .eleventy.js ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── .vscode └── settings.json ├── LICENSE.txt ├── index.php ├── package-lock.json ├── package.json ├── readme.md └── src ├── 00-intro.md ├── 01-zero-to-internet-your-first-website.md ├── 02-add-content-to-your-website.md ├── 03-intermission-upgrade-your-text-editor.md ├── 04-a-website-with-style.md ├── 05-adding-an-about-page.md ├── 06-adding-a-blog.md ├── 07-adding-a-resume.md ├── 08-intermission-installing-a-local-web-server.md ├── 09-adding-a-fun-page.md ├── 10-achievement-unlocked-hypertexter.md ├── 11-customizing-simple-css.md ├── 12-css-basics.md ├── 13-reusable-html-with-php.md ├── _includes ├── base.njk ├── chapter.njk ├── home.njk └── partials │ └── menu.njk ├── assets ├── css │ ├── fonts.css │ ├── open-props.min.css │ ├── print.css │ ├── prism-dracula.css │ ├── prism.css │ ├── reset.css │ ├── spacing.css │ └── style.css ├── fonts │ ├── heliotrope_3_regular.woff2 │ ├── valkyrie_b_bold.woff2 │ ├── valkyrie_b_italic.woff2 │ └── valkyrie_b_regular.woff2 ├── img │ ├── a-website-with-style-1.webp │ ├── a-website-with-style-2.webp │ ├── a-website-with-style-3.webp │ ├── a-website-with-style-4.webp │ ├── a-website-with-style-5.webp │ ├── add-content-1.webp │ ├── add-content-2.webp │ ├── add-content-3.webp │ ├── add-content-4.webp │ ├── add-content-5.webp │ ├── add-content-6.webp │ ├── add-content-7.webp │ ├── add-content-8.webp │ ├── adding-a-blog-1.webp │ ├── adding-a-blog-10.webp │ ├── adding-a-blog-11.webp │ ├── adding-a-blog-12.webp │ ├── adding-a-blog-2.webp │ ├── adding-a-blog-3.webp │ ├── adding-a-blog-4.webp │ ├── adding-a-blog-5.webp │ ├── adding-a-blog-6.webp │ ├── adding-a-blog-7.webp │ ├── adding-a-blog-8.webp │ ├── adding-a-blog-9.webp │ ├── adding-a-fun-page-1.webp │ ├── adding-a-fun-page-2.webp │ ├── adding-a-fun-page-4.webp │ ├── adding-a-fun-page-5.webp │ ├── adding-a-fun-page-6.webp │ ├── adding-a-fun-page-7.webp │ ├── adding-a-fun-page-8.webp │ ├── adding-a-fun-page-9.webp │ ├── adding-a-resume-1.webp │ ├── adding-a-resume-2.webp │ ├── adding-a-resume-3.webp │ ├── adding-a-resume-4.webp │ ├── adding-an-about-page-1.webp │ ├── adding-an-about-page-2.webp │ ├── adding-an-about-page-3.webp │ ├── code-editor-1.webp │ ├── code-editor-2.webp │ ├── code-editor-3.webp │ ├── css-basics-01.webp │ ├── css-basics-02.webp │ ├── css-basics-03.webp │ ├── css-basics-04.webp │ ├── css-basics-05.webp │ ├── css-basics-06.webp │ ├── css-basics-07.webp │ ├── css-basics-08.webp │ ├── css-basics-09.webp │ ├── css-basics-10.webp │ ├── css-basics-11.webp │ ├── css-basics-12.webp │ ├── css-basics-13.webp │ ├── css-basics-14.webp │ ├── customizing-simple-css-1.png │ ├── customizing-simple-css-1.webp │ ├── customizing-simple-css-2.png │ ├── customizing-simple-css-2.webp │ ├── customizing-simple-css-3.png │ ├── customizing-simple-css-3.webp │ ├── design │ │ ├── favicon.png │ │ ├── hero-mobile.svg │ │ ├── hero.svg │ │ ├── logo.svg │ │ ├── mascot-aside-back.svg │ │ ├── mascot-aside-front.svg │ │ └── og.png │ ├── intermission-installing-a-local-web-server-1.webp │ ├── intermission-installing-a-local-web-server-2.webp │ ├── intermission-installing-a-local-web-server-3.webp │ ├── intermission-installing-a-local-web-server-4.webp │ ├── intermission-installing-a-local-web-server-5.webp │ ├── intermission-installing-a-local-web-server-6.webp │ ├── intermission-installing-a-local-web-server-7.webp │ ├── intermission-installing-a-local-web-server-8.webp │ ├── intermission-installing-a-local-web-server-9.webp │ ├── logo.svg │ ├── vscode-new-folder.png │ ├── vscode-new-folder.webp │ ├── zero-to-internet-01.webp │ ├── zero-to-internet-02.webp │ ├── zero-to-internet-03.webp │ └── zero-to-internet-04.webp ├── js │ ├── anime.min.js │ ├── app.js │ └── hero.js └── video │ └── css-basics-1.mp4 ├── index.md └── printable.njk /.eleventy.js: -------------------------------------------------------------------------------- 1 | const markdownIt = require('markdown-it'); 2 | const markdownItToc = require('markdown-it-table-of-contents'); 3 | const markdownItAnchor = require('markdown-it-anchor'); 4 | const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight'); 5 | 6 | module.exports = function (eleventyConfig) { 7 | eleventyConfig.addPassthroughCopy('src/assets'); 8 | 9 | const md = markdownIt({ 10 | html: true, 11 | linkify: true, 12 | typographer: true, 13 | breaks: false, 14 | }) 15 | .use(require('markdown-it-block-embed')) 16 | .use(markdownItToc, { includeLevel: [1, 2, 3] }) 17 | .use(markdownItAnchor, { 18 | permalink: markdownItAnchor.permalink.headerLink(), 19 | }); 20 | 21 | eleventyConfig.setLibrary('md', md); 22 | 23 | eleventyConfig.addPlugin(syntaxHighlight); 24 | 25 | eleventyConfig.addPairedShortcode('aside', (content, label) => { 26 | return ``; 27 | 3; 28 | }); 29 | 30 | eleventyConfig.addShortcode('current', (slug, currentSlug) => { 31 | return slug === currentSlug ? 'aria-current="page"' : ''; 32 | }); 33 | 34 | // if NO_RELOAD node environment variable is found, disable live reloading 35 | if (process.env.NO_RELOAD) { 36 | eleventyConfig.setServerOptions({ 37 | liveReload: false, 38 | }); 39 | } 40 | 41 | // sort chapter collection by fileSlug 42 | eleventyConfig.addCollection('sortedChapter', function (collection) { 43 | return collection 44 | .getFilteredByTag('chapter') 45 | .sort( 46 | (a, b) => 47 | parseInt(a.fileSlug.substr(0, 2)) - parseInt(b.fileSlug.substr(0, 2)), 48 | ); 49 | }); 50 | 51 | return { 52 | dir: { 53 | input: 'src', 54 | }, 55 | }; 56 | }; 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Thumbs.db 2 | .project 3 | .DS_Store 4 | *.scssc 5 | .sass-cache 6 | *.map 7 | *.sublime-project 8 | *.sublime-workspace 9 | bower_components 10 | node_modules 11 | build 12 | dist 13 | vendor 14 | ._* 15 | .env 16 | config.php 17 | emails.txt 18 | _site -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.md -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "plugins": [ 4 | "prettier-plugin-jinja-template" 5 | ], 6 | "overrides": [ 7 | { 8 | "files": [ 9 | "*.njk" 10 | ], 11 | "options": { 12 | "parser": "jinja-template" 13 | } 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "commentAnchors.tagHighlights.enabled": false, 4 | "editor.formatOnSave": true, 5 | "editor.codeActionsOnSave": { 6 | "source.organizeImports": "explicit" 7 | }, 8 | "[javascript]": { 9 | "editor.defaultFormatter": "esbenp.prettier-vscode" 10 | }, 11 | "prettier.documentSelectors": ["**/*.njk"], 12 | "[nunjucks]": { 13 | "editor.defaultFormatter": "esbenp.prettier-vscode" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | HTML for People 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |
33 | 34 |
35 | 36 |
37 |

Thanks!

38 |

I’ll let you know when HTML for People is ready.

39 |
40 | 41 | 42 |

I’m working on a web book all about getting started making websites with HTML. It’s a beginner-level book aimed at people who may or may not have career aspirations as web developers. I don’t think websites were ever intended to be made only by “web professionals.” They are documents at heart and anyone should be able to make one if they want. Knowing how to write HTML and put it on the internet is a skill that’s valuable to all kinds of careers and personal pursuits. HTML is for anyone.

43 | 44 | 45 | 46 |

If you want me to email you when the book is ready, leave your email address below. I won't spam you, sell your email address, or use it for anything other than letting you know when the book is released.

47 | 48 |
49 | 53 | 54 | 55 |
56 | 57 | 58 |
59 | 60 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "htmlforpeople", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "eleventy", 8 | "serve": "eleventy --serve", 9 | "serve:noreload": "NO_RELOAD=true eleventy --serve" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@11ty/eleventy": "^2.0.1", 16 | "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0", 17 | "@types/animejs": "^3.1.12", 18 | "markdown-it-anchor": "^9.0.1", 19 | "markdown-it-block-embed": "^0.0.3", 20 | "markdown-it-table-of-contents": "^0.6.0", 21 | "prettier": "3.3.3", 22 | "prettier-plugin-jinja-template": "^1.5.0" 23 | } 24 | } -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # HTML for People 2 | 3 | This repository contains the source code for the website https://htmlforpeople.com. 4 | 5 | ## Getting Started 6 | 7 | To run this project locally for development purposes, follow these steps: 8 | 9 | 1. Clone the repository to your local machine. 10 | 2. Navigate to the project directory. 11 | 3. Install the dependencies: 12 | ``` 13 | npm i 14 | ``` 15 | 4. Start the development server: 16 | ``` 17 | npm run serve 18 | ``` 19 | 20 | The site should now be available at `http://localhost:8080` (or whichever port Eleventy uses by default). 21 | 22 | ## Contributing 23 | 24 | Contributions to improve this web book are welcome! As this is primarily a content-focused project, most contributions will likely involve edits to ensure technical accuracy or improve clarity where readers find certain sections confusing. 25 | 26 | If you'd like to report a correction or suggest an improvement, please [create a GitHub issue](https://github.com/blakewatson/htmlforpeople/issues) or submit a pull request. I appreciate your help in making this resource better for everyone. 27 | 28 | ## License 29 | 30 | This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0). For more information, see the [LICENSE](https://github.com/blakewatson/htmlforpeople/blob/main/LICENSE.txt) file in this repository or visit [Creative Commons](https://creativecommons.org/licenses/by-nc-sa/4.0/). 31 | 32 | ### Fonts 33 | 34 | Valkyrie and Heliotrope are licensed by [MB Type](https://mbtype.com/). If you plan to host a copy of this website, you will need to acquire your own licence from MB Type, or use different fonts. 35 | 36 | Input Sans, by [David Jonathan Ross](https://djr.com/), is licensed by [Type Network](https://typenetwork.com/). It’s being hosted by Type Network. If you want to use it, you’ll need to acquire your own license from Type Network. 37 | -------------------------------------------------------------------------------- /src/00-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Introduction' 3 | summary: 'Learn how to create your own personal website, even if you have no prior coding experience. This guide takes you from the basics of HTML to building a multi-page site with images, a blog, and more.' 4 | permalink: 'intro/' 5 | tags: chapter 6 | layout: 'chapter.njk' 7 | --- 8 | 9 | # Introduction 10 | 11 | I don’t think websites were ever intended to be made only by “web professionals.” Websites are documents at heart. Just about everyone knows how to make a document in this digital age, be it Word, Google Docs, Markdown, or something else. HTML shouldn’t be an exception. Sure it’s a bit more technical than other types of documents, but it’s also very special. 12 | 13 | It’s the document format of the web. The humble HTML document is ubiquitous. It’s everywhere. If you looked at a website today, you almost certainly saw HTML. 14 | 15 | HTML is robust. You could look at a website made today or one made twenty years ago. They both use HTML and they both work. That is an achievement that not many document formats can claim. You also don’t need any special program to make an HTML document. Many exist, and you could use any of them. You could also just open Notepad and write HTML by hand (spoiler: we are going to do just that). 16 | 17 | I created this web book because I wanted something for people who don’t consider themselves professional web developers. Imagine if Word documents were only ever created by “Word professionals.” No. Knowing how to write some HTML and put it on the web is a valuable skill that is useful to all sorts of professional and personal pursuits. It doesn’t belong only to those of us who make websites as a career. HTML is for everyone. HTML is for people. 18 | 19 | ## Who is this book for? 20 | 21 | This book is aimed at people who have no prior coding experience of any kind. I won’t assume you know the first thing about HTML. We will start small. But by the end of the book we will have built a personal website complete with multiple pages, images, a blog, and more. 22 | 23 | I _will_ assume you have some experience using a computer and performing basic tasks like creating files and folders. This is a necessary prerequisite because (again, spoiler alert) websites are essentially just files and folders. 24 | 25 | ## What do I need? 26 | 27 | You need a computer with internet access. I wrote this book in a generic way so that it would be applicable for people using macOS, Windows, or Linux. If I point you toward software to install, it will be free (or have a usable free tier) and will be cross-platform (or I will offer platform alternatives). 28 | 29 | ## Table of contents 30 | 31 | 1. [Zero to internet: your first website](/zero-to-internet-your-first-website) 32 | 2. [Add content to your website](/add-content-to-your-website) 33 | 3. [Intermission: upgrade your text editor](/intermission-upgrade-your-text-editor) 34 | 4. [A website with style](/a-website-with-style) 35 | 5. [Adding an about page](/adding-an-about-page) 36 | 6. [Adding a blog](/adding-a-blog) 37 | 7. [Adding a resume](/adding-a-resume) 38 | 8. [Intermission: installing a local web server](/intermission-installing-a-local-web-server) 39 | 9. [Adding a fun page](/adding-a-fun-page) 40 | 10. [Achievement unlocked: Hypertexter](/achievement-unlocked-hypertexter) 41 | 42 | ### Bonus chapters 43 | 44 | This is the stuff I wanted to cover but felt that it was a little bit out of scope. CSS and PHP both have a bit of a steeper learning curve compared to HTML. I don't think they're out of reach for anyone who wants to explore them, though. And a little bit of both of them can go a long way. So this is my way of giving you a little taste of each one. 45 | 46 | 1. [Customizing Simple.css](/customizing-simple-css) 47 | 2. [CSS basics](/css-basics) 48 | 3. [Reusable HTML with PHP](/reusable-html-with-php) 49 | 50 | ## Up next 51 | 52 | Now that you know the why behind this book, it’s time to take the first step. In the next chapter, you will learn how to make a website from scratch and put it on the web. 53 | -------------------------------------------------------------------------------- /src/01-zero-to-internet-your-first-website.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Zero to internet: your first website' 3 | summary: 'Build an extremely simple webpage from scratch using Notepad and put it on the web with Neocities.' 4 | permalink: 'zero-to-internet-your-first-website/' 5 | tags: chapter 6 | layout: 'chapter.njk' 7 | --- 8 | 9 | # Zero to internet: your first website 10 | 11 | You, my friend, are about to go from zero to internet by putting your very first homemade page on the web. 12 | 13 | I will let you in on a little secret—websites are just files with text. They don’t require fancy, expensive software to create. You can make a website with the free text-editing tools that come with your computer. In fact, that’s what we'll do right now. 14 | 15 | {% aside 'Note' %} 16 | While making a website on a phone or tablet is possible, it’s much more common to do it on a computer. So, that’s what we’ll do in this book. That said, what you’ll learn will still apply to other contexts. One beautiful thing about the web is that there are so many ways to create on it. 17 | {% endaside %} 18 | 19 | ## Step 1. Create a folder on your computer 20 | 21 | Pick a location on your computer and create a folder. Call it `my-site` or something similar. It’s best to name your website folders and files with lowercase letters, numbers, dashes, and underscores. Avoid spaces in filenames. This ensures your files will be compatible with many different computers and servers. 22 | 23 | {% aside 'Note' %} 24 | Need help creating a folder? Here’s how to do it in a few of the common operating systems. 25 | 26 | - [Create a folder in Windows](https://perma.cc/H5YD-7W8S) 27 | - [Create a folder in macOS](https://perma.cc/X9RD-T6RH) 28 | - [Create a folder in Ubuntu Linux](https://perma.cc/B7LV-XXD5) 29 | 30 | You will probably end up creating multiple websites as time passes, so you can go ahead and create a `sites` folder and put `my-site` inside of it if you'd like. 31 | {% endaside %} 32 | 33 | ![Screenshot of a file explorer window showing a folder named "Websites" selected in the left pane and a folder named "my-site" displayed inside the "Websites" folder on the right pane.](/assets/img/zero-to-internet-01.webp) 34 | 35 | ## Step 2. Create index.html 36 | 37 | By convention, a website's homepage is `index.html`. You may have other pages (like `about-me.html` or anything else you want), but we’ll get there later. 38 | 39 | To create `index.html`, open TextEdit on a Mac or Notepad on Windows. 40 | 41 | {% aside 'Mac users' %} 42 | Websites should be _plain text_, so we’ll need to tell TextEdit to use plain text. Click _Format_ in the menu bar then choose _Make Plain Text_. Then open TextEdit Settings, click the Open and Save tab, then check the box next to _Display HTML files as HTML code instead of formatted text_. While you’re here, if you would like TextEdit to always use plain text by default, choose _Plain text_ under the New Document tab, Format section. 43 | {% endaside %} 44 | 45 | Write a sentence or two about yourself. Here’s mine, for example: 46 | 47 | ```html 48 | My name is Blake. I enjoy making websites and teaching others to do the same. 49 | ``` 50 | 51 | Now save this file. Name it `index.html` and put it in the `my-site` folder you created in step 1. 52 | 53 | ![A text editor window displaying the content of a file named "index.html." The text reads: "My name is Blake. I enjoy making websites and teaching others to do the same.](/assets/img/zero-to-internet-02.webp) 54 | 55 | {% aside 'Note' %} 56 | When making websites it’s essential to see file extensions—the part of the filename that comes after the period. If you don’t see them, here’s how you can get [Windows](https://perma.cc/3LAG-L6YW) or [Mac](https://perma.cc/KYR3-6H3L) to show them. 57 | {% endaside %} 58 | 59 | ## Step 3. Preview your website 60 | 61 | You can open your website by double-clicking `index.html`. It should open in your default browser. Alternatively, you can launch your browser first, click _File_ > _Open File…_, then navigate to your `index.html` file. 62 | 63 | You should see your (admittedly plain) website in your browser! Feel free to adjust your text and fix any typos because we’re about to publish this page to the _world_. 64 | 65 | Don’t worry about how it looks. We’ll fix that later. 66 | 67 | ![A browser window displays a simple webpage with black text on a white background. The text reads: "My name is Blake. I enjoy making websites and teaching others to do the same." The webpage URL shown in the address bar is a local file path.](/assets/img/zero-to-internet-03.webp) 68 | 69 | ## Step 4. Publish your website 70 | 71 | There are many options for publishing your website. For our purposes, we need something free, easy, and geared toward individuals instead of businesses. Fortunately, we get just that with [Neocities](https://neocities.org). 72 | 73 | {% aside 'Alternate webhosts' %} 74 | Throughout this book, I will use Neocities as an example. But I'd like to mention a handful of alternatives in case one strikes your fancy. 75 | 76 | - **[Yay.boo](https://yay.boo/):** Silly name, effortless website publishing. You just drag and drop a folder, pick a name, and your website is online. 77 | - **[Glitch](https://glitch.com/):** This is a good option if you want to code everything directly in the browser. Build it, then publish. 78 | - **[Netlify](https://www.netlify.com/):** More sophisticated, but has a [drag-and-drop-folder-to-publish](https://perma.cc/W3PH-5KRS) feature and gives you more developer-centric features. 79 | {% endaside %} 80 | 81 | Head over to Neocities and create an account. It’s free. You’ll also need to choose a username/sitename. Your website will ultimately be on a _subdomain_ at `YOURNAME.neocities.org`. I suggest using your real name or an online username if you have one. Or, if you know what you want your page to be about, you could choose something befitting the topic (for example, `dndfanpage`). 82 | 83 | Once you’ve created your account, go to your [site’s dashboard](https://neocities.org/dashboard). You’ll see that you have some starting files there. You can ignore them for now. To publish the page you just made on your computer, drag `index.html` from your computer onto your Neocities dashboard. That will replace the `index.html` that’s already there. 84 | 85 | ![Screenshot of the Neocities dashboard showcasing a website named "My Cool Website" belonging to user blakewatson. The interface shows options for creating a new file, new folder, or uploading files, as well as information about storage usage and site activity.](/assets/img/zero-to-internet-04.webp) 86 | 87 | Once you’ve done that, click the link to your site at the top of the dashboard. 88 | 89 | **Congratulations, you just made a website!** 🎉 90 | 91 | ## Up next 92 | 93 | In the next chapter, we’ll add more content to our website and learn about a handful of HTML tags. 94 | -------------------------------------------------------------------------------- /src/02-add-content-to-your-website.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Add content to your website' 3 | summary: 'Learn how to add content like headings, links, images, and lists to a webpage using HTML tags.' 4 | permalink: 'add-content-to-your-website/' 5 | tags: chapter 6 | layout: 'chapter.njk' 7 | --- 8 | 9 | # Add content to your website 10 | 11 | First, pat yourself on the back because you now have a live, homemade website! Now it’s time to make it more interesting. 12 | 13 | {% aside 'Windows users' %} 14 | If you are trying to open your `index.html` file in Notepad but you don’t see it in your website folder when using _File > Open_, find the _Text Documents_ dropdown in the bottom right corner of the Open window and change it to _All Files_. 15 | {% endaside %} 16 | 17 | ## Add a heading 18 | 19 | Let’s give it a name! It depends on what kind of site you’re making, but mine will be a personal homepage. Everyone and their mom have a social media profile, but those are boring and same-y. We deserve _more_. And our old friend, the personal homepage, is a perfect place to start. 20 | 21 | ```plaintext 22 | Blake's Homepage 23 | 24 | My name is Blake. I enjoy making websites and teaching others to do the same. 25 | ``` 26 | 27 | Nice! Let’s view it in the browser. 28 | 29 | ![A simple webpage. The one line of text on the page reads: "Blake's Homepage My name is Blake. I enjoy making websites and teaching others to do the same.](/assets/img/add-content-1.webp) 30 | 31 | Well, that’s not what we wanted. The browser slammed our text together on one line. What gives?! 32 | 33 | We’re missing the _markup_ in Hypertext _Markup_ Language. We must tell the browser we want our site name to be a heading. In HTML, you can have up to six levels of headings. We'll set our site name as the most prominent heading, a _level 1 heading_, or `

`. 34 | 35 | What is this weird pill-shaped code I just wrote? It’s called an HTML tag. We wrap parts of our page in tags to tell the web browser what they are. Let’s do that now. 36 | 37 | ```html 38 |

Blake's Homepage

39 | 40 |

41 | My name is Blake. I enjoy making websites and teaching others to do the same. 42 |

43 | ``` 44 | 45 | Here, we’ve separated the two elements of our page and wrapped each one inside tags. We’re saying our site name should be a level 1 heading, and our first paragraph should be, well, a _paragraph_—that’s what the `p` stands for. 46 | 47 | Notice that a pair of tags has an _opening_ tag and a _closing_ tag. The closing tag looks identical to the opening tag, except it begins with a slash, `/`. 48 | 49 | Now, save the file and reload the browser. This is often the flow of website creation: You change some code, save it, and then hit reload on your browser. Then, feel the power coursing through your veins as you create a website from nothing! 50 | 51 | ![A web browser displays a simple webpage with a large, bolded title "Blake's Homepage." The content reads: "My name is Blake. I enjoy making websites and teaching others to do the same.](/assets/img/add-content-2.webp) 52 | 53 | Whoa, that’s much better! Let’s keep going by adding some more content. 54 | 55 | ## Linking to other websites 56 | 57 | Do you ever wonder why it’s called _the web_? Like what does that even mean? The special sauce that makes it a web is the _hyperlink_, or as we usually call it, a _link_. You know, it’s the often blue, often underlined text you can click to hop to another page, site, image, cat video, or anything! 58 | 59 | It’s made possible by the _anchor_ element, or “A tag,” as it’s commonly known. It looks like this: 60 | 61 | ```html 62 | This will go somewhere eventually 63 | ``` 64 | 65 | Whatever is inside the `` tags becomes clickable. But where does the link take us? Currently, nowhere. We need to specify a destination. We can do that by giving the `` an _attribute_ called `href`. It’s the _hypertext reference_—the place you want to go when you click the link. 66 | 67 | ```html 68 | Go to Wikipedia 69 | ``` 70 | 71 | Let’s add a link to our website—pick one of your favorite websites or something fun and interesting. 72 | 73 | ```html 74 |

Blake's Homepage

75 | 76 |

77 | My name is Blake. I enjoy making websites and teaching others to do the same. 78 |

79 | 80 |

81 | Check out these cool web games at Neal.fun! 82 |

83 | ``` 84 | 85 | Save and reload! 86 | 87 | ![A screenshot of a browser displaying "Blake's Homepage." The text reads: "My name is Blake. I enjoy making websites and teaching others to do the same. Check out these cool web games at Neal.fun!" The page has a minimalistic design with black text on a white background and includes a link.](/assets/img/add-content-3.webp) 88 | 89 | With the help of the humble `` tag, your website becomes a part of the living, breathing web. There are over a hundred HTML tags, but you don’t need to memorize them to build a website. You can do a lot with a little. Let’s look at a few more tags that can get you started. 90 | 91 | ## Lists of things 92 | 93 | List lovers, this set of tags is for you. We’ll use the _unordered list_ element, `