Crash course on writing documents for the Web


I wrote this to help people in PC Week Labs to write documents for our web server. It's designed for someone who wants to put a page on the web but could care less about most of the technical details. I hope it's helpful.

One warning: This document is in continual revision mode. You are looking at a draft version that gets changed frequently whenever I have a spare moment or two. If you see any technical inaccuracies, misspellings, or typos, please be forgiving. Thanks.


Table of Contents

  1. The Absolute Essentials

  2. What is HTML?

  3. A quick word about the HTML philosophy

  4. The Heading

  5. The Body

    1. Heading levels

    2. Paragraphs

    3. Lists

    4. Definition Lists

  6. Links

    1. URLs

    2. Putting Links in HTML documents

  7. Images

    1. Image Options

  8. Where to go from here


The Absolute Essentials

If all that you want to do is convert an existing column or story into a Web document, there's only a few things that you need to do.

  1. Convert the document to plain text.
  2. At the top of the file, type "<title>" and then type the title of the document. End the title with "</title>".
  3. At the beginning of the headline, type "<h1>" and at the end type "</h1>".
  4. If there is any deck (the secondary headline just below the main head), surround it with "<h2>" and "</h2>"
  5. If there are any subheads in the story itself, surround the text of the subhead with "<h3>" and "</h3>"
  6. In front of each paragraph (not including the headings that you have marked already), type "<p>"
  7. If there is a byline, type "<p><i>" in front of it and type "</i>" after it.
That's it, you're finished. This quick-and-dirty list glosses over numerous complications and technicalities, but at least your document will be read and displayed correctly by most browsers.

However, if you want to do anything at all fancy, such as links to other documents, graphics, bullet or number lists, or whatever, then read on. This document isn't long and you'll be able to do a lot more when you're finished working through it. Let me know if there are any confusing sections so I can improve it.


What is HTML?

The Hypertext Markup Language (or HTML) is the language used to create the documents for the World Wide Web. Although most browsers will display any document that is written in plain text, there are advantages that you get by writing documents using HTML. When HTML documents are read by applications specifically designed for the Web (usually called browsers or Web browsers) they can include formatting, graphics, and even links to other documents.

As a markup language, HTML is not so much concerned about the appearance of the documents, but about the structure of a document. Rich Text Format (RTF), on the other hand, is an example of a formatting language. The difference between them is that, in HTML, you would use commands to mark the headings, normal paragraphs, lists (and whether they are numbered or not), and even things like addresses. In RTF, you would use commands (usually the word processing program does this for you) to indicate the typeface, font size, and style of the text in a document.

Although HTML is a variant of Standard Generalized Markup Language (SGML), it differs from some other SGML variants in its simplicity. HTML is simple enough to just type in directly without using some sort of HTML editor. HTML editors are useful, especially if you have massive quantities of documents to write, but they are not necessary to get started.

One thing to remember about HTML, though, is that it is a new standard that's constantly changing. It's difficult to define HTML exactly, which is why you often see use of the word "usually" in this document. Also, browsers differ in their support of various HTML extensions and differ (usually a lot) in the way they handle many standard HTML constructs. However, by sticking to the fairly simple subset of the commands outlined in this document, you can be reasonably assured that your documents will look good in just about any Web browser.

In general, HTML commands begin with a < and end with a >. The commands are almost never case sensitive and are usually "containers" (although there are numerous exceptions to both of those generalizations). By a container, I mean that there is usually a beginning command and an ending command. The commands would thus be applied to the text in-between the beginning and ending commands. An example of a container command is the title command, which surrounds the text that is designated as the document's title with <title> and </title>.

White space, meaning anything that is not a printable character, is generally ignored in HTML. Leaving a blank line in your document will generally not create a blank line when the document is displayed in a browser.

Finally, not every element common to typical documents is included in HTML. You will occasionally have problems converting some documents. For example, the version of HTML in common use today doesn't support tables or equations. There are a few tricks you can use (which we will go into later) to get around these limitations. Both tables and equations are part of the next proposed version of HTML, but it will likely be some time before the new version of HTML is supported by most browsers.

