You’ve learned a lot! HTML tags, CSS rules, jQuery, images, tables, links, navigation bars, ... If you’ve done the exercises, you’ve shown you can use these tech things to create Web pages.
Now for the Big Payoff: creating a complete Web site. That’s what this lesson is about.
We’ll look at simple static Web sites. No forums, chat rooms, or such (we’ll add some of those later). But don’t underestimate the power of a static site. Static sites are the backbone of the Web.
If you run a business, a static site tells your customers where your business is, what you sell, why they should buy what you sell, and how to buy. You can have maps, business hours, pictures of you and your products, suggestions on how to get the most from your products, contact information, and much more. A site like this can have great value for your business.
Suppose you work for an elementary school. A static site can give the school calendar, tell parents how to enroll their children, give bus routes and times, list supplies kids will need in different grades, promote special events, and lots more. A site like this can have great value for the school.
And what about you? Your personal Web site can promote your personal brand. Use your site to let clients or employers know who you are, what you can do, and what you’re enthusiastic about. You can give samples of your work. This can mean job offers, contracts, and a chance to do some networking. A site like this can have great value for you.
This lesson doesn’t introduce much new tech. You already know enough to make static sites. Instead, this lesson talks about how to use the tech to meet the goals of site owners and users.
Let’s go!
Let’s put your technical skills to use. This page gives an overview of how you create a static Web site that meets owner, user, and developer goals.
By the end of this page, you should know the three main steps of site creation:
There are three big steps in creating a site:
You need to know what users want from the site, what the site’s owners want, and what you as a Weber want.
A framework is a structure for your site and its pages. Creating the site will be easier if you design a framework before you jump in and start coding individual pages.
If you’ve done the framework right, you can focus on the content of each page, and not worry about colors, fonts, navigation, and so on.
Let’s go over each step.
Setting the right goals is critical. You can spend hundreds of hours creating a whiz-bang site with all the latest goodies. But if it doesn’t help users do something they want to do, it won’t be worth much.
You should pay attention to the goals of three types of people: site users, site owners, and Webers.
Site users come to the site (or not). They want to do tasks, like find out what the site owner’s store charges for dog grooming. They also want to have a good, or at least not unpleasant, experience at your site.
Site owners pay for the site. They care about things like user behavior (e.g., buying stuff), branding and brand awareness, and the costs of the site.
The third group is the Webers who create the site. They want to help users and owners meet their goals. They want to control costs for the owners. Most Webers also want to take pride in their work.
Once you have the goals, you could dive in and start coding pages. But it’s best to create a framework first.
There are two things here. The first is the overall structure of the site, that is, the sections, subsections, and pages (e.g., a products section, with a section on grooming products, with a page on shampoos). This structure is what the user sees in the navigation bars, site map, page titles, and so on.

Figure 1. Site structure map
The second thing is designing a page template or two. Every page on the site will be based on a template that has standard layout and a standard look and feel. Making a template gives your site consistency. The nav bars will be in the same place on different pages, the fonts will be the same, etc.

Figure 2. Page template
Once you know the goals and have a framework, you start creating pages. You copy the template to make a new page, add content, copy the template again, add content, and so on. This will go smoothly if the framework is solid.
You might think that you always do the steps in order, like this:

Figure 3. The ideal
Very neat. But this is what happens in the real world:

Figure 4. The real world
For example, you’ll work out the goals, and then when you’re creating the structure, you’ll think about a new goal the site should meet. You’ll go back and add the goal, and revise the structure. Then when you’re filling in the framework, you’ll think of a way to improve the template, so you’ll go back and revise it.
Revising is normal. It happens in every project, no matter who the Weber is. CoreDogs lessons have been revised many times. In fact, how can you improve the quality of a Web site without changing it?
You should plan for change. If you design the framework the right way, most changes won’t take too long. But if you design it poorly or, even worse, don’t design it at all, your site will be difficult to change.
There are three main steps in designing a Web site:
Before we get started on the first step, let’s talk about creating a place for you development work.
When you work with a site owner, you need to have a way to get feedback from him or her about your work. This lesson shows you how to create a private version of a site that only you and the owner can access.
By the end of this lesson, you should:
When you – a Weber – work on a site, you talk a lot with the site owner. You show the owner something, and ask for feedback. You change the site, and ask again.

Figure 1. Weber and owner working together
Of course, the site owner could be you, in which case you talk to yourself a lot. Try to keep those conversations private, or you could find yourself spending time in a “special” kennel.
You don’t want regular people to see the site as you’re working on it. Just the owner, and other people you want to get feedback from.
Only when the site is ready do you show it to the outside world. This is often called publishing the site.

Figure 2. Weber publishing the final site
So you need:
Sometimes the development site is hosted on a special development server, a machine (or Web hosting account) that is physically separate from the production server. But sometimes the development and production sites are on the same server.
Let’s look at some ways you can create a development site that only you and the site owners can see. I’ll assume that the production site will be on a shared Web host, like Hostgator.
For this page, let’s say you’re working on a site about dog blankets. It will be at dogblanket.com.
You can just create the site on your own computer. This works well if you are building a site for yourself, or if you and the owner can easily get together over the same computer.
There are two ways to do things. The easiest is just to create a directory somewhere on your disk drive. Put the files for the site there. For example, if you are working on the dog blankets site on a Windows computer, you might put the files in Documents\websites\dogblanket.
Another way is to install the Web server Apache on your own computer. You can download XAMPP from ApacheFriends. XAMPP packages Apache with some other common server software. You usually install it on the C:\ drive (for Windows). The root of the XAMPP Web server will be something like C:\xampp\htdocs\. So you would put the files for your dog blanket site in C:\xampp\htdocs\dogblanket\.
You need to install XAMPP if you want to run PHP programs on your computer. These could be programs you write yourself, or things like content management systems, photo galleries, newsletter programs, or other software that other people write. More about this in the book ServerCore.
Another alternative is to put your development Web site on a portable file system, that you can carry around with you. One way to do that is with a USB thumb drive. Plug it in to your own computer when you want to work on the site yourself. When you go talk to the owner, plug it in to his/her computer.
You can also put software on the device, like the editor Notepad++. You can make quick changes to the site when you’re working in the owner’s office.
The ultimate portable file system is a laptop or netbook. It comes with a computer attached. This is a good option, because you don’t have to use the site owner’s computer when you visit him or her. You have all of your own software, browser bookmarks, and so on.
The problem with using your own computer or a portable file system is that you and the owner have to be physically in the same place to work together. It would be nice if you could make a change to the development site, and send an email to the owner, asking “What do you think of that?” The owner could respond, and you could change it again.
One approach is to create a directory on your Web hosting account, and use it to host the development site. The directory tree on your Web server for the dog blanket project might look like this:

