[MUSIC PLAYING]
DAVID MALAN: Welcome everyone to web programming with Python and JavaScript.
My name is David Malan.
BRIAN YU: I'm Brian.
DAVID MALAN: And today we're going to give you a quick overview of the course
and then dive right into the course's material.
So this is meant to be a class taken after a course like CS50, which
is the colleges and the extension schools
introduction to computer science.
But even if you haven't taken that class anything approximating
that is certainly fine.
We assume only prior programming experience in some language.
And what we'll then do is assuming you know
some of the basic constructs of most any procedural or imperative language,
we'll fill in the blanks along the way both with Python and with JavaScript.
Neither is actually assumed.
And what we'll do over the course of the next several weeks
is first dive into Git.
So you might know Git if you've used it before as a version control
software, whereby you can maintain multiple versions of your software.
But these days it's actually used for much more than that.
People will use it not only for versioning their code
and for collaborating with others, but also
for deploying their code from their local machines
to some staging server to some testing server and ultimately to production.
So it's actually become quite an integral tool
when it comes to actually deploying your code to the cloud,
so to speak these days.
Thereafter, we'll transition to HTML and CSS, with which you might already
be familiar, but we're focused on some of the more modern perhaps
some of the more advanced features of both of these languages
HTML5, specifically the latest incarnation of that,
as well as CSS and various selectors that you may or may not
have used before.
But also toolchain, something called SAS that allows you to programmatically
generate and maintain more readily, more complicated style sheets
especially as your web apps become themselves more complicated.
We'll then introduce Flask, which is going
to be a very popular framework for making web
based applications using Python.
And it's generally considered a micro framework,
which means there's not all that much complexity to it.
It doesn't try to do too much.
It really just tries to solve some very common problems so that most
of your effort when writing a web app with it
isn't focused on how do I learn Flask and how do I
build with this architecture, but rather how
do you implement your ideas without reinventing the wheel?
And so you'll get that out of a micro framework like this.
We'll then introduce a bit of SQL, or structured query language
with which you can query databases and store your actual data.
And we'll look at perhaps more complex queries
than you've seen or used in the past.
We'll talk about the idea of API, or application programming interfaces.
These can be both your own that you build for your own applications to use,
or as you may have used them already third party APIs.
Data feeds and functional behavior that you can actually access over the web
or from some other server that some other company or person has actually
made available to you to make your applications all the more
interactive or featureful.
And then we'll introduce JavaScript, which you might have used or tinkered
with before.
We'll introduce the very latest something known as ES6
or ECMAScript 6, which adds a number of features many of which,
or most of which are supported by today's browsers.
But we'll also talk about some of the pitfalls
when you try to use some of the latest and greatest features
and what it might mean to ensure as through transpiling or other techniques
that your code will indeed work on any number of mobile devices and desktops
and laptops these days.
And we'll also talk about front ends, the idea of actually building
a front end user interface using JavaScript talking about techniques
like Ajax or SPAs single page applications these days,
particularly modern paradigms with which folks are implementing today's web
applications.
Also looking at things like graphics and animation as it
can be implemented in JavaScript and inside of a browser.
And then we'll look at a heavier weight framework
something known as Django, which is similar in spirit at least at first
to something like Flask.
Just makes it easier to get going building web applications,
but comes with so many more features.
The proverbial kitchen sink.
So when you get a little tired in life of implementing
an administrative interface to your web application, or a log in interface
for your application, or any number of things that a lot of us
probably use in various tools.
You can start to lean on these larger scale frameworks that
just come with many more features.
And as such, you might have to comfort of it more to its conventions,
but you'll end up writing a lot less code than you would otherwise.
So we'll sort of graduate to that level of framework.
And then we'll talk about a world that's generally
known these days as DevOps, development and operations kind of united in one,
in the context of testing like making sure your code actually works
and how you can think about that and how you can actually do that when
writing your code.
And then CICD continuous integration and continuous development,
which is just a fancy way of saying setting yourself up
for success with the right tools and with the right scripts,
the right environments so that when you run a command on your laptop or desktop
the code actually goes somewhere and it goes not only into a code
repository to be saved and versioned and shared with other people,
but you can test it automatically and continuously so to speak.
And you can even deploy it to the cloud simply by having set up
some of those steps in advance.
So if you're already in the habit now of deploying your applications by kind
of dragging and dropping them to an FTP server or using some web interface
or copying things, all of this now can be automated in very robust ways
especially that are conducive to collaboration with others.
And then toward the end of the term we'll
talk about some higher level issues that will
inform how you go about building web applications
after the scope of the class.
Scalability.
So topics like DNS and load balancing and how
you think about anticipating that 101st user that
might not fit on just one server.
And so if you now have to have your app on two
or three or more different servers, how do you
have these servers talking to one another
and how do you share data among them?
What's going to get easy?
What's going to get hard as you scale to more and more users?
And then throughout the semester, we'll talk about topics of security.
What you want to do in terms of best practices
to avoid getting exploited in some way, but we'll also
culminate that discussion in a focus on security at the end
so that when you go out into the real world
or back into the real world after the courses lessons,
you actually are mindful of especially in the languages and tools
that we'll use throughout the semester of what
you should be particularly mindful of.
And then as punctuating the whole semester will be a number of projects.
So four assigned projects where we prescribe the specifications of some
app that we'd like you to build with the whole course's staff and support
structure.
And then one final project that will culminate this semester, whereby you'll
be invited to design and implement your own tool that's
a genuine personal or professional interest
to you that somehow draws upon the course's lessons.
And let me pause there and see before we forge ahead if there are any questions.
Anything else?
Yeah.
AUDIENCE: So HTML, CSS, JavaScript-- suppose
I don't have any experience on those things?
DAVID MALAN: Good question.
And so what then?
So if you don't have any experience in some of the alphabet soup
that we put up already like HTML and CSS,
JavaScript and/or Python, for the most part that's OK.
I would say that they'll be a bit of a more of a learning curve
early on for you.
But we will take care to provide students like you
with any number of resources supplementary
so you know where to fill in any gaps.
And we'll also introduce these topics in the class itself.
So all of the topics that we just gave an overview of we'll
introduce and dive into in the class.
It will certainly be advantageous if you've seen them before,
but each of the projects and by way of the courses sections and lectures
where you have all the material you need to succeed,
even if most of these topics are brand new.
So not to worry.
Other questions?
Yeah.
AUDIENCE: [INAUDIBLE] purchase any of the software [INAUDIBLE]??
DAVID MALAN: No need to purchase any software whatsoever.
All of the tools that we'll use, all of the libraries,
frameworks, APIs are freely available now and after the class as well.
Other questions?
No.
All right.
So first on the agenda today is version control
and Gits in particular, a tool that you'll
use not only to version your code and share your code,
but also ultimately deploy it.
So without further ado allow me to turn things over to Brian.
BRIAN YU: Thank you very much.
All right.
So the first topic that we're going to be talking about today as we approach
the world of web programming and web development
is thinking about when we're designing projects,
how do we keep track of different versions of our code?
How do we collaborate with other people?
How do we make sure that if we make a change and that change
doesn't work that we have an easy way to go back to older versions of our code
and make sure that we have access to those as well?
And so all of that falls under the larger umbrella
of what's called version control.
And out there, there are some number of different version control software
that people are using on a day to day basis, but one of the most popular
is a piece of software called Git, which is a version control
tool that we're going to be using in this class
and that people often use in industry in order to help maintain and manage
different versions of their code in order to keep track of their projects
and make sure that everything is organized
and that they're able to effectively collaborate
with other people along the way.
So we'll take a moment to step back and talk about the different things
that Git does for you at a high level.
And then we'll dive in and look at the actual commands
that you would use in order to run Git, understand how it works
and actually make use of it.
So the first thing that Git's good at doing
is keeping track of different changes to your code
so that if you're making changes, you don't only
have access to the latest version of your code,
but if you start out with a particular file
and then you make changes and add another line to it,
you remove a line to it later you can keep
track of all of those different versions of those files
such that you know the history of your project
and how it's developed from the beginning
all the way up until where you are now.
So that's one thing Git's particularly good at.
One other thing the version control is very useful for
is synchronizing code between different people.
Very often in the modern world you're not
the only person working alone on your projects independently, but rather you
and one or more other people are working together
collaboratively trying to work on a project together and making sure
that you and the people you're working with stay in sync in terms of your code
is often a challenging task.
And what Git, another version control softwares
like it do is help to make that process a little bit easier.
So you can imagine that maybe we're storing a version of your code
up in some remote server somewhere.
And Git what will allow you to do is make sure
that you and someone you're working with both have access to that same code.
And when you both make independent different changes to that code
there's an easy way via which Git can merge those changes back
together so that there's a central version that
has all of the changes to which both of you will then have access to.
So synchronizing code between different people
and making sure that everyone has access to that code base
is something that is also useful with regards to version control.
In addition, Git is also very good at letting you test your code
without losing your original copy.
So if you have a working program or a working web application
and you want to make some modifications to it in order to add a new feature
but you're worried that adding that new feature
might break some prior feature that's already existing within your web
application, Git's very good at letting you test your new changes
and experiment with your code without losing track of that original.
And only once you're happy with the original code
that you have can you then merge your new changes in with the existing
changes so that you never lose a working copy of your web application
And finally, one last thing to Git is very
good at is reverting back to old versions of your code.
So you've been working on your project, you've
made some number of modifications or edits,
and you realize that your most recent version of your program doesn't work,
you want to go back to some previous version of your code.
Git is also very good at allowing you to revert back
to old versions of your code.
And we'll see examples of all of that in just a moment.
So that's sort of the high level overview of what Git is
and how it works.
And in this course we'll also be using another service known as GitHub.
And GitHub is just a website whose purpose in life
is to store Git repositories on the internet.
It's to give you and people all around the world access
to Git repositories on the internet, such
that you can look at repositories that other people have created
and contribute to them or use them, and such
that you can work on your own projects, push them to GitHub so
that your collaborators or other people on the internet can also see and use
and work on those projects as well.
And so one of the first things you'll do in this course is go to GitHub.
And if you don't already have an account already you'll
create a free GitHub account.
And once you do, I'll show you what GitHub's interface looks like.
We'll just go to get github.com.
And so this is what github.com might look like once you log in.
And what we'll do right here is we're going
to first create a GitHub repository.
And repository is just a fancy word for the place
where we are going to keep track of all of your code and all of the changes
to your code.
Think of it as like a central storage place where
we're going to store your project.
So in the upper right of GitHub's screen we have the plus button
and we can go to the new repository.
And this takes us to the page where we can create a brand new repository.
In this case, I'm going to name the repository Lecture Zero.
And I'll go ahead and just click Create Repository.
And that creates a new repository for me that stored on GitHub.
Right now it's not on my computer yet, but we'll see in a moment
how we can take this repository which is right now empty but on the internet
and download a copy of it to our own computer.
And so that's where we start to introduce some of the command line
interface of Git and the commands that you might run in order to use it.
So after you've installed Git, one of the first commands you'll want to learn
is git clone.
And the git clone command has just one purpose.
What it does is it takes a repository stored somewhere
else like on some server like GitHub.
And what happens is that when you run git clone followed
by the URL of that GitHub repository, that remote version of your code
will be downloaded onto your computer so that you
have a copy of the repository on your own computer.
So I'll show you what that looks like now.
We'll head back over to the GitHub repository
that we just created over here.
And what you'll notice is that GitHub provides me with this URL.
This is the URL of this GitHub repository.
So if I go ahead and copy that to my clipboard
and open up a terminal window, for example, what I can do
is type git clone followed by that URL, just pasting it right in there.
When I press Return it already exists because I already created it.
So I'll go ahead and remove the old version of that.
Sorry about that.
And we'll do git clone pasting in that repository.
And it's giving me a warning.
Warning you appear to have cloned an empty repository, which
is to be expected because the repository that I just created was in fact empty.
And I can CD, CD for change directory, if you're
unfamiliar with the command line interface
into that Lecture Zero directory.
And now I'm inside of that Lecture Zero directory.
Which if I take LS for list or list all files
in that directory nothing shows up.
So this directory is currently empty.
So let's go ahead and fix that.
Let's add some code to this repository.
I can use the touch command where touch is just
a command that if you're unfamiliar with it can help to create a brand new file.
And I'll create a new file called hello.html.
And I'll open up that file using a text editor.
In this class you can use whatever text editor you wish.
But common ones include Adam which I'm using here,
but also Sublime and VS Code and many others.
And I'll just go ahead and create here a simple HTML web page.
No worries if you haven't seen HTML before
and this looks unfamiliar to you.
Later on during tonight's lecture we'll dive
in more depth into what all this code means if you haven't seen HTML
before to understand what's actually happening when I create this web page.
But in essence, what I'm going to do is create
a website whose title is my web page and whose contents just say hello, world.
All right.
So there I have it, a simple HTML web page.
Again, not to worry if you haven't seen this type of thing before.
But now I want to take that code and save it.
I want to make a what's called a commit to my repository
to say these are changes that I want to save because one day I might want
to refer back to them, for instance.
And so the next thing we'll need to know is git add.
And the git add command basically means we're
going to take some number of files, one or more files that we've changed
and tell Git that these are files that we want to include the next time we
make a commit, to the next time that we save
a version or a snapshot of the current repository.
So for instance, if I say git add followed
by some file name, what that's going to do is tell Git to track that file.
That this file is a file that I want to track the next time
that I save a copy of the repository.
So what does that actually look like?
If I do ls right now, again, list all the files in the current directory,
you'll see that I have hello.html, that file that I just created.
And what I'll do now is I'll say git add hello.html.
To mean, I want to take hello.html, and I
want to include that the next time I save a version of this repository.
Nothing appears to have happened, but that's
OK I have now added hello.html as a file that I want
to track the next time I make a save.
So what does that process look like?
That comes in the form of a command called git commit.
Commit it just fancy way of saying take a snapshot of the repository
in the current moment and save it.
And so how that would work is I would say git commit followed by a flag dash
m, m for message, and then in quotation marks
some English message describing what it is that I've changed in this commit,
describing what it is that's happened in this change that
makes it different from previous versions of the code.
This is useful because as you begin working
on a project that has dozens or hundreds or even thousands of commits,
later on you can refer back to this list of messages
that you yourself have written describing what happened
in any successive change, so that you know where to look if you're trying
to find a particular commit, or a particular change that you made
to your code at any particular time.
So when you run git commit dash m followed by a short description of what
you've done, what that'll do is have Git save a new version or a new snapshot
of your repository in that moment keeping track
of all of your old versions as well.
So that's git commit.
And we'll take a look at that now.
I'll do git commit dash m for message.
And the message that I want to include in this case is just added hello.html.
That's what I did.
I'll press Return.
And what you'll notice is that Git provides me some helpful information
about what it is that I just did.
It said one file changed at nine insertions because I added a new file
and that file had nine lines in it.
And so now Git has kept track of the fact that in this commit,
in this save I have added this hello.html file that
has the contents that you just saw a moment ago.
So that's me making a save to the contents of that file.
Next command that's often helpful to know and to be familiar with
is git status.
Git status is a simple command that effectively just tells you what's
currently going on in your repository.
If you forget whether you've made new commits since the last time you checked
from GitHub, if you forget whether you've made new changes that you
haven't committed yet, git status is an easy way to just run git status
and see the current status of what's going on inside of your repository.
So let's take a look at the code that we've been working on.
We'll go ahead and run git status on it.
And what we see is on branch master--
don't worry about branches too much.
We'll dive into more depth about that next week.
But importantly, we'll see that we are based on origin master
and right now it says we have nothing to commit.
So git status effectively tells us the current status of the repository,
tells us what's going on with our repository at any given moment.
So next up we've made these changes to our repository.
The next question is, now how do we send those changes back to GitHub?
GitHub's keeping track of our repository on the internet
and we've made changes to the repository adding hello.html on our computer
locally, but that isn't yet reflected on GitHub.
If we were to check the GitHub page for this repository
it would still currently be empty.
So how do we then send those changes to GitHub?
That's called a push, where we push our code from our local computer
to the repository that's stored somewhere on the internet.
And so when we run git push, that causes those changes,
whatever changes that we've made to our code locally
to be pushed to the remote server so that GitHub is now able to keep
track of those changes that we've made.
So that is git push.
And I'll go ahead and try and show you that now.
If I try and run git push it pushes those changes to the GitHub repository.
And now if I go back to here, this GitHub page for student50/lecturezero,
which is the repository page on GitHub, and refresh that page
you'll notice that now there's contents here.
Now I have an hello.html file that's located inside this repository.
And if I click on it then you can see the contents of that hello.html file
that is now stored on GitHub as well.
So I've now taken my changes that were just on my computer before
and I'll push them so that they are on the internet as well for people to see.
So that's git push.
Next up is sort of the inverse of that.
Git pull.
What if someone else has been working on your repository,
has made changes to it, and pushed those to GitHub?
And now you want to download the latest version of that repository.
You want to download the latest changes down onto your computer locally
to take a look at it.
How would you go about doing that?
That's by a different command called git pull.
When you run git pull, if there are other changes that
have happened on the remote server, notice that here locally I've
made one change, but someone else on GitHub for instance
has pushed some second change that's been made to the code.
If I run git pull, that causes any of the latest changes that
have been made on the remote server to be downloaded onto my own computer
so that I now have a working copy of the entire history of what's
been going on with my project so far.
So that's git pull.
And we'll show you a quick example of that now.
If I go back into the GitHub interface there is sort of two ways
to make changes to the code that you see here on GitHub.
Either I can change that code on my own and my code on my computer,
or actually GitHub's web interface actually has a button here
that lets me edit this code.
So let's say I wanted to add another line that
says hello, again, for instance, that I wanted to add to this file,
I can scroll down and go ahead and commit those changes.
Again, commit is just a fancy way of saying save or take a snapshot.
And when I commit those changes what I see
is that the contents of my web page on GitHub show hello, world
and also hello again.
But if I were to check my computer I just have hello, world.
Just the one sentence.
That change has been made on GitHub.
It hasn't yet been reflected in my version of the code that's
stored on my computer.
So what can I do now?
I can run git pull to say pull down any of those latest changes from GitHub.
I press Return.
And notice that it says hello.html.
Two changes, one plus and one minus.
One insertion, one deletion.
Git's not quite smart enough to know that I actually took a line
and changed it.
As far as Git is concerned I removed that old line
that just said hello, world, and added a new line that
said hello, world, and hello again.
So if I check my code now going back here, I see that it's now updated.
My local version on my computer now says hello, world, and hello again
because that was the change that I had just pulled down from GitHub.
And so via pushing and pulling code can you and other people
that you're working with collaborate together on a repository
and make sure that you're keeping track of any changes that you make.
But what can go wrong here?
What might happen and cause things to not seem as simple as they are?
Well, what if I decided to make a change here?
Hello a third time.
So I make that change and I decide to OK, git add hello.html.
I want to track that.
And git commit, add a third line.
So now I've added that third line to the contents of my hello.html file.
But what if someone else on the internet who has access to my GitHub repository
decides to edit it differently and decides to say hello, hello, hello,
and save those changes by committing them?
Now the online version says hello, world, hello again, hello, hello,
hello, but in my local version of the code
it says hello, world, hello again, hello a third time.
And if I try now to pull this code from GitHub
it's not going to be as simple as it was last time of just updating the changes
because Git doesn't quite know which change I actually want.
Here I've added a sentence online that's a different sentence.
So we're going to need some way to reconcile those two things.
And so that's where we introduce the concept of merge conflicts.
Git will try whenever it can to automatically take
any changes that have been made and combine them together automatically
for you without you needing to worry about what's going on.
But in some cases, if you and another person
have both made changes to the same lines of the same files
you may run into a merge conflict, which is what
happens when you try and run git pull.
But what happens is that there's some sort of conflict.
The pull can't happen.
And so what you'll see is a message that says automatic merge failed.
You need to fix the conflicts and then commit the results.
So what does that look like?
Well, what will happen is that if you open up the file with the conflict
you'll see something that looks a little bit like this.
You'll see a file with a bunch of less than signs
and then HEAD, some lines and then equals, equals, equals,
some more lines and then this sort of random long sequence of numbers
and letters.
It might seem a little bit arcane at the moment,
but we'll break down what this actually means.
So when you look at a file like this, which
results whenever there is a merge conflict produced by Git,
there are a couple of things to keep in mind.
One is that anything between HEAD and all the equal signs are your changes.
The things that you did on your computer before you tried to do the pull.
Anything between these equal signs and the greater
than signs here, these are the remote changes.
The changes from GitHub that you were trying to pull down that
were somehow in conflict.
That these two lines couldn't automatically be merged together.
And this long sequence of numbers and letters is the conflicting commit.
Whenever you make a commit in Git, Git represents that using a long hash.
Just a long sequence of numbers and letters
so that you can uniquely identify one commit out
of a series in a history of commits.
And this long sequence of numbers and letters
is just the name of that conflicting commit.
It is that commit hash of the one that caused the conflict.
So what do you do in a situation like this?
All you need to do is remove all of the lines you don't want.
Remove all of those less than, equal than, greater than lines
and also remove whichever part of the code
you didn't want leaving only the version that you want to be merged together,
and then get rid of any that extra white space
and then you can commit the result.
So I'll show you what that looks like if we go back over to the computer here.
Recall again, that locally we had three different sentences.
And online we had three different sentences,
but the third sentence differed.
So now if I try and run a git pull what you'll notice
is that we see exactly this.
We tried to automerge hello.html, but there was a conflict.
There was a merge conflict in hello.html.
The automatic merge failed.
We need to fix the conflicts and then commit the results.
So if I take a look at hello.html, my text editor Adam
is automatically highlighting things in certain colors for me.
But what you'll notice is you see this less than, less than head,
and then this version, which was my version, hello a third time.
And then this version down here, which is the version from online.
Git doesn't know which one I want, so I need to pick.
And I'll just say you know what?
Let's use the version that I had.
So I'll go ahead and get rid of all of these extra lines
so that I'm left with just the version that I
want, the one that says hello, world, hello again, hello a third time.
And if I then commit those changes, now Git
knows because I have told it this is how I
want you to resolve the merge conflict.
Now Git is aware of how to go about merging the two different versions
of that repository together in order to come up
with one version that is going to work for everyone.
So that's the process of resolving merge conflicts.
It can seem a bit complicated at first, but as you start to deal with them
you'll start to get a sense for where the different changes are
and how to go about resolving them.
And it's something you may run into as you go about the process of working
on your project.
A couple other useful commands that are useful to know.
One is git log.
What git log does is effectively just show you a history
of all of the commits that you've made.
If you run git log while you're inside of a Git repository,
you'll see a list of all the different commits that have been made.
Notice again that you'll see each commit is marked by a unique commit hash.
Just a sequence of numbers and letters describing that commit.
You'll see who made the commit, when that commit was made,
and also a description based on that message
that you provide whenever you make a commit of what it is that happened
in that commit so that you can see the history of what's
been going on in your repository.
So that's git log.
And then one other command that's useful to know is git reset.
So we talked about before if you've made some changes,
realize that you messed up and you want to go back
to the way things were before, you can run one of these commands
if you do git reset --hard, followed by a commit hash like the numbers
and letters that we saw before.
That will reset your whole repository back
to that version, whichever version was marked by that commit hash.
And likewise, if you run something like git rest --hard origin/master,
origin/master is a fancy way of saying the version of the repository that
was the origin of this repository where I got it from.
In other words, if I cloned my repository from GitHub then running git
reset origin master is going to reset the contents to my repository
back to the version that was previously on GitHub so that then I am
able to see whatever it was originally.
So in this case, if I run git reset --hard
followed by the commit hash of some previous version of the code,
what that's going to do is reset that code back to that older version,
and now my repository is back to a previous version
such that I can correct my mistakes and then continue working appropriately.
And so we'll show a quick example of that.
So first of all, commit my changes.
So just now I fixed the merge conflict and run a quick git status.
Oh.
I need to add the files before I commit them.
So that's a good lesson to be learned.
The way Git effectively works is that we first
need to add the files to what's called a staging area or an index.
Just telling it these are files that I want to track in the next time
that I make a commit and then you commit after that.
So if I git add hello.html and then git commit, fix the merge conflicts,
that will resolve the issue.
And if you're looking to simplify these two commands into one
simpler command know that you can also do a command like git commit -am,
where the a stands for add to both add files to the staging area
and commit them all together in one command.
So go ahead and press Return there.
And now if I run a command like git log, what you'll see
is a history of all the different commits that I've made now.
Here was me fixing the merge commits, here was when I updated HTML online,
here was when I added a third line to the repository.
So I see the history of all of the different
commits that I've made to this repository.
And let's say I wanted to reset back to an older one of these.
I wanted to reset back to this original one where I first added hello.HTML.
I can take this commit hash, the commit hash
of when I first made that change, or even just
the first couple characters of the commit hash
is usually sufficient to be able to identify it.
And I can run a command like git reset --hard followed
by that commit hash by pasting it in there.
And now I've reset the head, reset where I am in this repository
back to that older version.
And now if I check the contents of hello.html, it just says hello, world.
Back to that very first version of the HTML
file that I created way back when I first created the repository.
Yes, so Git keeps track of all the different snapshots.
In fact, if you run a command like git rest log,
just a log of all of the different references
that Git has kept track of you can see all the different changes
that are still there.
So they're accessible, but they're just not present
in the current version of the repository as you see it just there.
Yeah.
A question over there.
AUDIENCE: Once you run the [INAUDIBLE] what version of the file [INAUDIBLE]??
BRIAN YU: GitHub was untouched.
So the question was, what happens to the remote repository,
the repository on GitHub when I reset something locally?
And the answer is that any changes I make to my computer,
to my version of the repository on my computer
never affect what's going on online unless I try to push
those changes to GitHub for instance.
So if I really screw things up, mess things up on my computer completely
GitHub's version is still going to be the way it was before.
And if I really wanted to I could just download a new copy
by cloning the old version from GitHub.
If I check now, even though I reset my version on my computer
it still has hello, world, hello, again, hello, hello, hello,
because I have never pushed any new changes to GitHub after that
to tell it to make any additional changes after this point
that it knows about.
So GitHub doesn't know about any of those additional changes just yet.
Question back there.
AUDIENCE: Yeah.
So does Windows or a Mac OS [INAUDIBLE] built into it so [INAUDIBLE]??
BRIAN YU: Great question.
The question is, is Git built into Windows and Mac OS,
or is there something special you have to do?
In many cases, you will need to install Git.
When we release project zero you'll find that in the project zero instructions,
there are instructions for how to get set up with a GitHub account
and how to install Git onto your computer
and configure it correctly so that it can talk to GitHub.
But yes, typically you'll need to install it.
It's free software that you can install on your machine
and it will prove helpful as you go about starting
to work on version control.
Yeah.
AUDIENCE: Do merge conflicts only happen if you
were trying to pull from the repository and it's different,
or is there any situation where I'd be pushing changes and not
running to a merge conflict?
I don't know if that makes sense.
BRIAN YU: Great question.
So the question is, is pulling the only time that you
might run into merge conflicts?
And the answer is no.
It's the only one we've seen so far.
But any time you are trying to take two different versions of the code
and combine them, there is a possibility that you'll run into a merge conflict.
And so later on in this course, we'll take a look
at additional features of Git like branching,
where you can keep track of multiple different versions of your repository
at once so that you have your current version of your repository,
but you also have a different branch on which you're
working on some new feature and maybe a different branch
where you're working on some other feature.
And any time you want to merge two branches together to say,
OK, this feature is done.
I want to bring it back into the master branch or the official version
of the code, so to speak.
Then there's possibilities for merge conflicts there.
So pulling is one instance in which conflicts can happen,
but certainly not the only instance in which those conflicts can happen.
Yeah.
One more question.
AUDIENCE: Let's say I entered in multiple files [INAUDIBLE]
should I run Git [INAUDIBLE]?
BRIAN YU: Great question.
So the question is, all right, so far in this example
we've only ever been dealing with one file, hello.html.
What happens if I have multiple files that I'm working on?
As it might happen if I'm working on a larger project,
how do I deal with that?
Well, the answer is that you need to add any of the files
that you want saved in that commit.
And so you could you git add file one, git add file two, git add file three.
You can also do git add star, where a star just means add everything.
And that will add all of the files that you have unsaved.
And the advantage of doing things file by file
is if you've edited three files, but one of those files
is unfinished but the other two are ready to go,
you can just add those two files and commit those changes.
You only ever need to commit one after you add multiple files to say,
I want to save the changes I made to these two files,
but the changes I made to the third file aren't quite done yet
and I didn't want to add or commit those.
And so separating the add and commits step gives you that kind of control
over your repository to say, these are the files
that I want to keep track of in the next change that I make to the repository.
So that was effectively a short introduction to Git
and we'll dive into more detail about Git
later on as we progress throughout the course.
But we'll go ahead and take a short, maybe five minute break now.
And when we come back, we'll start talking about the HTML code
that we actually saw before.
Diving into HTML, what it is, how it works, and also CSS,
how we might style our web pages to make them
look a little more aesthetically pleasing.
So all that when we come back.
All right.
Welcome back.
So now that we've taken a look at version control
and how we might go about versioning our project
and keeping track of different versions of our project as we go along,
we'll dive right now into the actual web programming
aspect of the course starting by just taking a look at HTML, or HyperText
Markup Language.
This is a language via which we're going to be laying out the structure of a web
page such that when a user opens up in their web browser,
their web browser, whether it's Safari or Chrome or Firefox or some other
knows how to understand and interpret that HTML and display it as a web page
to the user.
So we'll take a look at a simple example.
In fact, we'll just take a look at hello.html.
Very similar to what we've just been working on with that Git repository.
And we'll now break this down and sort of get
a feel for what's going on in terms of what we see here
and how this is going to translate when a web browser reads code like this
and tries to interpret it as a web page.
So up here on line one, we see this sort of funky angled bracket !DOCTYPE HTML.
This first line just goes mean something along the lines of HTML
has come in a number of different versions.
It's had a bunch of different standards where people specify,
here's what's included in this version of HTML and this new version of HTML.
And the latest version of HTML is called HTML5.
And the way that a web browser knows when
it gets a web page, which version of HTML it's using
is by taking a look at that first line.
So that first line saying doctype HTML is
our way of telling the web browser that this web page is written using HTML5.
So now let's take a look at the rest of this web page.
And what you'll notice throughout this web page
are a whole bunch of what are called HTML tags.
Those are these keywords that begin with an angled bracket
and end with an angled bracket.
Right here we see the HTML tag.
And all that tag means is that angled bracket HTML ending angle bracket
means this is the start of the HTML content of the website.
And this will go all the way until here on line nine where we see a tag that is
angled bracket /HTML, where that slash just means this is the end of the tag.
So what line two and line nine sort of tell
us here is that this is the start of the HTML content of our web page and line
nine here is the end of the HTML content of our website.
And everything in between is the actual contents of that website.
And if you take a look we've divided that content to the website
into two parts.
Up here on line three we've started the head of the website.
Angled bracket head angled bracket.
That's the start of the head tag.
The head of the website is usually used for a metadata, information
about the page that doesn't really appear
in the main contents of the page, but is used
to give the browser important information about how
to go about displaying that page or other important information about it.
In this case, you see we have a title tag here
where the title in between the start of the title tag
and the end of the title tag we've included text, my web page.
And so as you might guess what this line four is saying,
is we're going to have a web page whose title is just my web page!
And that's going to be the title of the web page.
And that's information that's all included
in the header of our HTML page.
In addition to that, on line six here we see the beginning of the body tag
and the end body tag is on line eight.
And in the body of the website very simply we just say, hello, world.
And that's it.
So what we've described here in nine lines
is an HTML5 website that's got two parts.
It's got a header whose title is my web page.
That's going to be the title of the page.
And we have a body that just says hello, world.
And so now if we actually were to open up a web page like this by saying,
open hello.html, or just opening it in a web browser like Chrome,
you'll see that what we get is a web page that just says hello, world.
And if you notice up there at the top it says that the title of the page
is my web page.
So as you might guess, Chrome is reading that HTML code that we just wrote.
And it's interpreting it trying to figure out what means what.
And it knows where to put different tags,
it knows that the title tag is going to go up here in the title part of my web
page, and it knows that whatever is in the body is
going to go in the main area, the main body of my web page in general.
So if I changed the title to something else
or change the body to something else, it would have reflected here.
Of course, this is a very simple website, but it shows you the basics.
How we use HTML tags to define the structure of our page,
and then using those tags we can create pages
that are rendered nicely when a web browser sees that HTML
and tries to do something with it.
Questions about that so far?
Yeah.
AUDIENCE: Is the indentation style or functional?
BRIAN YU: Great question.
So the question is, is the indentation that we saw in that code earlier style,
or is it functional?
The answer is that it's just style.
Ultimately Chrome and other web browsers don't really
care about whether your head tags are indented
and your title tags are indented further than that.
But it can often be easy when another human is reading your code,
or even when you're reading your own code to be able to say,
OK, here's the head tag and just look straight down here
is the end of that head tag.
And so very frequently you'll see a paradigm
like that will indent anything inside of the header,
but the header itself will be aligned nicely.
And oftentimes, you'll see things that when a tag only contains one line
within it, we'll just put the whole thing on the same line where we have
title, my web page, and then /title.
But we could have just as easily if we had one or two indented the my web page
and put the /title on its own line as well.
And that would render identically.
If we go back into Chrome, refresh that page, no changes.
Chrome doesn't care about that difference in indentation.
Great question.
Other questions about this first HTML web page that we've created?
All right.
So that was sort of the introduction to just a basic HTML page,
but there's a lot more that we can do with HTML
by taking advantage of other tags.
So far we've seen the HTML team tag and the head tag and the body tag.
And right now all that's able to do for us is render some text.
And we can type more text and it would appear there as well.
But let's take a look at how we might render headings for text
because if we have text, maybe we want a heading to go at the top of our page
and maybe subheadings to go beneath it.
And so we'll open up headings.html And what headings.html is going to do
is show you a couple of other tags.
So HTML has many, many built in tags, more
than we're going to talk about today, but we'll just
introduce some of the common ones so you can get a sense for how these tags work
and the general feel of them.
And these are ones that will come up quite frequently as you go
about writing web programs using HTML.
And what you see here is in H1 tag located inside the body, where H just
stands for heading, like a big headline at the top of the page,
and one is a number that stands for its size.
So HTML has six built in heading tags inside that understand.
h1 is the largest, h6 is the smallest, and two, three, four, and five,
as you might guess fall somewhere in between.
So this is the largest headline.
Starts at h1, ends with the /h1.
Notice this continual pattern of angled bracket name of the tag, like h1,
and then the /h1 to mean this is the end of the tag.
This is the end of that head end.
So if we open up this page now by going to not hello.html, but headings.html,
what we'll see is this is what gets rendered.
We have this is the largest headline.
Again, this was our h1, this was our h2, all the way down
to h6 at the bottom which is a relatively small headline.
And one feature of Chrome and most web browsers
nowadays is that if I actually want to take a look at any web page
and see what HTML actually made it up, I can Control click on the page
and go to View Page Source for instance.
And when I go to View Page Source, what I get
is Chrome showing me the actual contents of the page that it had just rendered.
And this can often be helpful once you start
working on larger web applications trying to understand
what's actually getting rendered.
In this case, what we see here is exactly
the same thing as what we loaded before because Chrome is just
showing us the HTML contents of the page that it then
renders to look something like this.
So it's the browser that takes the HTML, understands the tags and what they do,
and renders it to look a little bit nicer like that.
So what are some other common HTML tags that we might want?
So now we have the ability to include text in our web pages,
we have the ability to include headings.
One other thing that we might naturally want to do
is maybe create a list of different items
where frequently we'll want to have a bulleted list on our web page
or a numbered list on our web page or some other type of list.
And so we'll take a look at possible ways we can do that.
And we'll see here in lists.html that I have two different examples of lists
for you or take a look at.
So the start of our web page is the same.
We have doctype.html.
This is the start of the HTML content of our page,
this is the start of the HTML header.
Here's our title.
Then in our body is where things get interesting.
So here where I said an unordered list, I
have this tag ul, where ul as you might guess stands for unordered list.
And the ul element goes from here all the way down to line 12 over here.
And inside of it I have three li's, where li stands for list item.
This is an item inside of this unordered list.
Here's one item, another item, and yet another item.
And so these are three list items that are inside of the unordered list.
And as you'll start to notice the HTML tags very frequently
nest within each other.
We have an li which is inside of a ul which is inside of the body.
And this natural way of nesting HTML tags within each other
is a nice way of being able to add and make
your website more complex by nesting more and more of these different HTML
tags together in order to create the end product that you ultimately want.
And so that is a ul, an unordered list.
Lower down on the page we also see an ordered list, which as you might guess
is labeled ol, ol for ordered list.
And that one is going to be numbered.
We have the first item, second item, and the third item.
And now if I were to open that up by opening up list.html, what we see
is we have an unordered list that just shows up as a sequence of bullet points
and an ordered list that shows up as a sequence of numbers.
Note that nowhere in my HTML that I actually say, OK, this is one
dot first item, or two dots second item, three dot third item.
The web browser knows to render it as an ordered list
and it puts the numbers there for me, such
that if I try and insert another item here I
don't need to go back and renumber the bullet points.
The web browser will take care of noticing
that this is the third list item.
This is now going to actually be the fourth list item.
And when I render that page it's going to show
me here's the first item and the second item, another item, the third item,
and the fourth item in the list there as well.
So the web browser is pretty smart about these things.
It knows the names of these tags and it knows what they mean and what they do.
And it can use that information in order to make a web page that
looks the way that we want it to look.
Questions about any of that so far, or about the tags that we've seen?
So thus far, all the web pages that we've created
have all just had text on them.
They've had text maybe just written out like unordered list or ordered list,
they have had headings on them, they potentially had lists
whether they're bulleted or numbers.
But we'd probably like for our web pages to be a little more rich.
Maybe.
Then we want to have give them some images,
some pictures to look at as well.
And so inside of my source folder where I have all these HTML files,
I have a file called cat.jpeg, which is just a photo of a cat.
And maybe I want to take this photo of a cat
and I want to put that on to my web page.
How might I go about doing that?
Let's take a look now at imagezero.html.
So what we're looking at here is a simple web page.
It looks a lot like the ones we've already
seen with one slight difference. so here in the body we see on line seven
that we have an image tag, but there's something a little bit
different about the image tag.
In fact, there's two things that you might notice.
Thing number one, we see the start of the image tag
but we don't really see an end to the image tag.
All the other tags have body and /body, title and /title head and /head,
but there's no image and then /image at the end of it.
And the reasoning for that is that not all of the HTML tags
require a beginning tag and an end tag, a start and an end
because some things like images, it doesn't really make sense to say,
OK, start the image and end the image and what goes in the middle.
You're not going to type text in the middle of the image for instance.
And so for tags like the image tag you don't need an end tag.
It's just sort of a self-contained tag that doesn't
require an end tag to go along with it.
The second thing that you'll notice about this tag
is that it's not just the name of the tag.
The name of the tag is img, for image, but we've also
added what's called an HTML attribute.
And this HTML attribute called SRC, or source is providing
additional information to this tag.
It's saying this is an image tag that I want to render to the web browser.
But without any additional information the web browser
wouldn't know which image to render.
It wouldn't know whether to render an image of a cat
or a dog or a jellyfish or something else entirely.
And so what we have to do in this case is provide that information
to the web browser.
We have to tell in our HTML code here's the name of the file
that we actually want to render on the page.
In this case, it's cat.jpeg, that same file that I was showing you earlier.
And if instead, the image that you wanted to display
was somewhere on the internet, some linked
to an image that was on Google Images for instance
you could just paste in a link to an image and that would render on the page
as well.
So if we then go and open up imagezero.html inside of a web browser,
what we'll see is a very big--
we'll see that cat.
And why did the image render so big?
This probably isn't the type of interface
that I want to present to my users.
If I want to show my users an image of a cat I don't want it rendering huge.
And I guess the reason for this just happens
to be that the cat.jpeg file that I've stored on my computer
is a very high resolution image.
It's many pixels wide by many pixels tall.
And as a result, my web browser without being told any additional information
about how to deal with something like this is just going to take the image
and render it at full resolution because it
hasn't been told to do anything else.
But fortunately, for us in order to control that and have a little bit
more control over what's going on when our web page renders and is displayed
to the user, we can add a couple additional attributes to the image tag.
So what we see here is the exact same web page.
We have the image tag and the source attribute,
but we've added two additional attributes.
We specified a height attribute that says
render this image that's 200 pixels tall and a width attribute that says render
this image that's 300 pixels wide.
And so now when I open up this same web page
but change image zero to image one, it's going
to just render the image as 300 pixels wide by 200 pixels tall because I've
told it using those HTML attributes that this
is what I want the dimensions of the image to ultimately be.
And so we noticed that some of the attributes that we
use in HTML, like the source attribute, you need that source attribute.
If you don't provide a source attribute your web browser's not
going to know what image to add.
But there are many, many more attributes that are optional.
Attributes ones that you can include if you want to.
You can optionally specify the height or the width
of the image that displays in your HTML page, but you don't need to.
But you should be careful because your web browser is just
going to listen to you no matter what it is that you type in.
If I say, all right, I want the width to be 300, but I want the height to be I
don't know 700 pixels for instance.
And then I try refreshing this page, suddenly
the cat doesn't look quite right anymore because I've
distorted the image by telling it exactly what dimensions to display it
as.
But the web browser will be smart if you give it the opportunity to be.
So if I just say, height is 700 pixels but leave off the width for example
and just say render it as a 700 pixel tall cat it will render to 700 pixels
tall and adjust the width appropriately in order to match.
So if you are going to specify both the height and width to something,
make sure the dimensions are what you want
them to be otherwise oftentimes it's best just left up to the browser
to make that determination for itself in terms of what makes the most sense.
So that's images and how we use HTML attributes to adjust
the behavior of particular HTML tags.
Questions about that?
Yes.
Question over there.
AUDIENCE: How would you make the image as a proportion [INAUDIBLE]
web browser [INAUDIBLE]?
BRIAN YU: Fantastic questions.
So the question is, how do we take this image and make it sort of proportional?
Because if I'm here looking at it on a computer with a sort of a wide screen
then this looks great, but if for instance I
were to shrink down this page, now most of the cat gets cut off.
And so HTML, and later we'll see CSS for styling,
has a number of different ways via which we can control exactly how tall
or how wide things are and control the size of things.
One way is by specifically specifying a number of pixels.
For instance, I might say that I want this cat to be 700 pixels tall,
but I might alternatively say, all right, you know what?
I want the width of this cat to be 50%, 50% of the total width of my web page.
So if I save that and render it, what I see
now is that I didn't tell my web browser here's
how many pixels to render this image as, it just
knows 50% of whatever the width of the web page
is, that's going to render as half of that.
And now if I shrink the web page, before the cat didn't change size
because it was a fixed number of pixels and if I shrink the web page
it doesn't really care, but now if I shrink the same web page
you'll notice that the cat shrinks with it.
As my web browser gets narrower, 50% of that full width of the web browser
is getting smaller.
And this is a trick that's often employed.
Now, if you start to think about how to make your web
pages responsive to people using mobile phones or tablets
or devices of different sizes, making sure that your content looks good
both on a computer but also on smaller devices as well
is very, very important nowadays as web applications
become more and more useful on varieties of different platforms.
And so techniques like that of using a percentage instead
of a number of pixels to say I want this to only show up as 50%
can often be a helpful tool to make sure that you have that dynamism, that
responsiveness in your website to make sure
that it's able to adapt accordingly.
Great question, though.
Other questions?
All right.
We'll keep going.
So that was images.
We'll show you a couple of other things that HTML can do.
One thing that it's very useful for is rendering tables.
So we will have tables of data with rows and columns
and we want to display that data to the user.
Let's take a look at table.html, which will be an example of that.
So what we have here is a table that represents US presidents.
Just the first two.
But what we'll notice here is that we have a table tag that begins the table.
And then we have a whole bunch of tags nested within it.
We have a tr tag, which stands for table row.
And then within that we have th tags, which stands for table headers.
So if you think about this just going one layer at a time,
we start our table.
And the first thing in our table is going to be a row in that table
where that row is going to consist of three headers or three columns that are
being headed by these individual cells.
We have first name, last name, and years in office.
And now we end that row with /tr.
That's the end of that row and now we start another row.
Here's a table row that says, all right, here is
going to be the start of a new row of this table.
We have George and then Washington and then
the years of George Washington's time in office.
And if we scroll down a little more we see
we have another row underneath that.
Notice that inside of the row all of the individual cells
are stored in td elements, where td stands for table data.
This is just the data that is contained within that particular row.
And so now if I were to open up table.html, what I see
is something that looks something like this.
I see my title.
Notice presidents was here labeled as a h1,
so it's going to render as a large heading.
And within that I have individual rows.
Here's my header row.
The th ones make it render as sort of bold.
And I have the names and in the second row inside of that table as well.
Now, this might not look like a very fancy table.
It doesn't have borders or a coloring or it
doesn't look like it could be aesthetically pleasing.
We'll see later on in tonight's lecture how
we might go about styling a web page like this in order
to make it look a little bit nicer and look a little more aesthetically
pleasing.
But that's an individual table.
And if I wanted to, I could add an additional row to this.
Right here is two rows and I can just continue to add more elements inside
of this HTML page.
So I can say one new table row and I'll end that table row.
And inside of that is going to be table data Thomas Jefferson and 1801 to 1809.
And so if I refresh that page, we see that the third row in that table
now appears because I've added to the HTML code.
And you can continually do this by adding more and more HTML elements
to the contents of my HTML page.
One other HTML tag that we'll take a look at just to see how they work
is form.html.
So what we're looking at here is an HTML4.
Oftentimes, when we're working with applications
we don't just want to display information to the user,
but we want to collect information from the user in order
for them to either sign up for our website or log into our web site
or submit data to us in some other way.
And so what we see here is a simple example of an HTML form, where
we have this form tag in the end of the form to say here
is going to be a place where users can input data.
On line seven we have an input tag.
Notice that like the image tag there is no end tag here.
This is just going to be a place where users can input text
and we need to tell the web browser what type of information
the user is going to be inputting.
In this case, we're saying the type of that information is just
going to be text.
And we're specifying a couple of other optional attributes
that give additional information to this form so that it knows how to behave.
Placeholder is just full name.
Placeholder, if you'll recall, and we'll take a look at it in a moment,
is sort of that same text that appears in a text field
before you start typing in it just to give
the user a little bit of an indication as to what's expected of them
as to what goes there.
And this name field at the very end just gives a name
to this input field that says that this input field is
going to store the name of the person.
This won't become relevant just yet, but as we'll see later on in this course
as we start to actually do things with the form, take this information
and log it to a database or process it in some way,
being able to reference a particular input field by its name
can ultimately be very, very helpful.
And then finally down here after they type in their name,
let's give them a button to click on.
That's created just by using a button tag.
And the name of this button is going to be Submit, and then /button to say, OK,
that's the end of that button.
So if we render that form and take a look
at what that looks like when we open it as HTML
we see it's going to look something like this.
So we have a spot for the user to type in their full name.
Notice that full name is automatically placed there as the placeholder text
that we put in or HTML, and they can type their name in there.
And then the Submit button is a button that
would theoretically submit that form.
Now, this form doesn't yet do anything because we haven't hooked it up.
We haven't told the form what to do after someone clicks on the Submit
button, but we'll see later in this course
how we can begin to using other programming languages like Python
and JavaScript begin to take the results of form information
and do something useful with it.
But for now all we're doing is designing the front end.
What the user sees when they visit a particular web page.
So that was the form.
Questions about the forms or tables or images
or any of the other HTML elements or tags that we've seen thus far?
All right.
One helpful way to think about HTML as we
think about designing our HTML websites is thinking about them
like a tree structure.
If you're unfamiliar with tree structures,
effectively think of them as a combination of nodes
where nodes are just points within this tree that are connected to other nodes.
So in this case, if we look at a simple website like the Hello, World page
that we created before, if we wanted to represent this as a tree in HTML
we typically call that tree the document object model.
It might look something like this.
We have HTML at the very top.
Everything in our web page is contained within this HTML tag.
And within that HTML tag we have the header,
that head section of the HTML page, and we have the body of the HTML page
because inside of HTML we have the head here and the body there.
Inside of the head we have a title because the whole title
tag is nested within the HTML header.
And inside of that title is our text, hello.
And likewise, inside of our body is just this text, hello, world.
And you can imagine for some of our more complicated pages
that we saw earlier where we had tables, for instance,
that we might have a table element inside of our tree
and which is connected to a whole bunch of tr's for table
rows each of which itself is connected to a whole bunch of th's for table
headers, or td's for table data.
And you can represent this entire HTML page as this big tree.
And it might not seem very intuitive as to why
you might want to do that right off the bat,
but as we'll soon see, especially as we start diving into JavaScript later
on in the course that by having an understanding of this tree can
we start to manipulate it, can we start to add things to the tree
in order to add more to our web page, remove things
if we want to take things away from the web page
while the user is interacting with it.
And as we'll see in just a moment we can use this tree in understanding
what's contained within what to begin to style our web pages.
And styling our web pages is going to be the process of taking what so far has
just been websites that have a white background and black text on it
and maybe images and other things as well,
and starting to add some of our own custom styles
to it in order to make it look a little bit nicer to the user.
Because a big part of web development these days
is not just making sure that the web site works
and that it does what it's expected to do,
but also that it's visually appealing to the user.
That it's something that they would want to interact with,
that it looks nice, that it looks professional.
And so that is not something we can do with just HTML alone,
but it's something that's going to come in with an additional tool called CSS,
or cascading style sheets which is a different language altogether
and we can use to interact with HTML in order
to style the HTML in order to change the way the HTML looks according to rules
that we set in order to add color to our web pages, for example,
or add spacing in places where we want spacing or add borders to things
or add a background to things, for instance.
And so what we'll take a look at now is how
we might be able to leverage some of the tools of CSS
in order to design a web page that looks just a little bit nicer than the web
pages that we've already been working with.
So let's take a look at stylezero.html.
And what we'll notice is that this web page is
very similar to ones we've seen before.
It's got a body, it's got an h1 as the headline,
it's also got these p elements where p just stands for paragraph,
like a paragraph of text.
But the key difference here is that we've added a new attribute.
We've added this style attribute here that's associated
with h1, that headline.
And that style attribute is equal to something a little bit complicated,
but let's break it down into parts.
We have in quotation marks, "color:blue;text-align:center";
And so what we see here in this style attribute of our heading,
R2 is CSS properties, where a CSS property is just some specific style
property that the browser is going to understand and render in a particular
way.
And as you might guess what's happening here
is we're saying that we want to assign the color property of this heading
to blue and we want to assign the text align
property of this heading to center.
And so what that's going to do is instead of just rendering an h1 as we
normally would as just a black big headline on the left side
of the screen, we'll render it as a blue headline that's centered on the screen.
And so if we now open up stylezero.html, and we see a web page
that looks something like this.
That big heading is still there at the top of the page,
but it's a little bit different now.
We styled it to be blue, we styled it to be centered.
Whereas before, if we were to just get rid of this style tag
altogether and say that this is what that looks like without any
of that additional styling.
And so leveraging tools like that we can start
to build up styles for our web page.
We can start to make things look the way we want it to.
We can apply a color scheme to our website
in order to put whatever themed colors we want to put on our site.
And this can be used in order to add the sort of styling.
And HTML and CSS have a very rich vocabulary
for the types of things that can understand.
Obviously, we can be simple colors.
We can do the blue color or we can say red to make the headline render as red
instead, but there is something like 140 different colors
that HTML and CSS know how to understand and interpret.
So I could do something like color:dark magenta, for instance.
And if I refresh that page then the heading is rendered as dark magenta.
And if that's not enough color sophistication for you,
the 140 different named colors out there,
you also have the ability to select exactly which color you might
want by using that colors hex value.
And so in HTML and CSS and when we're dealing with color more generally,
we'll often represent color using a format called RGB, or red, green, blue
where we specify how much red is in the color, how much green is in the color,
and how much blue is in the color.
And using different combinations of red and green and blue,
where zero means very little red and 255 means a whole lot of red.
And likewise for green and blue can we represent basically any color
that we want to.
And so if we type in HTML color picker, for instance,
and we can see over here that this color, this shade of blue
is 66 amount of red.
So a moderate amount of red and a little more green, 134 green and 244 blue.
So a whole lot of blue.
And that is this particular color.
And so if we wanted to make our headings some different color, for instance,
maybe we want it green and we want it to be a darker green like this color,
for instance, that's this color.
That's 12 red, 142 green, and five blue.
And that color is represented by this up here.
This is called a hex code.
If you're familiar with hexadecimal or base 16,
it's effectively these three numbers 12, 142, and five represented in base 16.
No need to actually understand where that number comes from,
but effectively know that the first two of these numbers and letters
represent the amount of red, the second to represent the amount of green,
and the last represent the amount of blue.
And if I take that now 0c8e05, and in my HTML code rather than dark magenta,
I say #0c8e05, for instance, that same color hex
code that I saw before and then refresh my page,
now it's going to render using that exact same green.
So by using hex codes and understanding RGB values,
we can have a lot more control over the colors
that our web page uses by specifying exactly which
color that we want to display when that page ultimately gets rendered.
So that's the basic introduction to how we
might use the style attribute to begin to add some styling to our web pages
and make them look just a little bit nicer.
Questions about that so far, CSS or colors or anything we've looked at?
As we can imagine, if we start to-- and I'll
change this back to blue just for good measure.
If we start to add a lot of styling to our HTML web pages,
this is going to start to get cluttered pretty fast.
I can start to add additional styling here.
If I want my paragraph here to be purple and I want this paragraph over here
to be red, for instance.
And this will certainly work.
I can style things in different colors and that's going to work just fine,
but I've mixed my CSS code of describing what color
and how I want things styled with the actual contents of my page,
of the actual content that I want to be displayed
when the user goes to the page.
And oftentimes, that can be seen as just a little bit messy.
We might look for a cleaner and more elegant way of styling our page.
And CSS offers a number of different ways via which we can do that.
So one way is seen here in styleone.html.
So notice in styleone.html, which ultimately
when we open it is going to render exactly the same way.
Big blue headline and then two paragraphs of black text.
We've done something a little bit different here.
What we've done is the body of the web page
is the same as it was before without any style tag attached to it.
The h1 no longer has a style attribute.
It just says h1m welcome to my web page.
What we've added is we've added an extra section to the header of the web page.
We've added the style element to the header
to say here is some style information for the web page should
know that should be included in the entire web page, the rules
to follow when deciding how to style and how different parts of the web page
should appear.
And what we see here on line six is that inside the styling of the web page
we have h1, meaning here is how you should style any h1 that you see.
We say h1, the color is going to be blue and the text align property
is going to be centered.
And that's why ultimately that page looks exactly the same
because effectively the browser is doing the same things.
We've just moved the CSS styling away from the body of the HTML content
to the web page.
And this is a paradigm you'll start to see
a lot as we begin to approach web development from a number
of different angles that whenever we're intermingling
a lot of different things, oftentimes it can
be helpful to take one part of the web page
and separate it out into a different place such
that it's more logical or more easy to understand or more readable
or ultimately more elegant.
And this is one example of that of taking the h1 out of the h1
from the body and just describing it in the header of the web
page in terms of how the entire page should be styled.
And one other note about this is that when we put the h1 in the style tag
in the header, it's going to apply to every h1
that it sees throughout the page.
So if I add another header, adding here is a second headline,
and that's also an h1 because up here in our style tag
we've told every h1 to render as blue colored
and centered in terms of its alignment of the text.
When we refresh this page the second headline
is also going to show up as centered and blue as well.
Whereas before in that first example, if we were to add an h1
and we wanted it to be styled the same way, we would have needed to go ahead,
and h1 style equals color blue text align center and repeat that same thing
again for the second one.
And generally speaking, whenever you find yourself repeating the same code,
or even copy pasting the same styling code again,
in order to make it to apply to something else, generally speaking you
should look for a better designed or a more elegant
way of doing the same thing because ultimately this repetitiveness gets
difficult to maintain.
If I want to change the headlines from blue to red, for instance,
I now need to change the headline in two different places in my web page.
Whereas, in styleone.html, where I have all the styling
contained inside of just this style element,
inside of the header of my web page.
If I wanted to change both of my headings to red instead of blue
I just need to change it in one place, changing color from color blue
to color red.
And now both of the headings change in their color
because that Heading Style is applied to the entire document as the whole.
Questions about that?
OK.
But we can in fact get even better at how
we go about trying to separate out the CSS
because natural questions that might come up now are number one,
we still have this styling code inside of the HTML file,
when it sort of feels like something separate.
The way that we style our website is sort of
fundamentally different from the actual content
of the text that goes on our website and the structure of our web page
in general.
But another issue that might come up is, what
if I start to build larger web applications that don't just
have one HTML file, that have two, three, four, or more HTML files
that all want to have red headlines that are all centered.
Of course, I could take the style tag and I
could copy paste it across all of my different HTML files,
but again, that brings up the same problems that we saw before.
The problem of whenever you find yourself copy and pasting
code and repeating code we run the risk of making it more difficult to maintain
and ultimately making it less elegant.
If we wanted to change the color down the line
it becomes a whole lot harder because we have
to change it in many different places.
So what can we do about that?
Well, we can take that CSS code and just separate it into a different file
altogether.
So what I'll show you now is styletwo.html.
Styletwo.html does the exact same thing as styleone.html.
And all the source code will be made available to you afterwards as well.
Styletwo.html shows you a big blue centered headline,
but how is it doing that?
Well, the body is still the same and we no longer have a style tag in the head,
but what we do have is this line here, line five.
Link rail equals style sheet href=styles.css.
So what's going on here?
This link tag is effectively telling us we
want to link in some other file that's going to provide us information to help
us know how to render this HTML page.
And what kind of information are we trying to render?
Well, it's going to be a style sheet.
Information about how to style our web page.
And which file are we going to include?
Which is the file that we want to link?
Well, it's styles.css.
And so now if we take a look at styles.css,
what's going on in there to allow it to render the CSS the way
that we want it to?
Let's open up styles.css.
It's exactly the same thing as the contents
that we saw in the style tag of our HTML header before.
It's just h1, color is blue, text align is center.
And that's what allows us to get this.
If we add additional properties, maybe I want my paragraphs
to all be red, for instance, and I save that, now if I refresh of the page
the paragraphs are red.
The HTML file didn't change at all.
Styletwo.html stayed the same.
Yet, when I refreshed it the styles changed because this linked file,
this linked CSS file that is defining the style for my styletwo.html file
has been updated to say, now I want all of the paragraphs
to show up with red coloring instead of the original black.
And so we saw three different ways via which we can link CSS
into the contents of our HTML code.
One, just by including that style attribute directly in the HTML.
The second way, factoring it out into the header of the HTML
page so that it applies to the entire page.
And then finally, what might be one of the most common paradigms
you'll use, especially if you start building larger web applications is
this method of saying, take the CSS, separate out into a different file such
that even if I have many different HTML files
they can all reference the same CSS file so that they all
get styled the way that I want the page to be styled.
So those are the basics of how we might go about using CSS.
Now let's take a look at a couple of the common CSS properties
that we might use.
So far we've seen color to give a particular element of color in HTML,
and we've seen text align to say I want to center this text instead of left
justifying it.
And we can also use CSS to change the size of different elements as well.
So let's take a look at size.html.
And for good measure I've just included the CSS in the header
like we saw in the second example before.
Though in practice in a larger application
you might want to move this information into a different file.
But what you see here is inside the body I have a div.
And a div just basically means a division of my code.
Some section of my code that doesn't really have any real formal meaning.
It's just a section of my code that I want to do something with,
maybe style in a particular way.
And here's a style I've applied to it.
Background color is going to be teal, width is going to be 100 pixels,
height is going to be 400 pixels.
So if I now go to size.html, this is how it gets rendered.
We have a vertical just block of HTML content that says hello, world.
But in particular its background color is teal, it's got a particular width
and it's got a particular height as defined
by what I included inside of my style tag just a moment to go.
And so using these width and height tags we
can start to really define exactly what our website looks like.
If we change the width to 500 pixels instead of 100
and refresh the page there, we see that now it's a fair bit wider.
And so we can control exactly how the web page shows up
just by making these small modifications to it.
But now what if we wanted to add a little more to this website
in terms of its design, in terms of the spacing of this page,
in terms of thinking about what it's going to look like?
You notice that right now this hello, world block
is very close to the upper left hand corner of the screen.
Maybe we would want to move it around a little bit more.
So that's where we can start to introduce the notion of a margin
around the edge of a particular HTML element.
So for instance, if I go in here and set the margin of the div
to be 30 pixels, for instance, and now refresh that page,
now we see that hello, world has a margin around it.
It's got this sort of 30 pixel invisible border that's surrounding it.
And it helps to space that out from different elements.
And so controlling margin can often be helpful
when you're trying to lay out a web page with a bunch of different elements
and you want to control how far apart different elements are from each other.
The margin is very helpful there.
Another thing you might notice is that hello, world right now
is very much just directly at the edge of this teal box, which
looks a little bit suboptimal.
Maybe I would want to change that a little more.
And for that I can add in another CSS property called padding.
So I can say, all right, let's add a padding of maybe 20 pixels.
And after I refresh that, now you'll notice
that hello, world is internally padded by sort
of an invisible border of 20 pixels.
And so margin and padding are both used in order to control spacing.
But the key difference is that the margin of an element
is the space around this outside of the border of the element.
So this is my div, this teal box.
The margin is what's outside of it.
I've got 30 pixels of space along that side
and the padding is between the content of the element and that elements
border.
So this right here is 20 pixels worth of padding for the hello, world
that's located inside of this div.
And so using margin and padding, especially on larger web applications
you can start to really control the look and feel of the website
in order to make it display exactly the way that you would want it to.
All right.
Thus far we've also only been interacting with our HTML page
in the sense of having text that is all of the same font.
It's sort have been the same default font
that HTML tends to use whenever a web browser is displaying HTML content.
And maybe we'd like to have a little more control over that.
So let's open up font.html, and take a look at what's going on there.
So again, we have a body inside of which is a div that says hello, world.
And inside of the style tag up here we've
added some special styling to that particular div.
In particular, we've added three things.
We've added a font family that effectively just says
this is the font that I want this div to render in.
And notice that I haven't just said give it one font.
I said Arial, but I said Arial, sans serif.
Reason for this is when we start to think
about making sure that our website looks right in matter what browser it's
loaded on.
So maybe you were wanting to even include some font on your web page
that the user's computer doesn't have, or that the user's web browser just
doesn't understand.
And so if you include multiple thongs as the font family
in the styling of our HTML, then what's ultimately going to happen there
is-- sorry.
There's an extra tag there.
What's ultimately going to happen is that the web browser will first
try and match the first font that I provide.
It will try and use the font Arial if at all possible.
But if it doesn't have the font Arial, if the web browser doesn't
know what Arial is or can't find that font,
it's just going to default to any sans serif font.
And so oftentimes if you want to use fancier fonts on a web page
it can be a good idea to include the font that you want,
but after that some additional more common fonts
that might be more common in other browsers
on older browsers in particular that way you
can guarantee, or at least know with high probability
that when a user looks at your page they're
seeing what it is that you actually want them to be looking at.
In addition to the font family, we've additionally
specified the font size for how big we want the font to show up as.
In this case, 28 pixels tall.
And finally, a font weight.
You want the fun to be bold, for instance.
So now if we open up font.html, we see that what we get
is slightly different text rendering that what we saw before.
We see hello, world, but it's no longer in that same font
that it was previously.
It's now 28 point font in size, it's now in a particular font,
it's now bold because we were able to control
the font that was present there.
Couple other CSS things that we'll just take a look out before we move on.
We'll take a look at border.html So again, we have inside of the body
a div that says hello, world.
Just [INAUDIBLE] saying hello, world in some rectangular box.
But in the past that rectangular box has sort of been invisible.
We've seen the words hello, world, but there hasn't been
like in a physical box drawn around it.
But now there can be.
Up in the style tag we're going to specify that we want inside of the div
for there to be a border and that border to be a three pixel, solid blue line.
And so by specifying border three, pixel, solid blue
we can open up border.html and now we see
hello, world inside of this rectangular box that is a three pixel blue line.
And we can change this, can customize it however you like.
It can be a five pixel, dotted red line, for instance.
And now it's going to look something like that.
So we have full control over what the border looks like.
And again, there are many, many CSS properties.
Far more than we're going to be able to look at in just tonight's lecture,
but I'm giving you a taste of them, just a teaser
of what CSS properties are out there so that as you start
designing your own web applications you can
think about what do you want the web page to look
like, you can get a feel for what CSS is capable of.
And as a result, you can start to design pages that look
the way that you want them to look.
So that's borders.
And now let's try and use some of the CSS that we've learned in order
to improve the style of one of the HTML pages that we've already looked at.
So let's take a look at table.html.
And recall that table.html was just a simple web page that
listed presidents of the United States.
We have Washington, Adams, Jefferson.
And right now this table doesn't look particularly fancy or particularly
great, but we can use CSS now to begin to add styling to it,
to begin to control the way this looks to make it look the way we want it to.
Maybe, for instance, we want a border around this table.
So up in the head I can add a style tag and say, all right,
around the table lets add a border and let's make it two pixels solid black.
And now around our whole table we just have
this box, a two pixel solid black line that's
surrounding the entirety of this table.
So that's good.
That's a good start, but it's not great.
I also would probably want for there to be borders
around individual cells for this table.
Lines that are dividing up the rows and the columns.
And so let's do that now.
So now I would want to apply styling to the table headers.
Let's apply a border of maybe one pixel, solid black this time
and also around the table data.
One pixel, solid black.
Recall that the headers were these things at the top the first name,
last name, years in office.
Whereas the data, the td were the individual cells
that were composed within that table.
And by specifying this now and I refresh of the page,
now the individual cells also have a border around them.
We see a little box around each one of these individual cells.
And one thing you may have noticed is that the styling for the table header
is the same as the styling for the table data.
They're both border, one pixel solid block.
And it felt a little bit repetitive for me to have
to say the same thing two times.
So what I can do instead is just say th,td, to mean take this styling,
apply it to both table headers and table data and then I don't need this
additional information for the CSS.
I just say the table is going to have a two pixel, solid block border.
The table header and the table data will each have a one pixel solid back
border.
And if I refresh that the same exact layout results.
I don't see any changes in the styling because this is fundamentally
the same meaning as before.
We've just managed to eliminate some of that redundancy.
What else might we want to do here?
Well, right now one thing that you may notice
is that the lines are repeated twice because we
have a box around each one of our individual cells
we see two lines between each individual cell instead of one.
And so CSS found a way to get around this just an additional property
that you wouldn't know about unless you looked it up or had used it previously.
But [INAUDIBLE] additional CSS property called border collapse.
And if I had border collapse collapse to this styling of this HTML page
and then refresh it, now we see that those double borders go away.
We just have just the borders we want.
And if we didn't know that border collapse exist as a CSS tag
it would be very easy to look up.
You could just Google CSS property for removing double borders in a table.
And you'll likely find someone online who has said,
use border collapse:collapse and you can then use those CSS properties
in your own web design as well.
Now we might want to add some color to this as well.
You might want the headings of our table to be in a slightly different color.
So I might say for the table headers, let's
say we want the background color to be light gray, for instance.
And we refresh that and now the background for our table headers
is light gray.
And maybe you want to add some spacing.
Recall that there are two ways that we've
added spacing thus far in this course where
margins are around the outside of the box
and paddings on the inside of the box.
Right now I get the feeling that these cells are a little bit
cramped, that there's not a whole lot of space inside those boxes.
So maybe I want to add more space there.
So maybe for each of my table header cells and table data cells,
I want to say padding five pixels, just to add five pixels of padding
on the inside of my individual cells.
And now it looks something like this.
Looks a little bit cleaner, a little more room for the cells
to breathe because I've added some padding in there
just by adding these additional CSS properties.
I can additionally add changes to the size of this.
Maybe I want the table to be wider.
I can say make the with 500 pixels, for instance, and now it's 500 pixels wide.
But as someone mentioned earlier before, this
might not be great because now if I shrink down this page
now I've sort of lost information.
I can scroll over to the other side, but the table doesn't respond with me.
So I can instead say something like, what width?
Let's make it 50%.
So the width of the table takes up 50% of the view
of the entire width of the window.
And now as I shrink it down or make it larger
you'll notice that my web browser knows automatically
we need to add new lines to the table headers
in order to make room for all the data.
The web browser takes care of all of that.
I just need to tell it, here's how I want the data to render,
here are the specific style properties that I want to add to the HTML page.
And the result is this.
And finally, one thing I might want to do
is say, for all the table data let's align it centered.
And what we see now is we have a table that
looks a whole lot nicer than the table we had just a couple of moments ago
when we didn't have any of the CSS at all
and it was just all the tech sort of on one side without any borders
or centering or styling added to that.
So using just a couple lines of CSS, we can
start to take the contents of our pages and make
them a whole lot more responsive.
A couple final points to take a look at.
Any questions about this so far before we move on though?
Yeah.
AUDIENCE: [INAUDIBLE]
BRIAN YU: Yep.
AUDIENCE: [INAUDIBLE]
BRIAN YU: Great question.
So the question is, there are so many properties out there.
I've shown you a whole bunch today, but there
are far more that I haven't even managed to touch on
just because we don't have enough time.
How do you know which one to use to make a certain thing happen?
Oftentimes, the best way to do this is to look for documentation online.
If you look up CSS property documentation
you'll often find lists that just show you all of the different CSS properties
that you can apply to style a particular element on the page.
And you can use those.
Or likewise, if you're looking for something very specific,
you want to know how do you get something to happen?
Maybe I didn't know about collapsing those borders before,
I can just perform a Google search and look for CSS table,
combine borders of cells.
I don't quite know what I'm looking for, but I
know approximately what I'm asking for.
And if I look around carefully enough I'll notice that in the very first
result it tells me I can use that border collapse:collapse property in order
to make that happen.
So even if I didn't know how to do that particular thing
or didn't know how to do some other particular styling,
this is all readily available information
that you can look up because others have likely walked that trail before,
tried to solve the same problems and are likely have a way to use CSS in order
to make the styling look the way that you want it to ultimately look.
So great question.
OK.
One more example just to quickly show you.
What we have here are divs and spans.
So we've seen divs before in a little bit of detail, where the div is just
a division of my web page.
That's just going to be some section of the web page, some vertical section
of my web page.
And a span as we see here, is really just the section of my web page
that might be in the middle of some text.
They don't really have the same kind of meaning the way that an image
tag is an image and a list tag creates a list and a table tag creates a table.
The divs and span tags really don't do anything at all,
but they allow us to label different parts of our page.
I can say div and then give this an id, where an id is just
an attribute that uniquely identifies a section of my web page via a name
that I give it.
So I can say div id equals top, where top is just
a name that I picked to say, you know what, this is going
to be the top section of my web page.
And I'm going to put it in a div just so that I can name it,
so that I can name it top to mean this is the top of my web page.
And likewise here, div equals middle.
I picked the name middle as the name for this section of the web page.
And then div id bottom just means I have a section here
and I'm naming it bottom.
And I can give it a name by using this id attribute.
Then these spans here.
Why am I using those?
Well, I have this additional attribute called class.
Class is an attribute that lets me give names to elements as well,
but it lets me give names to a certain type of element.
So with id's.
When I have an id on an HTML element that id needs to be unique.
There can only be one HTML element in my web page that has an id of top,
only one that has an id of middle, and only one that has an id of bottom.
But I can give many things, as many as I want the same class.
And so here I'm saying, I'm going to call this class name.
And that way if I want to I can refer to all
of the different spans who have classes name and style them
in a particular way.
And you'll see what I mean by this in just a moment if it's confusing.
But right now we have three divs.
This is the top of my web page, this is the middle, this is the bottom.
Where top, middle, and bottom are inside of these spans
who have a class value of name.
So what can we do with that?
Why are we labeling things with top, middle, bottom name?
Well, if we take a look at the styling up here,
this is the contents of our style tag.
We have this pound sign.
And the pound sign in CSS is short for id.
What this is here saying is get me the thing whose id is top
and style it in a particular way.
In this case, style it with a font size of 36 points.
Here, take the thing that has id of middle and style
it with a font size of 24 points.
And likewise, take the thing that has id bottom and style
it with a font size of 12 points.
And before I wouldn't have had a way to distinguish the styling between three
different divs, because if I had said div style that is 24 point text
it would have applied to all three of my divs,
but if I only want it to apply to one of them an easy way to do that
is to uniquely identify it.
This is the top div and then say, OK, get the thing whose id is top,
here's how I want you to style that thing.
Likewise down here, if the pound sign means id the dot sign in CSS
means class.
So dot name means take anything whose class is name and style
it in this particular way.
In this case, make the font weight bold.
So now if I open up divspend.html, this is the contents that I see.
I had three divs and you can sort of see them here
even though they're not laid out.
This was my top, this was my middle, this was my bottom.
And because I said get the thing with id top
and make it the biggest in font size, make the middle one somewhere
in between, and the bottom of the web page
the smallest font size at just 12 points,
then they were able to render using the correct fonts
even though that they're all div tags.
And these names, top, middle, and bottom,
they're all bolded because they were inside
of spans that had a class of name.
And I said take all of the things that have a class of name and style
them with a font weight of bold.
Take a look at that one more time in case
it was confusing now that you've seen what this web page actually looks like.
Inside the body we have these three divs.
And these id's never show up in the contents of the HTML.
These names are only present inside the HTML code and not
when it gets rendered in the browser.
But I'm giving the divs these names such that later on in my style
tags I can go in and style them however I want them to,
by giving them a particular font size, for example, in order
to result in them rendering the way that I want them to be rendered.
And likewise, the same for when we have individual names.
So that's a brief introduction to CSS.
Next week we'll dive in even further into HTML and CSS.
But any questions about the CSS that we've
seen so far in terms of how to go about styling our web pages?
Yes.
AUDIENCE: [INAUDIBLE] question.
A number of the things that you did in the HTML code
you could do in a Wysiwyg editor where you
can see what you're doing more readily.
And then Microsoft Word generates HTML code for you, right?
BRIAN YU: Great question.
AUDIENCE: Under what circumstances do you want-- in practice, how are people
really generating their HTML code?
And under what circumstances do you want to be down in the weeds
writing in HTML?
BRIAN YU: Fantastic question.
So the question was, nowadays there are all these Wysiwyg editors where
I can just click a bold button and make text bold or click a color box
and change the color to whatever I want without needing to know hex values
and class names and id's and all that, so why
would I ever want to actually use this stuff, or in what situations would
this actually come up?
And the answer is that oftentimes a lot of the basics
will already be done for you.
Next week we'll start to dive into a CSS framework called bootstrap
where a lot of the CSS to make web sites look nice is already written for you
and you can just use it and make your website look a little bit better.
But you'll want to use HTML and CSS when it's
helpful for making very specific adjustments to your web page
in order to make them look a particular way.
And also, once we start dealing with dynamic web pages.
So far all of the web pages we've created
just show whatever content I want them to show.
I type in the text that I want to appear on the page and I open up the page
and it shows that text, but most modern websites aren't like that.
I open up Facebook or Twitter and it's not like some Facebook or Twitter
engineer has written all of the posts and tweets I'm going to see in an HTML
page and shows that to me.
It's that some server somewhere is figuring out what tweets
and what Facebook post to show me.
It's generating HTML and CSS and it's displaying that information to me.
And that process of generating custom, dynamic HTML
that gets displayed to the user based on different things
is something we'll explore later in the course.
But it's a situation in which we'll really
need to start to leverage some of the tools in HTML and CSS
in order to control when we're dynamically creating content.
How does that content look?
And those are situations in which we might
want to have a little more formal control over the CSS and the HTML
that we use inside of the page.
But great question.
Other things?
Yeah.
AUDIENCE: I just want to know the difference between id and class.
For example, can I use the id attribute with span tag?
BRIAN YU: Great question.
So the question is, when you use id in class
can you use the id with a span tag instead of a div?
Yes, absolutely.
You can use id's in class attributes on any HTML element.
So I could have put a class on the div.
I could have put an id on the span.
id and class are just two different ways of identifying HTML elements in a style
sheet, for instance, or using JavaScript as we'll soon see later.
The only difference is that an id must be unique.
So there can only be one HTML element called top, only one called middle,
and only one called bottom, but there can be as many things
as I want that have a class of a name, for example.
And so generally speaking, if you want to style one thing
in just one part of the web page you use an id,
but if you want to style a bunch of different things you'll use a class.
So if we think back to Twitter, for example, maybe
your profile picture that shows up in the upper right hand
corner of the screen, maybe there's an id
attached to that that's like profile picture because I only have one
and I want to style it a particular way.
But for tweets that are showing up in my tweet feed on Twitter,
those might have a class because there are a whole bunch.
Dozens and dozens of different tweets that are all one style
basically the same way.
And so by giving them a class and say, you
know what, style anything that has a class of tweet using these rules,
then anything that is a tweet will be styled in that same manner.
AUDIENCE: So the id and class actually cannot be used in the same,
for example, div [INAUDIBLE]?
BRIAN YU: The question is, can id's and classes be used in the same element?
Yes, they absolutely can be.
If I wanted to, I could put class equals name up in this top div, for instance.
And what that would do is because it has a class of name,
when I refresh this, this whole top div is now bold
because if we just follow the rules that I gave it, I told my website,
anything that has a class of name make its font weight bold.
And then down here I said this div has a class of name,
so the entire thing is going to render as bold.
So you can give anything the class of name that you want.
Not just the spans, although in this example, we only gave it to the spans.
Great question though.
AUDIENCE: Question.
BRIAN YU: Yes.
Question?
AUDIENCE: What happens if there are conflicting
sizes of same element [INAUDIBLE]?
BRIAN YU: Great question.
Question is, what happens if there are conflicts, in terms of what happens?
And ultimately, we have to resolve those conflicts somehow
by picking one or the other.
And generally speaking, CSS will default to picking the more specific thing.
So if I said I want the top to render with a color of red
and I want the name to render with a color of blue, for instance,
technically because the top is supposed to render as red
this whole text would theoretically render as red.
But because I said name renders as blue, then when I refresh this,
even though top is still inside of that text that should all be red
because the name is more local to it, because it's part of that span that's
deeper within the tree that [INAUDIBLE] that we saw before than the div is then
top is going to show up as blue instead of red.
Great questions.
All right.
So we've seen a little bit of HTML and CSS,
but thus far our web sites have only ever existed sort of locally
on our own computers.
I've been opening up these web pages in Chrome
just by going to a particular file on my computer.
And you can certainly do that on your own computer
as well just by opening up HTML files and seeing
how a web browser renders them.
But ultimately, that's not very useful if I want to take my web page
and deploy it to the internet, for instance, for anyone
to be able to look at.
So how may I go about doing that?
To use that there are a number of different ways
to deploy web pages to the internet, but one common way, or one way
that we can use in this class using only the stuff we know so far
is something called GitHub Pages.
And GitHub Pages is a feature of GitHub which effectively
lets you take a GitHub repository and deploy it to the internet
so that people online can look at the HTML contents of that web page.
And so let's try an example of that right now.
If I go back to this GitHub repository that we
saw way back at the beginning of lecture this is the lecture zero repository
that inside of it has a hello.html page, that's got hello, world, hello, again,
hello, hello, hello.
I would like to deploy that to the internet.
And the easiest way to do this from GitHub
is using GitHub Pages by doing the following.
On the right hand side I'll go to Settings,
I'll scroll down to GitHub Pages.
GitHub Pages is designed to host your personal organization or project
pages from a GitHub repository.
And I'm going to tell GitHub Pages, you know what, deploy
to the internet from my master branch.
The master branch is just the default branch
that we've used on our GitHub repository.
We haven't yet gone into creating multiple branches,
but we'll get to that soon.
But I'll go ahead and click Save here.
And what that's going to do is enable GitHub Pages
on this particular repository and deploy this code to the internet
so that anyone online could theoretically
go and see the hello.html file that I created before.
So if I scroll down to GitHub Pages, it says your site is now
published at this link.
So if I go to this link and go to this link, /hello.html, it's student 50,
my GitHub username. github.io slash the name of the repository, in this case,
lecture zero /hello.html.
It can sometimes take some time, but this time it's already done.
What you see now is a URL that you can go to right now if you'd like.
You can go to student50.github.io/ lecturezero/hello.html,
and what you will see is a web page with the title of my web page and you'll see
the contents of hello, world, hello, again, hello, hello, hello.
And that is now deployed to the internet.
We've deployed our first website to the internet all just using GitHub Pages.
And the beauty of this is now if ever we make changes
to this repository to the way that it works
or update the code by making pushes to it,
we will automatically update GitHub Pages.
It will reflect the latest version of those changes.
So we can add CSS to these web pages, we can add new content to the HTML,
we can add different HTML files, and it will all deploy to a URL
that anyone on the internet can then visit.
And so that's GitHub Pages.
And that's something that we'll begin to explore in project zero.
Project zero, which will be released later today
is going to be an opportunity for you to start using the stuff
that we've talked about today.
HTML and CSS and Git in order to create a web page of your own
on a topic of your choosing and then deploy that to the internet for anyone
to see ultimately using GitHub Pages by combining all of these tools.
Questions about GitHub Pages or HTML or CSS or things we've seen?
AUDIENCE: Does GitHub Pages render the CSS and JavaScript, for example,
if you go visit the HTML page?
BRIAN YU: Great question.
So the question is, will GitHub Pages render a CSS and JavaScript
once we get there?
Yes, GitHub Pages will allow us to do CSS and JavaScript,
though it's not going to do everything for us.
We'll soon find ourselves within a couple
of weeks finding that there are things we want to do with our websites
that GitHub Pages just isn't quite powerful enough to do.
And then we'll want to transition using other tools.
And that's what we'll stuck getting into Flask and other web development
services that will allow us to build more dynamic, more
interactive websites that are a little more powerful than just web pages that
display the contents of what we've already shown.
But next week we'll dive a little more into Git and HTML
and CSS doing some more advanced things with figuring out
how to dynamically generate styling for our web sites
and going into some of the more advanced features of HTML5.
But for now, that's it for web programming with Python and JavaScript.
Thank you all so much and we'll stick around a bit for questions.