A quick word about the HTML philosophy

Using a markup language is a lot like using styles in Word. In Word, for example, you would often have styles for the various heading levels, bullet lists, and other common elements of a document. The advantage of this is that you can change the underlying formatting easily without having to reapply the formatting throughout the document.

However, as an author of a Web-based document, you don't control the actual formatting of your document. So what's the advantage? The advantage is that, with everybody using the same "styles" so-to-speak, the World Wide Web has a certain consistency to it that is absent from many other forms of information access on the Internet. This consistency is all the more impressive when you consider that there is no one, central design authority controlling the content of the Web.

Sometimes you see documents on the Web in which authors have gone to extraordinary effort to make it look exactly the way they wanted it to. They use lots of in-line graphics (for things like bullets, horizontal rules, and even individual characters). Usually, however, the result is that those pages look terrific in one particular browser but look dreadful in others.

I suggest that you try to use the Web's built-in "style-sheet" rather than trying to devise your own. On good, configurable browsers, the users can then see documents the way they want to, not the way the author wants them to.


The Heading

Every HTML document should start by declaring itself as such. You do that with the <html> command at the very top of the document. The very last text in a document should be the ending command, </html>.

The top part of the document should also have a section for heading information which is surrounded by the <head> and </head> commands. There are several items of information that you can put in the header, but almost all of it is totally ignored by most browsers out there. One piece of information you should always have in the heading is the title. The title (as we mentioned earlier) is surrounded by the <title> and </title> commands.