Figure 3. Development site in directory
The development site (the green box) is a another version of the actual site (the blue box). It’s inside the production site’s directory tree. You can mess with the development version without affecting what users of the production site see.
The domain name is dogblanket.com. The URL of the production home page would be http://dogblanket.com/index.html. The URL of the development home page would be http://dogblanket.com/development/index.html.

Figure 4. Home pages
There are two things you should do to make this work smoothly:
Your Web host’s control panel probably gives you an easy way to put passwords on directories. This is from the homepage of one of Hostgator’s control panels:

Figure 5. Protect a directory with a password
You select a directory to protect (like the development directory), then enter a user name and password for it:

Figure 6. Creating a user name and password
You can create more than one user name and password for the directory. But usually you won’t need to.
When a user tries to access a file in the directory, s/he has to enter a user name and password:

Figure 7. Authentication
When your development site is ready, you want to copy its files into the production area. It’s easy to break pages when you do do this.
Suppose you were writing the page at http://dogblanket.com/development/index.html. This is the home page of the development site. You wanted a link to the main page of the products section of your site. So you added this HTML, with an absolute link:
<p>Check out our awesome <a href="http://dogblanket.com/development/products/index.html">products</a>.</p>
Works just fine. Now suppose you publish the site. You copy all of the files from the development directory into the main part of the site. That means you copy the file http://dogblanket.com/development/index.html to http://dogblanket.com/index.html, and http://dogblanket.com/development/products/index.html to http://dogblanket.com/products/index.html.
You want the link in the HTML to go to http://dogblanket.com/products/index.html. But of course, it doesn’t, because you’ve hard-coded the link to http://dogblanket.com/development/products/index.html into your file.
Rats! You have to go through every file, find every link, and change it. That takes time. And it would be easy to make a mistake.
But suppose you had used the following HTML in http://dogblanket.com/development/index.html:
<p>Check out our awesome <a href="products/index.html">products</a>.</p>
This is a relative link. It says, “From wherever you are right now, go down into the products directory and find index.html.” Everything would work just fine. As long as you maintain the relationship between index.html and products/index.html, you can put the files anywhere you want.
So, when you work on your site, use relative links. If you have to use an absolute or root relative link, make a note of it. Then remember to check the link after you publish your site.
For more on relative, absolute, and root relative links, see the lesson making links.
In this lesson, you learned:
Now you have a place to work. Let’s get started by working out the goals of the site.
There are three steps in creating a site: define goals, design a framework, and fill the framework. Let’s talk about the first one.
By the end of this page, you should know what goals the following have:
The ideas in this lesson can get “fluffy.” Let’s tie them to a particular business, so we have something concrete to talk about.
I mainly talk about small businesses in this lesson. But the principles apply to schools, city governments, large companies, and so on.
Clara Cairn owns Delightful Dogs. DD has four locations around a city. Each location offers services and products. The services are grooming, obedience training (mainly for the humans), and drop-in day care. Most of DD’s revenue is from these services. DD also sells products, like toys, collars, leashes, shampoo, food, and diet supplements.
Delightful Dogs has eight employees at its main store, and five at each of the others. DD also has part-time employees, mainly college students and retired people who help out at the day care and training classes.
Clara’s cousin Blair Bulldog put together a Web site a few years ago. It has basic information like maps and store hours. But, well, ... it sucks. It’s ugly, information is hard to find, and there’s a lot it doesn’t say.
Clara hires you to make a better site. You can start from scratch, throwing away the current site.
OK, let’s talk about site goals. We’ll start with site owners, then move on to site visitors.
Let’s talk about what the owners of a Web site want from their investment. It varies a lot between businesses, of course. But there are some things that just about every own wants.
The bottom line is simple enough. Owners invest in Web sites because they think the sites will help their business.
If you need to explain in one sentence what a Web site can do for a business, here it is:
A Web site can turn site visitors into customers, and keep existing customers coming back.
A visitor is someone who comes to the Web site. They might type the URL into their browser, come via a search engine, get an email from a friend, etc.
I’ll make a big assumption here: business owners know who their customers are, and what their customers want.
Some owners only have a fuzzy idea about these things. This is a problem for Webers. If owners don’t know who their customers are or what they want, it’s hard to create Web sites that attract them. But let’s put that aside for now. Let’s assume that owners know their customers.
Clara wants people in her city to know about Delightful Dogs, and what DD can do for them. When people think of “dog grooming” or “dog training,” she would like them to think of DD. They might end up going to a competitor, but she wants DD to be among the choices they select from.
This is about brands. A brand is a set of beliefs that people have. It’s an association between some symbols (logo, business name, product name) and some things of value.
You know a lot of brands. McDonalds, for example, brings to mind cheap, tasty fast food. The company spends a lot of money creating beliefs in people’s brains about symbols like “McDonalds” and “Big Mac.”
Clara should know what she wants the brand “Delightful Dogs” to mean. Maybe “making dogs clean,” “making dogs cute,” and “teaching dogs not to eat a human’s favorite shoes.”
If humans don’t want us to eat their shoes, why do they make them so chewy? Huh? Huh?! Silly humans.
Er, why are we talking about brands and stuff? CoreDogs is about Web tech.
Can I take that one?
OK.
When a company hires you to make a Web site, they don’t really want a Web site.
They don’t?
No.
Have you been sniffing certain substances again?
No, I don’t do that anymore.
The company hires you because they want the benefits the Web site brings.
If you want to get paid well, you need to understand why you are getting paid at all. You can suggest ways the site owner can get more value from each dollar they spend on you.
The owner will then see the value of spending money on you.
Oh, I get it.
It’s hard to decide how much business and how much tech you should know. You’ll figure that out as your career develops.
But even if you end up way over on the tech side, you should keep the business in mind.
So, the first thing site owners like Clara want is awareness of their brand.
Owners often want visitors to do something, like:
For each one there is a call to action. A call to action encourages site visitors to do something the site owner wants them to do.
Different behaviors involve different amounts of commitment from visitors. The behavior “print a coupon” doesn’t commit the visitor to much. Just a sheet of paper and some button clicks. The next behavior, sign up for a newsletter, requires a little more commitment, since the visitor gives an email address. Going to a store requires even more commitment. And buying a product turns a site visitor into a business customer.
When you create the Delightful Dogs site, you should sprinkle pages with calls to action. For example:

