HTML Css Notes
HTML Css Notes
By: supersimple.dev
Video: https://youtu.be/G3e-cpL7ofc
HTML Basics
<button>Hello</button> Creates a button with the text "Hello" inside.
<p>paragraph of text</p> Creates a paragraph of text.
General Technique: 1. Create an element in HTML 2. And then style them with CSS one by one
HTML Syntax
Syntax = rules for writing HTML code (like grammar in English).
Attributes
Attributes modify how an HTML element behaves.
CSS Basics
One way of writing CSS code is using the <style> HTML element.
<style>
button { Modifies all <button>s on the page.
background-color: red; Change background color to red.
color: white; Change text color to white.
}
</style>
CSS Syntax
CSS Properties
Here are some common CSS properties we can use:
button {
background-color: red; Sets the background color. Common values:
● Color name: red, white, black
● rgb value: rgb(0, 150, 255);
● Hex value: #0096FF
color: white; Sets the text color. Takes the same values as
background-color (color name, rgb, hex).
CSS Values
Each CSS property has a set of values that are allowed (background-color allows color values,
cursor allows solid, dotted, dashed, etc.)
Color Values
1. A color name: red, white, black
● Each character in Hex is base 16, which means it can have a value of 0, 1, 2, ... 8, 9, A, B, C,
D, E, F (16 possible values).
● Using the first 2 characters, we can have 16 * 16 = 256 possible values from 0 - 255:
00 = 0
01 = 1
...
0F = 15
10 = 16
11 = (1 * 16) + 1 = 17
...
FF = (15 * 16) + 15 = 255
● This is the same range as RGB (0 to 255), so the first 2 characters in Hex are used to
represent red, the second 2 characters represent green, and the third 2 characters
represent blue. Usually, it's easier to use a Hex to RGB calculator to convert.
Measurement Values
1. Pixels: 50px, 100px
Pixels (px) are a common unit of measurement in the digital world.
For example: a 4K screen is 3840px by 2160px.
.youtube-button {
...
}
.subscribe-button {
...
}
CSS Pseudo-Classes
.subscribe-button:hover { These styles only apply when hovering over an
... element with class="subscribe-button"
}
box-shadow: 3px 4px 0 rgba(0, 0, 0, 0.15); Creates a shadow that's 3px to the
} right, 4px to the bottom, with no blur,
and a very faint black color.
remember to use this rgba all for box-shadow to apply
Chrome DevTools
Lets us view (and modify) the HTML and CSS of a website directly in the browser.
To open the DevTools: right-click > Inspect.
CSS Box Model
● Determines how much space an element takes up.
● Determines how far away elements are from each other.
.join-button {
margin-right: 10px; Add 10px of space on the outside of the element.
margin-left: 10px;
margin-top: 10px;
margin-bottom: 10px; Normal margin pushes things away from an element.
margin-right: -20px; Negative margin pulls things towards an element like this:
● <span> is the most generic text element (it doesn't have any default styles).
.shop-link {
text-decoration: underline;
}
The HTML Structure
<!DOCTYPE html> Tells the browser to use a modern version of HTML.
<html>
<head> <head> contains everything that's not visible like the title and description
... (a.k.a. metadata) as well as links to fonts and CSS stylesheets.
</head>
<body> <body> contains everything that's visible like buttons, text, images, etc.
...
</body>
</html>
Filepaths
href="styles.css" Looks for a file called styles.css beside the HTML file.
href="fold1/styles.css" Looks for a folder called fold1 beside the HTML file, then
goes into the folder and looks for styles.css.
href="fold1/fold2/styles.css" Go into fold1, go into fold2, look for styles.css
Images
<img src="image.png"> Loads an image image.png beside the HTML file.
<img src="pics/image.png"> Loads image.png in the pics folder.
<img class="image" src="pics/image.png">
.image {
width: 300px; Resizes the image to a width of 300px. Height will also
resize to keep the image's dimensions.
height: 300px; If both width and height are set, the image may stretch.
object-fit: cover; Enlarges the image to cover the entire width * height area
without stretching or distorting.
object-fit: contain; Shrinks the image so that it's contained in the width *
height area.
object-position: left; Determines where the image is positioned in the width *
object-position: right; height area.
object-position: top;
object-position: bottom;
}
Inputs
<input type="text"> Creates a text box.
<input type="text" placeholder="Search"> Add a placeholder (a label) to the text box.
<input type="checkbox"> Creates a checkbox.
<input class="search-bar" type="text">
.search-bar {
font-size: 30px; Changes the font-size when typing into the text box.
}
.search-bar::placeholder {
font-size: 30px; Changes the font-size of the placeholder.
}
block elements such as <p> takes up the entire line
inline-block such as <img>, <textbox> ... takes only as much space as needed
CSS Display Property inline such as, e.g: This is <strong>HTML</strong> inline, here HTML is inline
element bcz it is within a line
.element {
display: block; Element will take up the entire line in its container.
display: inline-block; Element will only take up as much space as needed.
vertical-align: middle; Determines vertical alignment of inline-block elements.
display: inline; Element will appear within a line of text (a text element).
}
Use vertical-align: middle/top(whichever suits better); to align/display designs/videos in center, eg: that twitter post
excercise
<div> Element
<div> is a container. We generally put other elements (including other <div>s) inside (nesting).
<div style="
background-color: red; ● Inline style = CSS is written within a line of HTML.
color: white; ● Inline styles only affect the element with the
"> style="..." attribute (no selectors are needed).
...
</div>
CSS Grid Grid is a way that we use to create horizontal layouts, take for e.g. that youtube home
page videos 3*3 grids that covers up entire page
.grid { Here 100px and 100px below, tells that there'll be two columns each of width 100px
display: grid; Turns an element into a grid container.
grid-template-columns: 100px 100px; Sets how many columns are in the grid and
how wide the columns are.
column-gap: 20px; Sets space between the columns.
row-gap: 40px; Sets space between the rows.
}
.grid {
display: grid;
grid-template-columns: 100px 1fr; 1fr = the column will take up the remaining
amount of space in the grid container.
grid-template-columns: 1fr 1fr; The columns will take up an equal amount of the
remaining space (since they're both 1fr).
grid-template-columns: 1fr 2fr; The number in front of fr = relatively how much
space the column gets. Here, the 2nd column gets
twice the amount of space as the 1st.
.element-inside-flexbox {
width: 100px; Sets the width of the flexbox element to 100px.
flex: 1; Take up the remaining amount of space. The value 1
determines relatively how much space.
flex-direction: column;
.flexbox {
display: flex; Lays out elements vertically inside the flexbox. Also,
flex-direction: column; justify-content and align-items are reversed.
.element {
position: static; This is the default value that every element starts with.
} position: static; causes the element to display normally.
Position Fixed
.fixed { Positions the element in the browser window (sticks to the page
position: fixed; while scrolling). e.g: That youtube search bar not moving even when page is
resizing from bottom
top: 0; Places the element 0px from the top of the browser window.
bottom: 10px; 10px from the bottom of the browser window.
left: 50px; 50px from the left of the browser window.
right: 100px; 100px from the right of the browser window.
● If you set opposite directions (top/bottom or left/right),
the element will stretch.
top: -5px; Using negative pixels places the element beyond the top edge.
top: 0; Places the element 0px from the top of the page.
bottom: 10px; 10px from the bottom of the page.
left: 50px; 50px from the left of the page.
right: 100px; 100px from the right of the page.
Position Relative
.relative { The element will appear normally (as if it's position: static).
position: relative; We can then push it around with top/bottom/left/right.
top: 10px; Places the element 10px from the top of its original position
(pushes it down by 10px). Unlike margin, it won't push the rest of
the page down.
bottom: 10px; Places the element 10px from the bottom of its original position
(pushes it up by 10px).
left: 50px; Places the element 50px from the left of its original position.
right: 100px; Places the element 100px from the right of its original position.
We've seen this using that video time e.g. that is displayed on the
<div style=" thumbnail of the videos at the bottom right on youtube and remains on the
position: relative; same position on the element (a video here) and moves with the videos
width: 100px; up and down normally.Also, that e.g. of notification count on that
notification bell in header
">
<button style="
position: absolute; The position: absolute element will be placed in
top: 0; the top-right of the position: relative element.
right: 0;
">
3
In order to get that tooltip appear like we saw in that youtube header e.g.
</button> (When we hover over search button icon, search appears down written), so for
</div> that we set search-button position:relative; and that class that we have set for "
search" text to be position:absolute;.
And the hover(opacity) option
z-index
Determines which elements appear in front and behind:
● Elements with a higher z-index appear in front of elements with a lower z-index. The
default z-index is 0.
● Elements with position: static; always appear at the back. z-index has no effect.
● If the z-index is equal or both elements are position: static, the element that was
written later in the code will appear in front.
.fixed {
position: fixed; This element will appear in front of the position: absolute;
z-index: 2; element because it has a higher z-index.
}
Whenever there's a situation like we saw in that youtube header e.g. where video
.absolute { thumbnails on scrolling up covers that header(search bar), in such cases, remember
position: absolute; whenever we use absolute under relative like that so whichever element(header search
bar in this case) you want to be displayed above/front on the content/page, increase it's
z-index: 1; z-index, default when using absolute,relative is 0
}
.static { This element will appear at the back since it's position: static.
position: static;
}
Responsive Design
Responsive design = making the website look good on any screen size.
@media (max-width: 750px) { Only apply the CSS code below when screen width
.element { is between 0px - 750px.
width: 350px;
}
}
@media (min-width: 750.02px) and (max-width: 1000px) {
.element {
width: 450px; Only apply this CSS code when screen width is
} between 750px - 1000px.
}
@media (min-width: 1000.02px) { Only apply this CSS code when the screen width is
.element { over 1000px.
width: 600px;
}
}
We generally use a gap of .02px between the ranges (like above) because the browser can
support fractional screen widths like 750.50px.
Advanced CSS Selectors
With Comma
.class1, .class2 { ... } Target multiple classes at the same time.
.class1, p { ... } Target a class and all <p>s at the same time.
With Space
.class1 img { ... } Target <img>s that are inside elements with
class="class1"
.class2:hover .tooltip { ... } Target .tooltip only when hovering over elements
with class="class2".
Inheritance
A text property set on the outer element will be passed down into inner elements:
<div style="color: red;">
<p>Paragraph</p> This paragraph will have red text.
</div>
For global text styles (styles we want on the entire page), we can set them on the <body>:
body {
font-family: Roboto, Arial; All elements on the page by default will use
color: rgb(20, 20, 20); font-family: Roboto, Arial and color:
} rgb(20, 20, 20). This can be overridden.
CSS Specificity
If multiple CSS selectors change the same property on the same element (see example below),
CSS Specificity determines which selector "wins" (which style gets applied).
<body>
<p class="title"> In this example, the .title selector has the highest priority
Paragraph of text. (according to CSS Specificity) so the text will be green.
Inheritance Concept:-
</p> E.g. If we have a <div class="text"> and under this we have four more div.s like :
</body> <div class="text1">
<div class="text2">
<div class="text3">
<div class="text4">
So if we apply say font-style, color, size or any text property it will get applied to all these four too, it
only affects text properties and not padding, margin and all those properties.
CSS Specificity Rules
Here's the full set of CSS Specificity Rules (you don't need to memorise all of these).
Usually, you just need to know a few useful rules and search Google for more if needed:
1. Inline CSS has higher priority than .class selectors.
2. .class selectors have higher priority than element name selectors (p).
3. Element name selectors (p) have higher priority than inheritance (from body).
4. If 2 selectors have the same priority, the one that is written later wins.
Semantic Elements
Elements that work the same way as <div>. However, they also give the HTML meaning when
screen readers, search engines, or other devices read the website.
Here's a list of Semantic Elements. They'll be covered in more detail in the accessibility course.
Comments
Let us write code that the browser ignores. Useful for documenting how the code works.
<!-- This is a comment --> Syntax for a comment in HTML: <!-- ... -->
<p class="title">
Paragraph of text.
</p>
.tooltip {
pointer-events: none; Disables all interactions with the mouse (clicks, hovers, etc.)
white-space: nowrap; Prevents the text inside the element from wrapping to
} multiple lines.
For padding & margin instead of writing four values(top, right, bottom, left)
We can use: 1) 4px (for all four sides)
2) 4px 8px (for vertical and horizontal).
3) 7px 8px 9px 10px (for top, right, bottom, left)