Web Standards
These apply in every web-development course I teach - WEB115, WEB215, WEB250, and ITIS3135 - and to the web work you do in ITSC1110, which builds pages without being one. They are the letter of the law: each one is checkable, and the checker actually checks each one. Course Standards covers how you work, as opposed to what you build.
Why These Standards Exist
Everything below this is the letter of the law - every rule checkable, and checked. These are the spirit: the developer you become by following them, which no script can measure.
- Write code another developer can read without asking you questions.
- Semantic first - avoid spans, divs, classes, and ids where a real element will do, and defend the ones you keep with a comment.
- One site, one look. Pages that belong together should feel like it.
- Validate as you build, not after you're done. Both validators, every page, all green.
- Design with the CRAP principles: Contrast, Repetition, Alignment, and Proximity.
- Name things - files, images, folders - so their names answer the question.
- Test, test, test: readability, other browsers, other devices, and someone who didn't build it. Your grandma counts.
- When one of these and a rule below seem to disagree, the rule wins - and tell me, because one of them needs fixing.
A Script Checks Them, Not Me
Every page on this site loads the Vicunadator - the llama in the corner. Right side up means every rule passed; upside down means something failed, and clicking it tells you exactly what. The same script runs on your pages, so you can see your grade forming before you submit.
Add it to any page you build, and link this copy rather than saving your own, because a copy goes stale the moment a standard changes:
<script src="https://divonbriesen.github.io/teaching/tools/standards-check.js" defer></script>
The Rules Come in Three Layers
The checker reports them in this order, and it's worth understanding why a rule applies before you argue with it.
-
General rules apply to every page, in every course,
always. Semantic structure, a favicon that resolves, stylesheets in
styles/withdefault.cssfirst, scripts in a folder rather than loose, at least two fonts, no banned fonts, link colors you chose yourself, images inimages/with names that say what they're, dividers spaced, and hrefs with no stray whitespace. -
Site rules depend on what kind of site the page
belongs to - a course site, a hobby site, a design firm, a mascot
company. The checker works this out from the folder the page is in,
so a page inside
web115/is held to course-site rules without you telling it anything. - Page rules are specific to the assignment: what an introduction page must contain, what the pictures page must show, which links the navigation needs by which module.
The authoritative list isn't this page - it's standards/rules.json, which is what the checker actually reads. If this page and the checker disagree, the checker is right, and tell me so I can fix the prose.
The Rules People Miss
- Relative links inside your own site. An absolute URL pointing back into your own webspace is a failure, because your CLT and GitHub copies must both work. The exception is the footer's home and site links, which are absolute so they always point to one home, whichever copy the reader is on.
-
Explain the non-semantic bits. Prefer a real element
to a
divorspan, and defend every class, id, and inline style you keep with a comment saying why it exists. The checker counts them and asks. - Every page needs a real image. The favicon doesn't count, no matter how you include it.
-
Spacing around dividers. A
|or•or~gets a space on each side, everywhere on the page, including in your title. - Validate while you build. Both validators, every page, all green - not a cleanup pass the night before it's due.
Rules the Checker Can't Test
The Vicunadator catches structure. These four it can't see, and they cost people points every term.
- Don't underline anything that isn't a link. Underlines mean "link" to a reader, on your page and in a forum post alike. Links themselves don't have to carry one.
- Resize images in an image editor, not in HTML. Give the real dimensions in your markup so the page validates and reserves the right space, but don't ship a 4000px photo and shrink it with an attribute, and never distort the aspect ratio.
- Most images on the web aren't yours to use. Work from the public domain or a Creative Commons license, and credit the source when the license asks you to.
-
It has to work on a phone. The checker now tests
the two mechanical prerequisites - a viewport meta tag carrying
width=device-width, and at least one media query in your stylesheet - but passing those only means you set up the possibility of a responsive layout. Whether it actually holds up needs your eyes: open your own page on your own phone before you submit it. Put your media queries at the end of the stylesheet. - Keep files where they belong. Work for a class goes in that class's folder, not three subfolders down. Decide where something lives and have a reason.
Course Site Standards
Everything in this section applies to your course site - the one whose name is your name, your adjective-animal mascot, a divider, and the course ID. It doesn't apply to the other sites you will build along the way: client projects, personal portfolios, hobby sites, design firms, mascot companies. Those are different kinds of site with their own rules.
The llama sorts this out automatically. The Vicunadator works out what kind of site a page belongs to from where it lives, and applies that site's rules - so a hobby page gets hobby rules, a design firm page gets design firm rules, and your course site gets everything below. The standards for those other site types also live inside the assignments that create them, which is where you should look when building one.
Before the Course Site: Your Root Site
Your webspace root has an index.html that isn't
course work. It introduces you and points onward. From there, an
obvious relative link leads to the course, labelled with the course ID
in capitals and no spaces - "Click to go to WEB250" - and it points at
the course folder, named for the course ID in lowercase, not
at a particular page inside it.
- Root page:
index.html, no class content on it - Link text has the course ID in caps: WEB250, ITIS3135
- Link target is the folder:
web250/, not a page - The link is relative, never absolute
The Footer, in Order
Every page's footer has a nav with these seven links, as absolute URLs, because they point to fixed homes whichever copy of your site a reader is on:
- Your webspace
- Your GitHub.com account
- Your GitHub.io root page
- Your GitHub.io page for this course
- freeCodeCamp public profile, showing your timeline
- Codecademy public profile, showing completed lessons
- LinkedIn profile
Plus a "Designed by" credit naming your company and linking to it, an HTML validation link, and a CSS validation link.
The Three Pages Every Course Site Starts With
-
Home (
index.html) - a welcome, navigation onward, a brief description of the site, and a link to your introduction. - Introduction - your full name as the h2, a professional image in a figure with a caption, your personal, professional and academic background, your current courses as a sublist, and something memorable about you. Full requirements: Introduction Webpage Standards.
- Contract - the course contract, a link back to your introduction, a digital signature with the date, and the academic integrity pledge.
Your Brand, and Where It Has to Show Up
Your site has a brand identity, and every page shows some of it. That means all six of these, picked by you and used consistently:
- Organization or company name
- Logo
- Color palette
- Typography
- Visual theme
- Tagline or slogan
Consistency is what counts. Headers, footers, navigation, colors, and type should make any two pages of your site look like they belong to each other, and anything you customize should suit the theme - a candy-shop site says "Good Morning, Sweeties", not "Good Morning".
Requirements Specific to Your Course Site
These rules apply to your ITIS3135 course site on top of the site-wide rules. Where the two overlap, both apply.
- The course site meets every rule on the Web Standards page.
-
Site name = your name (possessive) + your adjective-animal mascot,
followed by a divider of your choosing, followed by the course ID
(all caps, no spaces).
Example:- Jane Doe's Jazzy Dolphin | ITIS3135
- Footer includes a designer credit such as "Site Designed by", "Created by", "A Product of", or "Brought to You by", followed by your design firm, linked to your design firm page.
- Footer includes a "Certified in ..." line with your earned certificates (e.g. freeCodeCamp Responsive Web Design), linked.
- The intentionally bad assignment pages (e.g., the CRAP page) go in a stuff/ folder. Pages inside stuff/ are exempt from these standards - they're supposed to be bad - but the rest of the site isn't excused for linking to them.
Introduction Webpage Standards
Every course except CIS110 eventually migrates the "Shared
Introduction" you write in the course's Google Doc onto its own page
on your course site - introduction.html. WEB115, WEB215,
WEB250, and ITIS3135 build the full version, links line included;
ITSC1110 builds it without the links line, since it isn't a
web-development course. This is checked automatically, the same way
the rest of your course site is.
A finished introduction webpage should look exactly like your entry in the shared Doc - the differences are only in the underlying code: a real
<figure>/<figcaption>for the photo and caption, a real<blockquote>for the quote, and CSS handling spacing instead of blank lines. The one real difference: leave out the horizontal-rule separators and the Doc's Table-of-Contents-linked heading - both exist only to organize the shared document, and a page with one entry needs neither.
-
Your full name is the page's one
h2, in Last Name, First Name Middle Initial. format, left-aligned like normal text - not centered, and not a link. -
A public-acknowledgment sentence right after the heading, same
content as the Doc: state that this is a public page, then sign it
with your initials and the date after a dash or tilde
(
- JAD 5/18/26). -
A centered display-name line:
First M. "Nickname" Last ~ Adjective Animal. -
Your photo in a real
<figure>, centered, with a centered, italicized<figcaption>beneath it. - A personal statement of at least three complete sentences, left-aligned like normal text.
-
A bulleted list with these seven bold labels, each followed by its
content: Personal Background,
Professional Background,
Academic Background,
Primary Work Computer (type, OS, and version),
Primary Work Location,
Alternate Computer & Location, and
Courses I'm Taking, & Why - itself a nested
list, each item formatted
CODE101 - Course Name: reason for taking it. -
A favorite quote in a real
<blockquote>, centered, with attribution starting with a dash or tilde. Don't type the word "Quote" as a label before it. - Web-development courses only (WEB115, WEB215, WEB250, ITIS3135): a centered links line with dividers, carrying CLT Web, GitHub.io, GitHub, freeCodeCamp, Codecademy, and LinkedIn - CPCC students in the WEB courses skip CLT Web and include the other five. ITSC1110 skips this line entirely.
The Checklist, in Full
The compressed rules above cover what trips people most. This is the complete human-readable enumeration - the prose version of what the checker reads from rules.json. When in doubt, run your page against every item here.
Standards Checklist
Use this list to validate page structure, naming, and compliance. Some rules demonstrate examples in subbullets. These rules apply to all pages you build; your course site has additional requirements.
-
Site
- All images are in an images folder, with clear names that say what they're (sunset_beach.jpg, not img7.jpg or DSC0042.jpg).
- Every page has at least one image - the favicon doesn't count, no matter how it's included.
- Linked stylesheets (other than font services like Google Fonts) go in a styles folder, and the site's stylesheet is called default.css - if there are several, default.css must be first. A single page using only embedded styles needs neither the folder nor the file.
- All scripts are in a scripts folder.
- Any unused files sit in a folder called z_archives
- re-usable code is in a components folder
- Absolute URLs are for any site that's not part of the site you are linking from.
- Relative URLs are for any page that's part of the same site you are linking from. Standard navbars should all be relative. An absolute URL that points back into your own webspace (links, images, stylesheets, or scripts) is a failure - make it relative. Exception: footer site links. Your CLT and GitHub copies are identical files, so the footer's home/site links (CLT Web, GitHub, etc.) must be absolute - they point at a fixed home no matter which copy the reader is on.
- Relative links should NOT open in new windows/tabs - unless they point into another directory (a separate site or subproject).
- An href contains only the link itself - no spaces before or after it (stray spaces make hover and underlines look wrong).
- Any divider - like | or • or ~ - has a space between itself and the things it separates, everywhere on the page.
-
File name is meaningful, has no capital letters or spaces, and is
consistent with other pages in site (if applicable).
Examples:- introduction.html
- course_contract.html
- crap_website_evaluations.html
-
Title combines the h1 (name of site) with the h2 (name of page)
with a divider between. Close/clear page-name variants are fine - Home vs. Welcome, About vs. About Us.
Examples:- Billy Jean's Emporium | Contact
- Wilber Jackson's Wild Jackal | ABC123 | Course Contract
- Foggy Bottom Enterprises ~ Welcome
- There's a legible favicon that matches the site name and/or theme, when viewed on the browser tab. The favicon file goes in the images folder, unless it's embedded (a data URI).
-
Page Validation with the script from Accumulus (cloud)
<script src="https://lint.page/kit/4d0fe3.js" crossorigin="anonymous"></script>- Script is last line within head element
- Every page also has the Vicunadator script before the end of body - both validators, on every page, while you code.
- Cloud appears on web page all green
- Manual check of cloud -> WCAG shows no warning/errors
-
General Page Layout/Structure
- Page has header/main/footer in body.
- Header and footer match across entire site, to the pixel
-
Header
- Starts with one h1 containing the site name only (an image before the h1 is fine)
- Includes navbar with site navigation
- Two or more similar/related links belong in a nav element.
- Any navigation leading outside of site is a secondary navbar
- Ok to put navbar between header and main if it's standalone and not part of header (i.e off to side)
-
Main
- Starts with one h2 containing the page name - an image before the h2 is fine. (SPA-style pages may have multiple h2s, one per page name.)
- If appropriate, includes subsections with h3 as section titles
- If further divisions are needed, use article elements with h4 as article titles
-
Footer
- A site tagline in italics or quotes (but not both) appears in the header or the footer.
- Footer goes from widest to narrowest to avoid xmas tree effect.
-
Styles
- Don't use white or black without good reason - explain the reason in a CSS comment.
- Use at least 2 fonts (check google fonts) and avoid using complex/serif fonts for small text
- override default link colors and styles - no blue, purple, green, or red links, and visited links stay the same color as unvisited ones
- Use a color palette that's cohesive and not jarring (check coolors)
- Don't align paragraphs, unless you intend for them to be one line (it's ok to for small devices), but not for normal screens.
- Test, test, test - readability, different browsers and devices, and someone who didn't build it (your grandma counts).
-
Comments & Justifications - each of these, when present, needs
a comment explaining why it's necessary. One comment on the first
of a same-reason group is sufficient.
- divs and spans
- classes and ids
- inline styles
-
Apply CRAP Design Principles
- Contrast: Text and important elements have sufficient contrast with background and other elements.
- Repetition: Design elements (colors, fonts, spacing, etc.) are used consistently across the site to create a cohesive look.
- Alignment: Elements are aligned in a way that creates a clear visual connection between them, improving readability and organization.
- Proximity: Related items are grouped together, while unrelated items are spaced apart to create a clear structure and hierarchy.
-
DO NOT
- DO NOT use divs or spans when a more semantic element is available. For example, use header for the page header, nav for navigation, main for the main content area, and footer for the page footer. The litmus test should be - "Is there a more specific element that could be used here instead of a div or span?" If the answer is yes, use that element instead of a div or span. If not, make the div or span meaningful by adding appropriate classes or attributes, but be ready to justify why you're using a div or span instead of a more semantic element.
- DO NOT use inline styles instead of CSS classes for styling unless there are only two or less instances of said styling. This logic is similar to that of avoiding divs and spans - if there's a more efficient way to apply the styling across multiple elements, use that instead of inline styles.
- DO NOT add classes you aren't using. Avoid things like main class = "main".
- DO NOT use code that serves little purpose, or that you just pulled from an example or AI without need.
- DO NOT use more than one h1 and one h2 on any page with the h1 as the site name and the h2 as the page name. The exception is a multipage site (aka SPA Single Page Application) where you might use a section to deliniate each page and then use an h2 for the page name within each section.
- DO NOT overcomplicate your CSS and HTML; you can build a nice page with only about 10 lines of CSS, and no classes or divs or spans or ids whatsoever. Start out with that, and begin to add those other items as NECESSARY to achieve the design you want. If you find yourself adding a lot of code, stop and ask if there is a more efficient way to achieve the same result.
- DO NOT use black or white, or Times New Roman, or Comics Sans or Papyrus. Doing any of these shows ignorance, or laziness, or both.
- DO NOT use colors that clash or are too similar to each other. If you aren't sure about your color choices, use a tool like Coolors to generate a palette for you, and then adjust as needed.
- DO NOT center paragraphs. Centering is generally hard to read and should be reserved for very specific use cases, such as a short tagline or a call to action. For normal paragraphs of text, left-aligning is usually the best choice for readability. If you want to center text on smaller screens, you can use media queries to apply center alignment only on those devices, but be cautious about using it too much as it can still affect readability.
- DO NOT center bullets. Centering bullets can make them harder to read and can disrupt the visual flow of the content. It's generally best to left-align bullet points to maintain readability and a clean layout. If you want to create a more visually interesting design, consider using other styling techniques such as indentation, custom bullet icons, or spacing, rather than centering the bullets themselves.