Figure 1. Call to action
Clicking would go to a page where the visitor could set up a grooming appointment.
A call to action should appear wherever the visitor might be thinking about the action. Figure 1 could be on the home page, the main grooming page, and a special offers page.
Owners want to (1) make people aware of their business, and (2) encourage visitor behavior. But they want to do this at a reasonable cost.
One way to evaluate a Web site is to look at its cost/benefit ratio. Every dollar spent on the site should yield more than one dollar in profit.
Of course, it’s hard to precisely measure these things, particular benefits. But there are things you can do.
First, work with Clara to understand Delightful Dogs and its customers. Talk to DD’s employees, particularly the ones who are making sales. They will have ideas about what motivates customers. If you can, talk to some of the customers. Ask them what they like about DD.
Design the site around the business. Include calls to action. Include testimonials from happy customers. These things will make Clara happy. She will see that you’re thinking about the business benefits of your technical work.
Second, use the idea of a framework to reduce the cost of creating and updating the site. We’ll talk more about this later, but the essential idea is to create reusable components and share them across pages.
We’ve talked about site owners. They want to build brand awareness, encourage visitor behavior, and control costs. What about the visitors?
Remember, the site should make visitors into customers. Those visitors who are already customers should find something of value on the site.
Let’s talk about visitor goals. We’ll talk about:
Not every customer is alike. Business owners can identify different types of customers. They know they need to appeal to different customers in different ways.
Suppose you ask Clara about her business. Some of her customers want DD to do all of their dog grooming. Other customers don’t want to spend that kind of money. They want to buy good shampoos and clippers, and do it themselves.
Some customers have puppies they want to train. Others have older dogs that don’t need that work.
Some customers indulge their dogs. They buy all sorts of toys and knick knacks. Other customers are more hard nosed. They’ll buy that rope toy, but only if they’re sure that it will help save their shoes.
How do you design a site for all of these different people? Creating personas is a good start. A persona is a description of a typical site visitor. Give the persona a name, and pick a photo. Describe the person.
Here a sample persona for Delightful Dogs:

Figure 2. Persona
You might work with Clara to create about five personas.
Visitors come to a site because it does something useful for them. It helps them solve a problem. For each persona, make a list of problems and related task goals.
It can help to think about different stages of the buying decision.
Let’s take Laura, for example.
Hey, er, I can see that this is valuable. But I don’t know whether I could do all of this. Or whether I even what to.
That’s OK. It’s good that you’re thinking about what jobs you want to do.
But suppose you work for a Web company as a designer. Someone else in the company works with clients. S/he brings page layouts to you and says, “Make this.”
You might say to yourself, “Self, why would I have to know how to talk to clients?”
Well, you don’t have to, but you will be more valuable if you can. You’ll better understand what clients want. You can make suggestions about the layouts, or at least ask questions about client needs.
And what happens when the economy goes sour? Who will get laid off? The person who can only do design? Or the designer who understands what clients want?
Specializing is OK. It lets you get really good at something. Ideally, something you love doing.
But don’t specialize yourself into a corner. That corner might go away. And you with it.
Site visitors have tasks they want to do. But if your site makes the task too unpleasant, visitors will go elsewhere.
You’ll hear the term look and feel. Different people mean different things by look and feel, but they generally have two things in mind:
Aesthetics sets the emotional tone of the site. It’s hard to define, since much of it is subconscious. But you can get the sense of it by looking at a site, and writing down a few words that the site invokes. Use words that describing feelings, or are directly linked to feelings.
I looked at this:

Figure 3. Lego home page
I wrote down “fun, play, kids.” “Kids” is not a feeling, but it’s what a psychologist would call an “emotionally laden word.” It’s a word that brings emotions to mind.
Then I looked at this:

Figure 4. Web Designer’s Wall
I wrote down “Arty, fancy, advanced.” The “advanced” might not come up in your head. That shows that people see different things on the same page.
A site is usable if you can complete tasks quickly and efficiently.
Suppose you’re thinking about starting an online business. You read something on this page that might help. You want to remind yourself to think about it.
See the “Your notes for this page” widget to the right? Of course you do, it’s always there (if you’ve logged in). No scrolling up and down the page to find it. Click Edit, and type your note. You don’t even have to remember to click the Save button; the widget will save automatically after a few seconds.
You might make notes like “Think about this for my business” on lots of pages. It’s hard to remember where all the notes are. But you don’t have to. Open “Your quick links” to the right, and click on “Your page notes.” You’ll see all the notes you’ve made on every page.
This is an example of usability. Make tasks easy for the site visitor. Look at the tasks you created for each persona, and make sure that each one is easy to complete.
We’ve talked about the goals of the site owner, and the site visitor. What about you, the Weber who creates the site?
If you want to get paid, you need to satisfy site owners. Remember that they’re looking for business value. Value is about benefits and costs.
There are two types of costs:
Later in this lesson, we’ll talk about creating a site framework. One of the main reasons for doing so is cost control. A good framework lets you reuse components, like style sheets and nav bars. This lets you create the site faster and, therefore, more cheaply.
But a framework also helps with maintenance. Suppose you want to change the size of the <h2> font on every page. If you design the framework right, you can change every Web page by just editing one CSS file. It doesn’t matter whether you have 50, 100, or 1,000 pages. It takes you 10 minutes to change all of them. W00f!
To really create the best framework, you’ll need server-side tools like PHP. PHP isn’t in ClientCore, the book you’re reading now. It’s covered in the book ServerCore. But we’ll talk about PHP a little at the end of this lesson.
Most people want to take pride in their work. Webers are no different. It’s personally satisfying when you create something that is really good.
For me, learning is another goal. I try to learn something from every project. It might be a new bit of tech, or a different way of thinking about a business.
Another payoff is expanding your social network. You get to meet all kinds of people. They might become part of your professional network, or maybe just fun people to talk to.
You’ve learned about the goals that different people have for a Web site.
Let’s work on goals for your personal Web site. We’ll also talk about the idea of a “personal brand.”
You know how to set the goals for a Web site. There are goals for site owners, visitors, and developers. Now it’s time to start designing something to meet those goals.
This page gives you the big picture of site frameworks. By the end of this page, you should:
Once you see the big picture, we can look at the individual pieces.
A framework is like the chassis of a car:

Or the skeleton of a fish:

You don’t see it from the outside. But a good framework holds your entire site together. Make a good framework, and your site will:
There are three parts to a good framework:
This is about the sections and subsections of the site. The goal is to help site visitors zero in on the information they need.
When you finish the information architecture step, you have a structure map that shows the major parts of your site.

Figure 1. Structure map for a dog nutrition site
Each page on the site will have regions, like a header, a left nav bar, a bottom nav bar.

Figure 2. Page layout
Most sites use just one or two layouts for all pages. The pieces that you put into the regions (e.g., the nav bar in the header) are reused across all pages with the same layout. You only need to create them once, and they appear on every page.
You need to create an aesthetically pleasing and usable site. This means choosing colors, fonts, graphics, and widgets. A widget is an active component, like a search box.
This page gives the big picture of site frameworks.
Let’s talk more about information architecture.
We’re creating a framework for a site. The framework is made up of:
This page is about the first part: information architecture.
By the end of this page, you should:

Suppose Wendy goes to Delightful Dogs’ Web site. She has a goal in mind: “Find out what type of flea shampoo is best for my dog Goober.”

There might be hundreds of pages on the site, for different products, for grooming, exercise, play, diet, ... How is Wendy going to find the specific information s/he is looking for?
Information architecture (IA) is about organizing the content on a site to make it easy for people to complete task goals. This means being able to find information, even with a visitor does not know exactly what information s/he wants.
One solution is to create a hierarchy on the site. The Weber divides pages into categories and subcategories. The site shows the categories to visitors, usually in nav bars and site maps.
Let’s look at two examples. TigerDirect:http://www.tigerdirect.com/ and Newegg:http://www.newegg.com/ are online retailers of computers and electronics. They both sell thousands of different products. Both companies want customers to be able to quickly find what they’re looking for. If someone can’t find what s/he’s looking for on TigerDirect, Newegg is just a click away.
Here’s the top left of TigerDirect’s page, as it was at the time of writing. There’s a nav bar with some product categories.

Figure 1. TigerDirect
Newegg uses different categories:

Figure 2. Newegg
But both are using a nav bar to present categories.
Each of the categories is divided up further. For example, click on the Computers tab on TigerDirect and you get:

Figure 3. Subcategories
As you might guess, this page uses the <table> tag.
Subcategories have subcategories:

Figure 4. Subsubcategories
And so on.
Hierarchy is the most common way to organize a site. You can capture the organization in structure map. Here’s an example.

Figure 5. Structure map for a dog nutrition site
There are many different ways to categorize information. TigerDirect and Newegg organize their sites around product categories. They group the products differently, but both sites are about products.
Sites that are not about products do different things. For example, here’s a nav bar from CNN, as it was at the time of writing:

Figure 6. CNN nav bar
The categories are based on the content of the story.
What happens when a story fits into more than one category? Like, a story about a singer from Egypt would fit into World and Entertainment.
Good question. Think about this: why are we creating these categories? Does that help you decide where to put the story?
Umm, we’re doing this to help site visitors. So think like them. What would be most useful?
Right! And what’s the answer?
Well, some people would expect it to be in World. But others might think it belongs in Entertainment. You can’t please both of them.
Why not?
Oh, I know! Put the story in both categories!
Yes! That would make sense. There’s no reason for the story categories to be mutually exclusive.
What’s “mutually exclusive” mean?
Oo! Oo! It means that something can be in only one category. But news isn’t like that.
Yep. So, when in doubt, think of what helps visitors.
Getting the hierarchy right is important. Visitors want to quickly find the category that’s likely to hold the information they want, then the subcategory, and so on, until they find the specific thing they’re looking for. Visitors will keep clicking through pages, as long as they’re following the scent of the information they need.
Often the people working for the business will know how customers think about things. Start there for your categories.
Site maps show the entire structure on a single page. They’re good for a number of reasons.
Here’s your first structure map for the DD site.

Figure 7. First structure map
The “Stores” category will have a page for each store, with business hours, driving directions, a map, and contact information.
The site includes a blog. You and Clara talked about having a blog as a way to engage customers. When a new blog entry appears in a customer’s news reader, it reminds him or her about Delightful Dogs.
Blogs also help people using search engines. Someone searching for “dog food bad ingredients” might come across a blog entry Clara wrote two years ago about the bad things some manufacturers put in dog food. This visitor gets useful information, and sees the DD branding on the page.
You show the structure map to Clara and her staff. Together, you find some problems. First, Delightful Dogs is known for its services. The products are less important to the business, and not a central part of the Delightful Dogs brand. Adding a “Services” category doesn’t seem useful. It just makes visitors click through to an extra level.
The second problem is with the product categories. The product category “Training” makes sense to the employees who train dogs. They think of collars, leashes, and other things as training products. But the “Training” product category isn’t something that customers understand. If they come to the site looking for a collar, they wouldn’t think to look in the training products category.
Another issue is that many customers who want products come in looking for toys. This category makes sense to customers, but it isn’t in the structure map.
Here’s a revised structure map.

