===== CS 328 - Week 2 Lecture 1 - 2025-01-27 ===== ===== TODAY WE WILL: ===== * announcements * CLIENT TIER: intro to HTML * prep for next class ===== * should be working on Homework 1! * get at-least-1st-submissions in by 11:59 pm on Friday, Jan. 31 * should start reading zyBooks Chapter 1! <-- now linked from Canvas! ==== tip! ==== * tar tvf your-submitted-thing.tar.gz ...will list the contents of the g-zipped tar archive file you specify * (you can cd to a submitted directory created by ~st10/328submit and then run this on one of your submitted g-zipped tar archive files to see which files were submitted in that submission) ==== intro to HTML ==== * HTML - HyperText Markup Language * purpose: to structure content, at a higher and abstract level * in an n-tier application (that is, in an interactive application that involves a database that happens to use an n-tier software architecture) in which the client tier includes a browser providing the presentation components, * this HTML is EXECUTING on the client tier (the browser on the client tier is executing the HTML) * in this set-up, we are using HTML to STRUCTURE our client-tier CONTENT * and in CS 328, we will write so-called semantic HTML! * semantic HTML: the idea that you choose elements based on what the CONTENT is, NOT how the element LOOKS on the page given your favorite or a typical browser; * and, in CS 328, we'll focus on so-called "strict-style" HTML * basically: follows the syntax rules of XML, eXtensible Markup Language ===== * so: we said HTML stands for HyperText Markup Language; * markup language? you add additional stuff TO the content, to describe its STRUCTURE; * what stuff do you add? TAGS, that SURROUND content * in HTML, each tag is surrounded by < > angle brackets * an HTML ELEMENT consists of a start tag, the content within, and its end tag * (although -- may also call them a starting tag and an ending tag, or an opening tag and a closing tag...!) * in HTML, you write the type of the element in the start tag, and a / followed by the type of the element in the end tag <desired-element> ... </desired-element> ^ above is an element! * ...and the content is what is in between the start and end tags * in strict-style HTML: * write the type of element in all-lowercase * if an element can (is ABLE to have) content, you are required to put a start AND an end tag (wait, there are some types of HTML elements that are not allowed to have content? Yup - see the section on void elements, below) ===== * HTML has comments! <!-- comment goes here --> ===== * HTML start tags CAN contain attributes! attrib-name="attrib-value" IN strict-style HTML, NOTE that: * every attribute has a value! * and that value is written in quotes (I use double-quotes, but my understanding is that single-quotes are also acceptable in strict-style, and I'll accept single-quotes as class style for this also) ===== * example: * a p element represents a paragraph of content (adapted from Figure 2.2 in Stepp et al, "Web Programming Step-by-Step", 2nd edition) <p class="western"> I think www stands for wild wild west </p> ^^^^^^^^^ this p element's content ^^^^ ^^^^^^^^^^^^^^ a p element ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * <p class="western"> is this p element's start tag * </p> is this p element's end tag * this p element has one attribute, class * the value of this p element's attribute, class, is "western" ===== * another example: * a textarea element represents a text area component in a form, allowing a user to enter multiple lines of text * here is an example of a textarea element: <textarea name="ideas" rows="5" cols="20"> </textarea> * it (strictly speaking) has content: the newline character and blanks between its start tag and end tag * <textarea name="ideas" rows="5" cols="20"> is this textarea element's start tag * </textarea> is this textarea element's end tag * this textarea element has three attributes, name, rows, and cols * its name attribute's value is "ideas", * its rows attribute's value is "5", * its cols attribute's value is "20" ===== void elements ===== * there are some HTML elements that cannot EVER have content -- they are called void elements. * but -- strict-style HTML requires all elements to have a start and an end tag! How handle that? * ***using strict-style***, you write a void element so its tag serves as BOTH a start and an end tag -- <void-element /> * example: a line break element, br, represents a content-significant line break (for example, ending a line in a poem) Using strict-style, a br element is written as: <br /> * example: an image element, img, is a void element (!!) with some mandatory attributes: <img src="peter.jpg" alt="Peter Rabbit" /> * src attribute's value is an absolute URL to the desired image, or a relative URL (relative to the containing document) -- this is a required attribute for an img element! * here, the browser would request a file named peter.jpg from the same directory as the containing HTML file * alt attribute's value is alt text describing the image -- this would be used by a screen reader to describe the image that would appear here, or will be displayed instead of this image if the image cannot be successfully obtained * it is a CS 328 class style standard that ALL img elements have a non-empty alt attribute describing the image (in a quick glance at the living HTML standard, at: https://html.spec.whatwg.org/#alt it says: "Except where otherwise specified, the alt attribute must be specified and its value must not be empty; the value must be an appropriate replacement for the image." * it goes into more detail from there, if you are interested in reading more about this * aside: an advantage of strict-style HTML: consider: if you are writing code to, for example, extract the content from an HTML document, do you see how strict-style can make that much easier/less error-prone? * you can search for <blah> and </blah> with confidence, and grab everything in-between * whenever you see <blah />, your program knows there is no content to consider * want to know what void elements are in a document? ...you can search for anything that starts with < and ends with /> ===== * BASIC HTML DOCUMENT STRUCTURE * a document type definition, followed by * an html element * that *contains* a head element * *followed* by a body element * HTML is very hierarchical -- can think of it as a tree * we say the html element is this document's root element * we say that an element within another element is a child element * so we say that the html element has two children elements, a head element and a body element ===== <!DOCTYPE html> <!-- this is a document type definition, and is NOT considered an element (here, this is the document type definition for an HTML document!) --> <html> <!-- considered the ROOT element of an HTML document, and all content should be WITHIN it --> <head> <!-- contains general info ABOUT and FOR the document --> </head> <body> <!-- contains the document's content --> </body> </html> * see posted html-0.html, as well as posted 328lect02-1.html, which adds a few attributes we'll be using to allow for at-least-partial strict-style validation; ===== * it is useful to know that some of the elements that can be in the body element can be categorized as block elements or inline elements * block element - significant element in the document - can contain a large amount of content potentially spanning many lines * inline element - represents a "smaller" element in a page, USUALLY *must* be nested inside a block element ...we'll continue from here!