[MUSIC PLAYING]
DOUG LLOYD: So let's take one more video to talk about one more language. This time
we'll talk about CSS. So CSS, which is short for Cascading Style Sheets, is another
language we use when constructing websites. Think about it like this. If HTML is
what we use to organize the content we want to put on our page, CSS is the tool
that we generally use to customize how our websites look, and how the user
experience really is, interacting with our website.
Similar to HTML, CSS is not a programming language. It doesn't have logic. It
doesn't have variables. It doesn't have any sort of that flow related things that C
does. It's a styling language. And its syntax is pretty simple, and just describes
how the elements of our page have certain HTML elements should be modified. To that
end, if you haven't yet watched our video on HTML, or are unfamiliar with HTML
generally, you may want to take a look at that first, because this discussion of
CSS is going to depend on some knowledge of HTML.
So here's a really simple CSS stylesheet. Even if you've never programmed with CSS
before, I'm pretty sure you can figure out exactly what this stylesheet does. What
does it do? Well, applied to the body of our web page, everything between body tags
on our HTML, and it sets the background color of that page to blue. Well, it's a
very simple stylesheet. It's actually very human friendly language, CSS. So even if
you've never used it before, you probably could guess what that did. In fact, if we
loaded a page, where this stylesheet was embedded somehow, the background color of
our page would be blue, and not the standard white.
So how do we build stylesheets? Well first, we have to identify a selector. In the
last example, that selector was body. Then we have an open curly brace, and we're
going to begin defining the stylesheet for that selector. In between the curly
braces, we just have a list of key value pairs. The previous value pair was
background color blue semicolon, but we could do more and more of these. You could
have multiple things applying to that tag, that selector body. Each one of them is
separated by a semicolon, and we call each one of them a declaration, a CSS
declaration. When we're done with all the styling we want to apply to that
particular tag, we just have a closing curly brace to end the stylesheet, and we're
done defining the stylesheet for that particular selector.
What are some common CSS properties? Well, maybe you want to put a border around
something. So you can say, border, that would be your key, and then your values
would be, what style, color, and width you want it to be. So the style could be a
solid line, a dotted line, a dashed line, a ridge line, which would be wavy line.
Maybe you want to have it be blue or black or green. Maybe you want it to be 1 or 2
or 10 pixels wide. You can specify all of those things. Maybe you want to set the
background color of your page in a particular way. We already saw that, setting the
background of the body to be blue.
Then you can use a key word, so CSS has certain colors that are built into it,
blue, green, black, a very simple colors we know. But you can also specify any hex
color that you'd like. Recall that colors can be identified by a set of three hex
numbers from 0 to 255, rg and b, the red, green, and blue component. And so we can
specify any color we want by, instead of using blue or green or black, using pound
and then six digits of hex, and that would give us the six digit color. So that's
the background color.
We also have the foreground color, which is usually going to be the text of your
page. And you could similarly do that with key word and or six digit hex. So you
can specify any color you want for the text of your page against a particular
background color, up above. You can also change and deal with font, and the way
text is rendered on the page.
So you can change your font size. You can use key words, such as extra, extra
small, or xx small, or medium, large, and so on. You can use fixed points, 10
point, 12 point, and so on. You can use percentages, 80%, 20%, where 100% is the
default font size, which is usually going to be something like 11 or 12 points. Or
you can even base it off of the most recent font size. If you just wrote something
and you know what you want is for it to be smaller, but you don't know exactly what
size you want it to be, well, you can just say, font size smaller. And it will base
off of the, just up above, it's font size. And you can get smaller or larger. So
there's a lot of different ways to specify font size.
You can also specify what font family you want. If you have a particular name,
there's a way in CSS-- we're not going to talk about it here-- to define a very
specific font and embed it into your page. You can also use generic names. There's
a lot of web safe fonts that are pre-defined in CSS. And if you are a user of
Microsoft Office in the last 20 years, you're probably familiar with a lot of these
web safe fonts already, Times New Roman, Arial, Courier New, Georgia, Tahoma,
Verdana, and so on. Those are all considered web safe fonts. And actually, part of
the reason they came to be was to be used to make web-- every page had access to
this default set of fonts with various serifs, and all this font stuff we won't get
into, but these are usually accessible in your CSS, even if you don't otherwise
define the fonts. Lastly, you can align your text, instead of it being, by default,
aligned to the left, you could align it to the right, or you could align it
centered, or justified so that it hit both margins. So those are all options you
can use to change what your text looks like, and how it's displayed on your page.
Your selectors don't have to be tags only. We previously saw a body tag selector,
and tag selector does look just like that. You name a tag, and then you define a
stylesheet for that tag. But you can also do something called an ID selector. An ID
selector looks pretty similar. But notice, that now I'm not using an HTML tag, I'm
using, in this case, #unique, or hash unique. If you recall from our video on HTML,
we talked about how tags can have attributes.
And one attribute that applies to pretty much all HTML tags, but we didn't talk
about it, is something called an ID tag. So this particular CSS would apply only to
HTML tag that has a very specific ID, that you've named. So if you have somewhere
in your code, somewhere in your HTML file, a tag and you specify as an attribute to
that tag, ID equals unique, this particular stylesheet here will only apply in
between that tag with the ID of unique.
You can also do something called a class selector. So in addition to having ID
attributes, you can also add a class attribute to HTML tags. And when you use a
class attribute, it can be applied to multiple tags. So if you have several things
that are similar, maybe you want to say, open tag blah, blah, blah, blah, class
equals students. And then this particular stylesheet would apply to every tag whose
class is students. In this case, we'd set the background color to yellow, and we'd
set opacity, which is a tag we didn't talk about, but just deals with how
transparent something is, to 70%, in this case.
There's two options for writing stylesheets. You can write them directly into your
HTML by placing the stylesheets in between style tags. And those style tags go
inside of the head tags of your web page. The perhaps more preferred way to do it
is to write a separate .css file, and then link it into your document using link
tags. Link tags, again, are different from hyperlinks, if you recall from our video
an HTML. And link tags are how we pull in separate files. It sort of like the
equivalent of the #include for web programming.
So let's take a look at table.HTML. If you recall from our HTML video, I showed an
example of a very simple multiplication table that looked pretty ugly, and maybe
there's a way to make it better with CSS, to make it actually look more like a
multiplication table, or something that isn't just stuck together with no actual
division between the rows and the columns. So let's head over to CS50 IDE, and take
a look at how CSS can, sort of, tweak what we started with before, and make it
something a lot better.
So we're in CS50 IDE now, and if unfamiliar, we'll pull up in this table that HTML
page. Table.HTML basically just defines the contents of a multiple-- it was
supposed to be a four by four multiplication table. It's pretty straightforward.
And we would think that it would look pretty well organized. But in fact, when we
preview this page, we see that it's kind of ugly, right? Clearly we have rows and
columns here. There some sort of separation. But it's not a meaningful separation.
We're not actually getting too much information here. And there's no separation
between the rows and columns in terms of horizontal or vertical rules. We could
probably make this look a little bit better. So let's try. So I'm going to close
this tab up here. And I'm going to close my table.HTML, and I have another version
here called table2.HTML. We'll open that up. The body of the page is pretty much
the same, but I've changed a little bit at the top. And I'll scroll up here. Notice
that this time, I'm using embedded style tags. I've opened a style tag, and I'm now
defining a CSS stylesheet just inside of it. I have a stylesheet that says, table.
That's my tag selector. I'm not using dot or hash, which I would be doing if I was
using an ID or a class selector. I have a tag selector here-- table. This style is
going to apply to every table tag. Apparently I want to put a one pixel wide, solid
blue border, inside my table. That sounds like it would probably help the
situation, right? We're going to have things look a lot better. So this is fine.
Stylistically, I've just embedded my stylesheet in here. It's certainly an
acceptable way to do it. Let's see what this looks like. So I'll go back down here,
and I'll will preview my table2.HTML. Well, that's not quite what I wanted, but it
is exactly what we asked for. We said that this style is going to apply to our
table. Our table now has a one pixel wide, solid blue border around it. We're not
actually getting at the table cells. We're just getting at the table. So CSS
worked. It has applied a stylesheet to our table. But didn't quite do what we
wanted it to do. How do we get to do what we want it to do?
Well, let's take a look at one more version of this in table3.HTML. So I'm just
going to close these tabs. I'm going to go back over here to my file tree, and open
up table3.HTML. Again, it's going to look pretty similar here at the beginning. But
notice, this time, instead of using a stylesheet embedded right in there, I'm going
to link in a stylesheet using the link tag. So I'm apparently linking in a
stylesheet called tables.CSS, and this well equals stylesheet just means-- well,
what is this file relative to what I'm doing-- is a stylesheet that I'm using for
my page. So if I really want to see what I'm doing with the CSS here, I need to go
open that table.CSS file as well. So we'll go back over here again to our file
tree. There's table.CSS. We'll pop it open. Now we're seeing a little of the CSS.
Apparently, I have a couple of things going on here. I apparently want to put a
five pixel wide, solid red border, around my table. We already know that that's
going to just go on the perimeter. We saw that in table2.HTML. With each row, I
apparently want to specify that the row height is 50 pixels high. So for every row,
remember that's what the tr tag does, I'm making it 50 pixels high.
Lastly, I have this comment. And this is how we make comments in CSS. It's very
similar to seize block comments syntax slash star. All the text you want. There's
no slash slash though in CSS. For short inline comments, we have to use this
particular format here. It looks like I'm doing a lot of things in my td tags.
Remember td tags, or table data, which really are just the columns inside of our
rows, and apparently for each piece of data in my table, I want to set the
background color to be black, the color to be white, color is foreground color. So
this is going to be the text of my page. I want big font, 22 point font, and I want
it to be of the font family, Georgia. So I'm not going to have the default font.
I'm going to specify Georgia, which is one of those web safe fonts that we've seen
before. I want my text to be aligned centrally, in the middle of the box, I don't
want it to be left aligned or right aligned. And I want my column width to be 50
pixels wide as well. Let's take a look at what this looks like, and see if this is
maybe an improvement. So I'm going to go to table3.HTML, which recall, includes
table.CSS as a link, and we'll preview it. That's a lot better, right? This is
actually starting to look a lot more like a multiplication table. I have that red
border around my table but now I also have specified that each row is 50 pixels
wide, or it's 50 pixels tall-- excuse me-- each column is 50 pixels wide. The data
in each column, and only the data, has a black background. So that's why those
white lines are there. Because the space in between all of those cells, it's not a
border in and of itself, it's just I'm only filling in the cells, which actually
makes the borders of the table, which apparently did exist all along, it was just
thin white lines. Now they're visible. Now they pop off on the screen. And so this
is a very simple stylesheet that I've applied, and now my table looks a lot more
like a four by four multiplication table, instead of a just jumbled mess, where
everything is clearly rows and columns, but not super well organized. We're really
just scratching the surface of what you can do with CSS here. Fortunately the CSS
documentation is pretty straightforward. You'll use several of its attributes,
fairly frequently. The ones we talked about earlier in this video. There are
several that you probably won't use all. And that's fine, too. But just know, that
there's a lot of documentation out there. So even if we didn't cover everything,
you're certainly not left on your own. But CSS is really fun to experiment with.
And I would strongly encourage you to play around with your web pages, and see how
you can make them look and feel to improve the user experience of visiting your
page. I'm Doug Lloyd. This is CS50.