Figure 8. Final structure map
Each service is now at the top of the hierarchy, equal to “Products.” L&C stands for leashes and collars (I ran out of space in the box). A toys product category was added.
Clara agrees that this will be a good structure for the site. You tell her that you’ll also add some other pages, like a site map and a copyright page.
Information architecture is about grouping content to make it easy for site visitors to find. But navigating through a hierarchy isn’t the only way people look for information.
Visitors also find information by searching. This is especially true on very large sites, like Wikipedia. Wikipedia does have a hierarchy. Here’s part of it:

Figure 9. Wikipedia categories
In all the times I have used Wikipedia, I don’t remember ever having used the categories. I go right to the search widget:

Figure 10. Wikipedia search widget
Why? I always have a specific question in mind. Maybe I want to look up something about Willow (sigh) from Buffy the Vampire Slayer. It’s faster for me to search than to dig through the structure.
I also search site maps. But not with a widget, with my browser’s search feature. I go to a site map, hit control+F, type in some text, and the browser will show me where on the site map the text appears. It might be deep in the structure, and I can jump right there.
This page is on information architecture.
The first part of a site’s framework is its information architecture. The next part is its page layout. Let’s talk about that next.
You’ve learned about the first part of a site’s framework: information architecture. Let’s move on to page layout.
By the end of this lesson/page, you should:
Web pages are often divided into the following regions:

Figure 1. Regions
Different things can be placed in different regions.
Not all sites are like this, of course. CoreDogs isn’t, for example. But the regions in Figure 1 are common.
Here’s how the regions might be used.

Figure 2. Regions example
In this one, the top region contains the logo, the site name, and a nav bar. The center region has a page header and content. The bottom region has a nav bar. The left and right regions are not used.
You make layouts with CSS. There are many ways to make layouts. They fall into two main categories, depending on what happens when the user resizes the browser window.
A liquid layout expands horizontally to fill the browser window. Usually it’s the center region that expands. Liquid layout are also called fluid layouts.

Figure 3. Liquid layout
Liquid layouts use as much of the browser window as they can. However, the width of the center region is unpredictable. Many designers prefer fixed layouts, where they have better control. We’ll look at fixed layouts later.
Let’s start by creating a page that looks like this:

Figure 4. Liquid layout, no whitespace
The page has five regions: top, left, center, right, and bottom. There is no whitespace between the regions, or inside the regions. We’ll change that later.
You can try the page. Resize the browser window, and watch the center region change its size.
Here is the code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Liquid layout</title>
<style type="text/css">
body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 14px;
margin: 0;
padding: 0;
}
p {
margin: 0;
padding: 0;
}
#top_region {
background-color: #E0E0E0;
}
#left_region {
float: left;
width: 120px;
background-color: #defee2;
}
#center_region {
margin-left: 120px;
margin-right: 120px;
background-color: #fdffca;
}
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
}
#bottom_region {
background-color: #E0E0E0;
}
</style>
</head>
<body>
<div id="top_region">
<p>Top region</p>
</div>
<div id="left_region">
<p>Left region</p>
</div>
<div id="right_region">
<p>Right region</p>
</div>
<div id="center_region">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat. </p>
</div>
<div id="bottom_region">
<p>Bottom region</p>
</div>
</body>
</html>
Figure 5. Code for liquid layout with no whitespace
Let’s look at the HTML first. It’s simple. Each region has its own <div> with a unique id. That’s it!
The CSS does all the work.
Lines 10 and 11, and 14 and 15 need some explanation. They are:
margin: 0;
padding: 0;
Let’s think back a bit. Remember that every HTML tag has a default style. The default is what the browser will do if you don’t give it a CSS rule. For example, if you don’t say otherwise, <h1> renders as bold text in a large, serif font. You can use CSS to change this, but if you don’t, the browser makes <h1>s large and serifed.
Just as there are defaults for font-size and font-family, there are defaults for padding and margin. By default, the browser adds a little whitespace around headings, paragraphs, and other elements. Even the <body> tag has some whitespace by default.
Unfortunately, the amount of default whitespace varies across browsers. This makes it hard to create pixel-perfect pages. Setting margin:0 and padding:0 takes care of that. It tells the browser to remove spacing entirely. Then we can add the exact spacing we want to each element.
Let’s move on. Lines 20 to 24 style the left region:
#left_region {
float: left;
width: 120px;
background-color: #defee2;
}
Line 21 uses the float property (you saw this when we talked about nav bars). float removes the left region from the normal flow of the HTML, and sends it to the left of the page. The width is fixed at 120px. It will stay that way as the browser window is resized.
Lines 30 to 34 style the right region:
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
}
It’s sent to the right, and given a fixed width.
The center region is styled by lines 25 to 29:
#center_region {
margin-left: 120px;
margin-right: 120px;
background-color: #fdffca;
}
It doesn’t have a width property set, so it’s free to expand to fill the browser width. The left and right margins are set to allow for the left and right regions.
That’s it! You can try the page. Resize the browser window, and watch the center region change its width. The top and bottom regions expand and contract as well, since they have no width in their CSS rules.
Let’s add some whitespace around each of the regions. We want to end up with something like this:

Figure 6. Liquid layout with whitespace
Each region has both padding and margins. Remember the difference:

Figure 7. Margins and padding
Margins are outside the border of an element. Padding is inside the border of an element, between the border and the element’s content.
Here’s some CSS that will do the job. The rest of the page is the same as before, in Figure 5. You can try the page.
#top_region {
background-color: #E0E0E0;
padding: 5px;
margin: 5px;
}
#left_region {
float: left;
width: 120px;
background-color: #defee2;
padding: 5px;
margin: 0 5px 5px 5px;
}
#center_region {
margin: 0 140px 5px 140px;
background-color: #fdffca;
padding: 5px;
}
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
padding: 5px;
margin: 0 5px 5px 5px;
}
#bottom_region {
background-color: #E0E0E0;
padding: 5px;
margin: 0 5px 0 5px;
}
Figure 8. Adding whitespace
The top region has padding and margins added:
#top_region {
background-color: #E0E0E0;
padding: 5px;
margin: 5px;
}
This will add margins to all sides of the region.
The left region is immediately below the top region. We want the same sized gap above the top region and between the top and left, like this:

Figure 9. Margin goal
Both of the gaps are five pixels.
Suppose we used the following rule for the left region:
#left_region {
float: left;
width: 120px;
background-color: #defee2;
padding: 5px;
margin: 5px;
}
Figure 10. Bad rule, naughty rule
This would seem to make sense. margin: 5px; in line 11 would add five pixels all around.
The problem is that the top region already has a five pixel margin below it. Add a five pixel margin to the top of the left region, and you get this:

Figure 11. Wrong margin
There will a 10 pixel gap between the top and left regions. Five pixels for the bottom margin of the top region, and another five pixels for the top margin of the left region.
To fix it, set the top margin of the left region to zero:
#left_region {
float: left;
width: 120px;
background-color: #defee2;
padding: 5px;
margin: 0 5px 5px 5px;
}
Figure 12. Good margin
Line 11 has four values. Remember that they are applied in clockwise order from the top.

Figure 13. Margin order
This fixes the problem, giving us the five pixel gap we wanted.
The same approach is used for the other regions.
The center region has been adjusted a little:
#center_region {
margin: 0 140px 5px 140px;
background-color: #fdffca;
padding: 5px;
}
Figure 14. Center
The left and right margins in line 30 allow for the extra whitespace around the left, center, and right regions.
It’s looking good, but there’s still a problem with the layout. Have a look at this.

Figure 6 (again). Liquid layout with whitespace
Notice that the left and right regions are too short. It would be better if they looked like this:

Figure 15. Correct region heights
The left, center, and right regions are all the same height.
This is hard to do with plain CSS. Fortunately, there’s a jQuery plug-in that does it for us. Remember that a plug-in is some code that extends jQuery.
The plug-in we’ll use is called equalHeights, written by Rob Glazebrook. Here’s is the entire page. You can try it.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Liquid layout with equal sidebar heights</title>
<style type="text/css">
body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 14px;
margin: 0;
padding: 0;
}
p {
margin: 0;
padding: 0;
}
#top_region {
background-color: #E0E0E0;
padding: 5px;
margin: 5px;
}
#left_region {
float: left;
width: 120px;
background-color: #defee2;
padding: 5px;
margin: 0 5px 5px 5px;
}
#center_region {
margin: 0 140px 5px 140px;
background-color: #fdffca;
padding: 5px;
}
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
padding: 5px;
margin: 0 5px 5px 5px;
}
#bottom_region {
background-color: #E0E0E0;
padding: 5px;
margin: 0 5px 0 5px;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://coredogs.com/resources/jquery.equalheights.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$("#center_region, #left_region, #right_region").equalHeights();
});
</script>
</head>
<body>
<div id="top_region">
<p>Top region</p>
</div>
<div id="left_region">
<p>Left region</p>
</div>
<div id="right_region">
<p>Right region</p>
</div>
<div id="center_region">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat.</p>
</div>
<div id="bottom_region">
<p>Bottom region</p>
</div>
</body>
</html>
Figure 16. Equal region heights
None of the CSS or anything in the <body> has changed. The changes are in two places.
First, we need to include the plug-in code. It’s in a JavaScript file, so we include it with the <script> tag, just as we include any other JavaScript file.
You could download the plug-in to your own server. But for convenience, I’ve put it in the CoreDogs resource directory. You can refer to it there. That is what this line does:
<script type="text/javascript" src="http://coredogs.com/resources/jquery.equalheights.js"></script>
You can copy-and-paste this into your own projects, if you want.
Now that we have the plug-in in the page, we need to call it.
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$("#center_region, #left_region, #right_region").equalHeights();
});
</script>
Recall that code in $(document).ready() is run when the page is loaded and ready to go. We need to create a list of elements, and call the equalHeights() function on the list. It will make all of the elements in the list the same height.
The code $("#center_region, #left_region, #right_region") creates the list of elements. Remember that # means “find the element with id given.” So #center_region tells jQuery to find the element with the id of center_region. #left_region says “find the element with the id of left_region.” And so on.
Notice the comma (,) between the selectors. This creates a list of elements. Don’t forget the comma, or it won’t work.
So we end up with $("#center_region, #left_region, #right_region").equalHeights(). This builds a list of three elements, and calls the equalHeights() function on that list. Where is the JavaScript code for the equalHeights() function? In the file jquery.equalheights.js, that we included in line 48.
The result? All the columns are equal height. W00f!
If you want, copy the code in Figure 16 for your own projects. Adjust the width of the left and right regions as required.
We’ve looked at liquid layouts, where the page expands horizontally to fill the entire browser window. Now let’s look at fixed layouts.
As you might expect, a fixed layout stays the same width as the browser window is resized.

Figure 17. Fixed layout
Typically, the page is centered on the screen. Extra space appears to the left and right of the fixed width page.
Fixed width designs are easier to control. You know exactly how much space there is in each column. You can create content (like images) accordingly.
Let’s make this:

