Today's agenda:
id
and class
attributes Reminder: Please remember to submit an aboutme.html to GradeIt
CP1 due this evening (no late days on CPs)
WPL and Office Hours
Updated HW 1 (images|spec|sample pdf)
id
and class
id
id
value per pageid
class
class
class
es<p id="product-12345" class="product">Puppy calendar</p>
<p id="product-133337" class="product">Cat mug</p>
HTML
Both paragraphs have the same class (product
), but each has its own ID
Gives you another way to talk about your content in CSS (and later in JavaScript)
#my-id {
/* ... properties ... */
}
.my-class {
/* ... other properties ... */
}
A mnemonic: .java
programs compile into .class
files so...
try to remember dot
(.) class
and hash (#) id
id
or class
?How do you decide whether to use an id
or a class
?
Probably prefer class
. You can only use an id
once per page, so it's good
to be a little stingy with them. class
es are free.
On the other hand, if you know you are making a unique section or page element (e.g.,
submit button), id
is the way to go.
It's easy to just make classes for everything, but don't forget that HTML is made to describe your content.
So, prefer a <p>
tag over a class
named paragraph
.
There are two general
content grouping tags.
<div>
-- block level<span>
-- inline level
Most likely each of these tags in your code will have a
class
or id
associated with them,
though not always.
Descriptive content groups were
introduced in HTML5.
You're less likely to need a separate class
if you use these semantic structures instead of a more general one
such as a <div>
.
<header>
<footer>
<article>
<section>
<aside>
<main>
Context selectors are used to selectively style page elements
Examples:
selector1 selector2 {
properties
}
CSS
... applies the given properties to selector2 only if it is inside a selector1 on the page
selector1 > selector2 {
properties
}
CSS
... applies the given properties to selector2
only if it is directly inside a selector1
on the page with no tags in between
<p>Shop at <strong>Hardwick's Hardware</strong>...</p>
<ul>
<li>The <strong>best</strong> prices in town!</li>
<li><em><strong>Act</strong></em> while supplies last!</li>
</ul>
HTML
li strong { text-decoration: underline; }
CSS
Produces:
Shop at Hardwick's Hardware...
output
<p>Shop at <strong>Hardwick's Hardware</strong>...</p>
<ul>
<li>The <strong>best</strong> prices in town!</li>
<li><em><strong>Act</strong></em> while supplies last!</li>
</ul>
HTML
li > strong { text-decoration: underline; }
CSS
Produces:
Shop at Hardwick's Hardware...
output
Height:
Block and inline elements normally have the height of their content
Width:
Inline elements have the width of their content
Block elements have a width that stretches across the whole page
width
and height
Example
<div class="block"></div>
HTML
.block {
height: 200px;
width: 200px;
}
CSS
output
Width : px
Height: px
Specified in px
, pt
, em
, rem
,
%
(or ex
, or even in in
, cm
,
mm
, pc
...but don't :)
Property | Description |
---|---|
margin
|
margin on all 4 sides |
margin-bottom
|
margin on bottom side only |
margin-left
|
margin on left side only |
margin-right
|
margin on right side only |
margin-top
|
margin on top side only |
Complete list of margin properties |
h4 { border: 5px solid red; }
CSS
output
Property | Description |
---|---|
border
|
thickness/style/color of border on all 4 sides |
Thickness (specified in px
, pt
, em
, or
thin
, medium
,
thick
)
Style
(none
,
hidden
,
dotted
,
dashed
,
double
,
groove
,
inset
,
outset
,
ridge
,
solid
)
Color (specified as seen previously for text and background colors)
Property | Description |
---|---|
border-color ,
border-width ,
border-style
|
specific properties of border on all 4 sides |
border-bottom ,
border-left ,
border-right ,
border-top
|
all properties of border on a particular side |
border-bottom-color ,
border-bottom-style , border-bottom-width ,
border-left-color , border-left-style ,
border-left-width , border-right-color ,
border-right-style , border-right-width ,
border-top-color , border-top-style ,
border-top-width
|
properties of border on a particular side |
Complete list of border properties |
border-radius
p {
border: 3px solid lightsalmon;
border-radius: 12px;
padding: 0.5em;
}
CSS
This is a paragraph.
This is another paragraph.
It spans multiple lines.
output
Each side's border radius can be set individually, separated by spaces
Again, prefer px
, pt
, em
, rem
,
or %
for units
Property | Description |
---|---|
padding
|
padding on all 4 sides |
padding-bottom
|
padding on bottom side only |
padding-left
|
padding on left side only |
padding-right
|
padding on right side only |
padding-top
|
padding on top side only |
Complete list of padding properties |
text-align
:
(center | left | right | justify)
vertical-align
:
(baseline | text-top | text-bottom | sub | super)
div {
text-align: right;
}
img {
vertical-align: middle;
}
CSS
<div>
<p>
This is some text!
<img src="../../images/home.png">
</p>
</div>
HTML
This is some text!
output
body {
text-align: center; /** Doesn't work! */
}
.block {
width: 100px;
height: 100px;
background-color: #affa
/* Try this instead: */
/* margin-right: auto; */
/* marign-left: auto; */
}
CSS
<body>
<div class="block">
</body>
HTML
output
Use margin-right: auto;
and margin-left: auto;
on the blue block to center.
text-align
-- apply to a parent container to align the inline content within
vertical-align
-- apply to inline items (usually those with a height, like an image)
to vertically align them relative to other inline elements nearby
margin-left: auto;
, margin-right: auto
-- use auto margins and a
width to center a block element in it's parent
A way to remove elements from the normal document element flow, usually to get other elements to "wrap" around them
The red block is a non-floating (regular) block element (a div
). It's only 100px wide, but
since it's a block element, the browser positions it on its own line (spanning the width
of the page)
<div> (white background)
<div> (red block)
<p> (text)
A buncha really long text yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo
Now the red block has the float
CSS property set to left
. This tells the browser
to give the element as much spaces as it needs, and then start bringing the next content up from below
and fill in the cracks
<div> (white background)
<div> (red block, floating left)
<p> (text)
A buncha really long text yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo yaad yo yodyo aoydoyo dyo adya dyo
position: static
position: fixed
position: absolute
position: relative
Another good explanation is here
#menubar {
position: absolute; /** fixed */
left: 450px;
top: 60px;
}
CSS
<div id="menubar">Menu stuff!</div>
HTML
Puts a menu bar on the screen 450px from the left, and 60px down from the top.
display
PropertyThe display property specifies the display behavior (the type of rendering box) of an element. The four types you most often will see are:
inline
: Displays an element as an inline element.
Any height and width properties will have no effect. block
: Displays an element as a block element. It
starts on a new line, and takes up the whole width of a page. none
: The element is completely removed. flex
: Displays an element as a block-level flex containerflexbox
A layout library built into CSS -- more on this in this week's lab
Useful for nestling block elements next to each other in rows or columns, and specifying how much space each of the elements should take up
When you set a parent to display: flex
, all items inside it
become "flex-items"
Use justify-content
on the flex container to indicate how to position the flex-items
within the container, and flex-direction
to say which shape the elements should make
(row
s or column
s)
Use flex-basis
on the items to specify how much space of the container each
thing should take up
First try box model, text-align
, vertical-align
Next try flex boxes. Powerful way to build many different layouts in a page.
Special Use Cases:
Use position: absolute|fixed|relative
only when you want complete control
over where things go
Use float
only when you want to remove an element from the flow, and wrap
text around it