The title of a document is not normally displayed as part of the page, but is often displayed in some sort of special section in most browsers (Mosaic puts the title in a Document Title box just under it's menu, for example). However, the title is also used by most browsers when saving the user's "hotlist," so it should be both descriptive and short enough to fit comfortably on one line.

Finally, the "body" of the document should also be marked off with the <body> and </body> commands. This is the part of the document that is normally displayed as the page in most browsers.

This is what a typical document would look like so far:


<html>

<head>

<title>This is my title</title>

</head>

<body>







</body>

</html>



(Remember that white space doesn't matter, so this stuff could all be on one line if you wanted. It makes no difference.)


The Body

Heading levels

HTML is easiest to use with documents with a fairly rigid structure -- ones with a definite outline of headings, subheadings, sub-sub-headings, and lists. It is not required, but it is good practice to write your document so that the heading "levels" used reflect the organization of your document. For example, the first heading should be a "level 1" heading (I'll show you how to do this soon), subheadings should be "level 2," and so on.

Most browsers recognize at least four heading levels. There is support in HTML for more than that, but what I mean by "recognize" is that the browser gives up to four levels of headings a distinct style. After the fourth level, it gets difficult to tell the heading levels apart. If you get much beyond that, you should consider breaking up your document into multiple pages.

The heading commands look like <hX> and </hX>, where X is the heading level. In most documents on the Web, the first heading is a duplicate of the document's title. Our typical document would look like this after we added the first heading:


<html>

<head>

<title>This is my title</title>

</head>

<body>



<h1>This is my title</h1>





</body>

</html>



Paragraphs

Normal paragraphs are separated with the <p> command. This is one of those exceptional commands that is not a container, although it can be. The next proposed version of HTML makes this a container, so that paragraphs begin with a <p> and end with a </p>. However, very few documents actually use the <p> command this way, so it's up to you if you want to use it.

Our sample document would look like this after we added a paragraph or two and a subheading:


<html>

<head>

<title>This is my title</title>

</head>

<body>



<h1>This is my title</h1>



This is a sample paragraph. The majority of most documents contain

this type of construct. <p>



<h2>This is a subheading</h>



The quick brown fox jumped over the slow lazy dogs.

The quick brown fox jumped over the slow lazy dogs.<p>



The quick brown fox jumped over the slow lazy dogs.

The quick brown fox jumped over the slow lazy dogs.<p>



</body>

</html>



I put the paragraph marks after each paragraph in this example, but they can just as easily go in front of each paragraph. The <p> is just a separator.

Lists

There are three kinds of lists in HTML: ordered, unordered, and a special kind called a definition list. The ordered lists are numbered. Unordered ones typically just use bullets to mark each item.

In ordered lists the browsers take care of inserting the actual numbers. This behavior is convenient for authors because if you insert or delete items in a sorted list, you don't have to worry about renumbering everything. An ordered list begins with <ol> and ends with </ol>.

Unordered lists typically use bullets to mark off each item in the list, but this is up to the browser (a DOS browser may use asterixes or dashes, for example). An unordered list begins with <ul> and ends with </ul>.

In both kinds of lists, the individual items are designated with a <li> command. This is another one of those commands that isn't typically used as a container (i.e. it doesn't have a corresponding </li> command), but it can have one if you want. The new proposed version of HTML uses it as a container, but since virtually all web documents don't use it that way, you're pretty much assured that it will always be recognized as a separator (the same goes with <p>, by the way).

Although it is not strictly legal HTML, you can nest lists to get an outline effect. All current browsers that I'm aware off recognize nested lists and it is likely to be added to the standard.

Here's our sample document with a few lists thrown in:


<html>

<head>

<title>This is my title</title>

</head>

<body>



<h1>This is my title</h1>



This is a sample paragraph. The majority of most documents contain

this type of construct. <p>



<h2>This is a subheading</h>



The quick brown fox jumped over the slow lazy dogs.

The quick brown fox jumped over the slow lazy dogs.<p>



Here's an ordered list:<p>

<ol>

  <li> first item.

  <li> second item.

  <li> notice that <p> commands are not necessary to

             separate list items.

</ol>



Here's an unordered list:<p>



<ul>

  <li> an item.

  <li> another item.

  <li> here's a nested list

    <ul>

      <li> a nested item

      <li> another nested item

    </ul>

  <li> the last item

</ul>



The quick brown fox jumped over the slow lazy dogs.

The quick brown fox jumped over the slow lazy dogs.<p>



</body>

</html>



This is what the list above would look like when rendered with your browser:

Here's an ordered list:

  1. first item.
  2. second item.
  3. notice that <p> commands are not necessary to separate list items.
Here's an unordered list:

Definition Lists

A definition list is a very flexible type of list that is more useful than its name implies. We used definition lists extensively on our own pages (including the Welcome page). It's useful for lists where a bit of explanatory text should accompany each item. Each item in the list has two parts, a term (indicated with the <dt> command) and a definition (which uses the <dd> command). The list itself is started with a <dl> command and closed with a </dl> command.

Here's a sample definition list:


<dl>

  <dt> First Term

  <dd> First term's definition.

  <dt> Second term (or title, or whatever)

  <dd> Text that explains or expands on the second term.

</dl>

And This is what it would look like in your browser:

First Term
First term's definition.
Second term (or title, or whatever)
Text that explains or expands on the second term.

Links

Links are what make Web documents unique. Unfortunately, some of what is required to create a link is slightly complicated. The most complex part of it is the URL that points to the resource you're linking to.

URLs

A URL (or Universal Resource Link or Label or something like that) is the address of a document or resource. It usually takes this form:

protocol://machine.name[:port]/directory/document.name

The protocol is the Internet protocol used to reach the document or resource. On the Web, it is typically "http", but it can be any of numerous other things (such as ftp, gopher, telnet, etc). The machine.name is just what you think it is: the name of the host where the document resides (such as www.pcweek.ziff.com/~pcweek). The ":port" portion of the address is optional and is only necessary when a resource is accessible through a non-standard TCP port number. The standard port number for HTTP is 80, for example, which is why we have to put in the port number for our web server (8001) since we don't use the standard port. This goes for other protocols, as well. If you want to reach a gopher at something than port 70 or telnet at something other than port 23, you have to put in a port number.

The directory and document.name components of the URL are self explanatory.

The easiest way to get the URL of a document is to find it using Mosaic or Cello and then copy the URL into your HTML document. In Mosaic, you would copy the text in the Document URL field near the top of Mosaic's window. In Cello, you would click on the link with your right mouse button and choose the "copy" command.

Putting Links in HTML documents

The HTML command for putting a link into a document takes this form:

<a href="URL">text of link</a>

You put the URL in the quotes following the "href=" and put the text of the link (the part that users will click or select to activate the link) after the > and before the </a>.

So, here's out document with a few links:


<html>

<head>

<title>This is my title</title>

</head>

<body>



<h1>This is my title</h1>



This is a sample paragraph. The majority of most documents contain

this type of construct. Here's a link embedded in the document right

<a href="http://www.pcweek.ziff.com/~pcweek/whats_new.html">here

</a>.<p>



<h2>This is a subheading</h>



The quick brown fox <a

href="http://www.pcweek.ziff.com/~pcweek/jumped.html>jumped</a>

over the slow lazy dogs.

The quick brown fox jumped over the slow lazy dogs.<p>



...and so on...


Images

One of the great things about the web is the ability to create and share some snazzy looking documents across platforms. However, you should restrain yourself somewhat. I've noticed in our log files for our server than many people turn off in-line images to increase performance. Even with fast network access to the Internet, some users find documents loaded down with images to be annoying.

However, a dash of colorful images can be nice. Images are also often necessary to make a point that can't be made using text only.

To add an image to your document, you need to convert it first into GIF format. There are a number of tools for doing that, so I won't get into that here, but if you can't find something or need help, see me.

To make things easier on yourself, put the images that you want to show in your document into the same directory as your document. It is possible to display a GIF images that is stored almost anywhere (even somewhere on the Internet), but I won't get into those kinds of complexities right now.

The HTML command for inserting an image at the current position takes the following form:

<IMG SRC="/name_of_image.gif">

That's all there is to it to insert a GIF file into your document. Notice that the location is given relative to the current document. The location does not have to be a full URL (but it can be if you want). This same trick can be used for normal links (not just for images). Some say it's faster to use relative URLs, but I've never really noticed a great difference in speed, but I've somehow or another got used to using relative URLs for images and full URLs for everything else. Feel free to disagree with me here.

Image Options

There is also one optional argument to the IMG command that you may want to use occasionally.

You can "suggest" to the browser that the image be aligned in a particular way with the surrounding text using the "align=" directive. The choices are "top", "middle", or "bottom", which indicate where the base of the image should be in relation to the base line of the surrounding text.

Here's a couple of examples:


<img align="top" src="./image.gif"> Some Text.

<img align="middle" src"./image.gif"> Some Text.

<img align="bottom" src"./image.gif"> Some Text.

Here's how it would look in your browser:

Some Text.

Some Text.

Some Text.

Another useful option is to suggest a text-only alternative for browsers that don't support in-line images. The "alt" directive is used like this:


<img alt="o" src="./image.gif"> Some Text.

<img alt="o" src"./image.gif"> Some Text.

<img alt="o" src"./image.gif"> Some Text.

For users on a text-only browser like W3-mode of Emacs or Lynx, these items would appear as just "o" instead of something like [IMAGE]. Some web servers make very good use of this directive to display icons for the image-oriented and simple word links (like "[Home] [Next]") for text-only browsers.


Where to go from here

This document should get you started. To learn more remember to steal, steal, steal. That is, use the built-in "view source" option built-in to most browsers to view the HTML commands that make up some of your favorite pages on the web. I'm not advocating that you out-right steal documents, but study the formatting commands that are used and try to use the same tricks in your own documents.

Also, check out our Web Tools page for more advanced docs.


EDS
Last modified: Fri Jun 17 12:54:44 1994