Figure 18. Fixed layout
It’s zoomed out, of course. The content is centered in the browser window, with extra space on the left and right.
We can take the code for the fluid layout, and only change the CSS for the <body>. Here is the complete code, without padding, and without the sidebar heights made equal:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Fixed layout</title>
<style type="text/css">
body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 14px;
background-color: #ffeaff;
width: 750px;
margin: 5px auto 5px auto;
padding: 0;
}
p {
margin: 0;
padding: 0;
}
#top_region {
background-color: #E0E0E0;
}
#left_region {
float: left;
width: 120px;
background-color: #defee2;
}
#center_region {
margin-left: 120px;
margin-right: 120px;
background-color: #fdffca;
}
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
}
#bottom_region {
background-color: #E0E0E0;
}
</style>
</head>
<body>
<div id="top_region">
<p>Top region</p>
</div>
<div id="left_region">
<p>Left region</p>
</div>
<div id="right_region">
<p>Right region</p>
</div>
<div id="center_region">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat. </p>
</div>
<div id="bottom_region">
<p>Bottom region</p>
</div>
</body>
</html>
Figure 19. Code for fixed layout
Only the CSS rule for the <body> tag in lines 7 to 14 has changed. Here’s the new rule:
body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 14px;
background-color: #ffeaff;
width: 750px;
margin: 5px auto 5px auto;
padding: 0;
}
Figure 20. CSS rule for the <body> tag
You can try the page.
Line 10 gives the page background a (nasty) color, so you can see where the content begins and ends.
Line 11 sets the page’s width to 750px. Why 750? PC screen resolutions have some standard sizes, like 800px x 600px, and 1,024px x 768px. Using 750px means that the page will fit on an 800px-wide screen. The extra 50px (800px – 750px) is for scroll bars, window borders, stuff like that.
Actually, 750px is conservative. As of January 2009, W3Schools reported that only 4% of their users had a width of 800px. Almost everyone uses a resolution of at least 1,024px.
The exception is mobile devices, which often use displays around 480px wide.
Line 12 centers the content on the screen. The line is:
margin: 5px auto 5px auto;
When you use auto for an element’s left and right margins, the browser centers the element. The element is the <body> in this case. The <body> contains everything, so the entire page is centered. W00f!
Earlier, you saw code for a liquid layout with whitespace between the regions, and the sidebars given equal heights. Remember that “sidebar” is another name for a left or right region.
Let’s create a fixed version of our test page. It will look like this:

Figure 21. Fixed layout with whitespace and correct sidebar heights
It turns out to be quite easy. Just take the new CSS rule for the <body> from Figure 20, and plunk it into the code for the liquid layout. Here is code for the entire page:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Fixed layout with equal sidebar heights</title>
<style type="text/css">
body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 14px;
background-color: #ffeaff;
width: 750px;
margin: 5px auto 5px auto;
padding: 0;
}
p {
margin: 0;
padding: 0;
}
#top_region {
background-color: #E0E0E0;
padding: 5px;
margin: 5px;
}
#left_region {
float: left;
width: 120px;
background-color: #defee2;
padding: 5px;
margin: 0 5px 5px 5px;
}
#center_region {
margin: 0 140px 5px 140px;
background-color: #fdffca;
padding: 5px;
}
#right_region {
float: right;
width: 120px;
background-color: #ddddff;
padding: 5px;
margin: 0 5px 5px 5px;
}
#bottom_region {
background-color: #E0E0E0;
padding: 5px;
margin: 0 5px 0 5px;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://coredogs.com/resources/jquery.equalheights.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$("#center_region, #left_region, #right_region").equalHeights();
});
</script>
</head>
<body>
<div id="top_region">
<p>Top region</p>
</div>
<div id="left_region">
<p>Left region</p>
</div>
<div id="right_region">
<p>Right region</p>
</div>
<div id="center_region">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat.</p>
</div>
<div id="bottom_region">
<p>Bottom region</p>
</div>
</body>
</html>
Figure 22. Code for fixed layout with whitespace and correct sidebar heights
You can try it. W00f!
Layout in CSS can get very complex. When you try laying out your own pages for real, you quickly find that CSS does things you don’t expect.
For example, the vertical margins between two elements will be collapsed, unless you are floating an element, and then the margin of the inner margin gets applied to the outer one, if it is larger, unless there’s padding as well, in which case it doesn’t, unless there’s a full moon, except if Frau Balckenfeld takes the number 17 bus in Berlin to visit her sister.
OK, I made up the last two things, but the others are true. The point is, it will drive you crazy trying to get a layout right. You’ll end up pulling out your own fur in frustration.
Over the years, I’ve found a good solution: give up. I no longer try to create layouts for real sites from scratch. Instead, I use a layout that someone else has created. There are many experts in CSS layout, who make their living doing just that. Some make their layouts freely available.
When I create a new site, I copy a layout, and adapt it to my needs. Of course, I only use layouts that the author has said I can use.
Here are two good sources for layouts. The first one is DynamicDrive. Here are some of their layouts:

Figure 23. DynamicDrive layouts
The layouts are bare-bones. They don’t have graphics, or anything else, just regions laid out in various ways. Choose the one you want, download it, and customize it.
Another good site is Open Source Web Design. Here are some of their offerings:

Figure 24. OSWD designs
OSWD has complete designs. They include graphics, font settings, etc., as well as layouts.
One of the OSWD designs might look familiar. Hmmm… Where have I seen that before?
Before I start using a layout or design, I open it up and look at the CSS. I want to see CSS that is simple, and that I can understand. Then I’ll be able to change it to do what I want. The design I adapted for CoreDogs – from nodethirtythree design – met those criteria.
I highly recommend that you use an existing layout or design. It will save you much anguish.
By the way, you can copy any of the layouts on this page for you own projects. Use them as much as you want.
You learned how to lay out a Web page.
We’ve looked at two of the three parts of a sites framework: information architecture, and layout. Now it’s time for the last piece: look and feel.
You’re creating a framework for a Web site. There are three aspects to it. We’ve already talked about information architecture and page layout. Now we’ll talk about look and feel.
Look and feel is about creating a site that is both usable and aesthetically pleasing.
Usability is about task performance. The easier it is to use a site for a task, the more usable the site is.
Aesthetics is the emotional appeal of a site. Some sites are beautiful. Some are ugly.
There are three parts to look and feel:
Let’s talk about each one. We’ll look at usability and aesthetics for each of them.
Let’s see where we are. You’re building a static Web site. You’ve made a framework for the site.
You have an information architecture. You know what the sections of your site will be, and what pages are in those sections.
(img)
You have a layout. You know how pages will be put together.
(img)
You have made some choices about typography. You know what typefaces you’ll use, how large headings will be, and so on.
(img)
You’ve chosen some colors. They invoke the mood you want.
(img)
You’ve made some graphics. You’ve got some photos, images for buttons, and so on.
(img)
That’s a lot of stuff! And it will make the rest of your work easier.
Now it’s time to use these pieces to make a site. There are three steps.
First, you need to decide on a file layout. It’s a directory tree of the site on the Web server.
Second, you create a template. It’s a file that is a skeleton for an HTML page.
Third, you use the template. You copy it, and fill in the content for a page. Copy the template, make another page. Copy the template, make another page. Until the site is done.
Oh, I forget a step. Make time to savor your achievement. Maybe it’s a cookie and some extra frisbee time. Maybe it’s par-tee, par-tee! Whatever suits you.
Onward! To glory!
You’ve created a design. Layout, look and feel, and so on. The first step to implementing the design is to create some directories that your files will live in.
By the end of this lesson, you should:
Let’s review some basic concepts we covered earlier.
A Web server is a computer running a normal operating system (OS) like Linux, Windows, or Mac OS. All of these OSs organize files into directories, subdirectories, subsubdirectories, and so on.
One directory is the root of your Web site. For example, on a Unix machine, your site might be in the directory:
/users/j/jones/public_html
On a Windows PC, your site might be in:
C:\xampp\htdocs
These are the root directories of your site. They are often called Web root to distinguish them from the OS’s file system root. C:\xampp\htdocs is a Web root. C:\ is a file system root.
URLs map into this structure. For example, suppose there’s a Linux server running Apache. It has a table, telling it which URLs map into which directories. Like this:
| URL | Web root |
|---|---|
@plurbtakinot.org@ |
@/users/j/jones/public_html@ |
@jumpforjackson.com@ |
@/users/b/bartillit/public_html@ |
@hogariffic.com@ |
@/users/x/xyralog/public_html@ |
Figure 1. Mapping URLs to file paths.
It actually works a little differently, but this is good enough for our purposes.
Suppose a browser requests this URL from Apache:
http://hogariffic.com/products/extras/poking-sticks.html
Apache will ask the OS for the file:
/users/x/xyralog/public_html/products/extras/poking-sticks.html
Apache will send this file back to the browser.
A site directory tree is the entire directory tree that is under the site root.
We’re trying to make a site that is easy to maintain. That means two things:
Someone has to be able to find your files so they can maintain them. That person could be your future self. I guarantee that eventually you will forget where you put things. You’ll have to find them all over again.
Put your files where a Weber would expect them to be, to make them easier to find.
The most obvious way to organize files is the make the directories match the sections of your site.
Let’s use the dog nutrition site again, as an example. Imagine that you’re hired to create the site.
The site has the sections like Basics, Articles, Products, and Blog. The nav bar reflects this:

Figure 2. Nav bar
The blogs section has the current blog, and an archive. The products are grouped into food, treats, supplements, and other.
You might start with this directory tree:

Figure 3. Initial site directory tree
Notice that all of the directory names are lowercase only. File names are case-sensitive in Unix. So the directory DogDir is not the same as the directory dogdir.
This can be a problem when creating links. Suppose you called a directory DogDir and put the file kennel.html in it. Then you linked to this page:
<p>See our <a href="dogDir/kennel.html">best kennel</a>.</p>
Users who click on the link would get a 404 (file not found) error. There is no such file as dogDir/kennel.html. It’s called DogDir/kennel.html.
For simplicity, make all file names lowercase.
You can separate words in file names. Do not use spaces for this. I suggest using dashes (-), like best-kennel-ever.html. You can use underscores (_) as well, like best_kennel_ever.html. Google prefers dashes, though. So use dashes to make your site as Googly as possible.
Each directory would have an index.html file. This will be the “home page” for that section of the site.

Figure 4. Section home pages
Why add all of these index.html files?
Site users sometimes edit URLs in their browser’s address bar. I do this all the time. Say I’m reading about an interesting food supplement at this page:
FIGURE
Figure 5. URL of a page about a food supplement
I might want to look at other supplements. I edit the URL, deleting the page name:
FIGURE
Figure 6. Editing the URL
I’m hoping that this will give me a list of products. It might, but only if the file http://dognutrition.bz/products/supplements/index.html exists.
When I’m designing a site, I add an index.html to all of the content directories. You should do the same on your sites.
“Reuse” means having only one copy of a file. For example, to make the nav bar in Figure 2, you need some images for the buttons. For example, you might have a file called home.png for the Home button.
The nav bar is going to be on every page in the site. You could have a copy of home.png for every page. So if the site has 50 pages, you would have 50 copies of home.png.
It’s better to have just one copy of the fie, that all pages use.
Why?
Well, it would obviously save disk space. But disk space is cheap. There is a more important reason. Disk space is cheap, but Weber time is not.
Suppose you wanted to change the look and feel of the site, moving to a color scheme based on tints and shades of blue. That means changing home.png to the new color scheme.
If there were 50 copies of home.png, you would need to find every one, and replace it with the new file. That takes time. And it would be easy to make mistakes.
But if there was just one copy of home.png that every page used, you would replace that one file, and every page would be changed. W00f!
The way you set up your site today will affect how productive you can be in the future. Part of the Weber’s job is to create sites that are cheap to maintain.
You can put shared files into library directories.

Figure 5. Library directories
The directory /library is for files shared across the entire site. Examples would be CSS files, JavaScript files, and images.
Some files are shared only within sections of a site. Suppose the pages in the products section had an image with “Add to shopping cart.” The image add-to-cart.png would only be used on product pages. It might be put in the directory /products/library.
Time to create your site directory tree. Open up your development site, and – as Nike says – just do it!
In this lesson, you learned:
Now you have places to put your files. Time to make a template for your Web pages. The template will use the directory tree.
(Summary of place in flow.)
By the end of this lesson/page, you should:
(Preview of next topic.)
[ learningexercise:? ]
Remove spaces from above.
| Symbol | Value |
| ... | ... |
| ... | ... |

Figure ?. Legend
New syntax to test:
program code ...
Figure .