Framer Complete Course 2025
By Average Design Dude
Summary
Topics Covered
- Framer Beats Figma for Web Design
- Layouts Trump Absolute Positioning
- Templates Reuse Navbars Across Pages
- CMS Eliminates Manual Project Pages
- Appear Effects Transform Static Sites
Full Transcript
Framer is the new no code web design king. There, I said it. I've tried Figma
king. There, I said it. I've tried Figma sites. I've tried Web Flow. I've tried
sites. I've tried Web Flow. I've tried
Vick Studio. Framer is just a better web design tool. At least right now. If you
design tool. At least right now. If you
don't know what Framer is, here's a simplified explanation. Framer is like
simplified explanation. Framer is like Figma but for web design where you can design beautiful animated websites without writing a single line of code.
But unlike Figma, it's not just design.
It's the real deal. It's a published website with a live URL. But what makes Framer so powerful is that they have made making these stunning websites worth thousands of dollars. So simple
that even you can start making them right away. And trust me when I say that
right away. And trust me when I say that you should definitely learn Framer.
People are making crazy tons of money just selling framer templates. Even I've
created a portfolio template called Esteemed. It's the perfect portfolio
Esteemed. It's the perfect portfolio template for creatives. Look at those animations. It's such a beautiful and
animations. It's such a beautiful and still a very practical portfolio website and it also comes with light and dark mode. Currently, I'm offering 25% off
mode. Currently, I'm offering 25% off discount to my subscribers. So, if you want that discount, link is in the description. By the way, I'm using this
description. By the way, I'm using this template for my own portfolio and anybody who sees this is impressed. In
this video, we are going to learn everything about Framer from scratch.
Remember, this is a premium course, but now I've just made it free for all because I feel like I'm a teacher and charging money from my students who are just trying to learn from me. It just
feels greedy. So, I hope you learned something from it. As a show of love, you can subscribe to my channel. And if
you want to support me for creating these free courses, you can join my YouTube channel membership. Now, let's
dive in. I believe in learning with an example. So, we will be making this
example. So, we will be making this website completely from scratch. And
yes, this will include all these fancy animations and effects. Here are the topics that we will go through while we make this website. Read them through to know what to expect from this course.
Now, before we start, some important notes. I've included a resource zip file
notes. I've included a resource zip file in the description. It includes some images, logos, and style guide that I will be using during this course. So,
you can get those from the link and follow along. If you want the final file
follow along. If you want the final file of this completed website design, it is also available for a very affordable price in the link in the description. I
have made it paid so people actually go through the course and learn something instead of just copying the final design. Now, let's dive in. To get
design. Now, let's dive in. To get
access to Framer, go to framer.com. You
can learn all about Framer here. You can
also check out Framer marketplace where they have many plugins and templates to choose from. In the pricing tab, you can
choose from. In the pricing tab, you can check out different plans that Trimmer has to offer. You can explore different plans and compare their features. On
pricing, you won't see the free plan by the time of this video is being recorded, but if you scroll down to the FAQ section, you will see that they do have a free plan. And you can see that
it has a lot to offer in the free plan.
If you're just starting out, you can get started with almost all the features with free plan and publish the website to a subdomain URL, for example, your
website.framer. framer. But if you want
website.framer. framer. But if you want a custom domain, then it is included in the paid plans. Anyways, click sign up to register for free. I'm going to continue with my Google account. It's
pretty straightforward. After you
register and on board, you will land on this page. Framer is available in the
this page. Framer is available in the browser, but they do also have a desktop app for both Windows and Mac. We can
work on the browser, but some of the features are missing on the web version.
So, let's download the application. To
download the application, let's go back to frameware.com and scroll down all the way to the bottom. Here you have the option for desktop apps. In here, you can download the app for Windows or Mac,
whichever you want. I have already downloaded the Framer app for Mac. So,
let's switch to that app. I have already logged in and you can see it is exactly like how it was in the browser. This
here is the framer dashboard area. All
your projects and websites will live here. You have a few account options
here. You have a few account options here and you can organize your projects in the folders here. But the main thing is this button right here which will start a new project. This will take you
to the framer editor area. I'm going to quickly give you a tour of the editor area before we jump in. So on top here you can click to change the project name
and it auto saves your work. On the top left here we are currently in the insert menu. In the insert menu, you have
menu. In the insert menu, you have options like wireframer, which is basically framer's AI to create wireframes. You can prompt it to
wireframes. You can prompt it to something and it will generate a wireframe page for that. You have
options to add pre-made sections which you can just drag in and modify, but we don't want to do that right now because we are trying to learn everything from scratch. So, let's get rid of it.
scratch. So, let's get rid of it.
Similarly, you have navigations and menu sections that you can just drop in. Here
we have some CMS options which we will explore later. And in the elements you
explore later. And in the elements you have options to add different kind of icons forms videos images carousels
and tickers and whatnot. We will explore all of them later in the video. On the
top menu, we have option to add different layouts. You have option to
different layouts. You have option to add text. In the vectors, you can choose
add text. In the vectors, you can choose from different shapes. And then we have the CMS option. All of these we will be learning during the video so don't worry. At the bottom here we have some
worry. At the bottom here we have some tools that we can use to interact with our canvas area. For example, we can use this select tool to select anything that is in the canvas area. This is where we
will design our website. This hand tool can be used to pan around the canvas area. By the way, a trick to use pan and
area. By the way, a trick to use pan and scroll quickly is that when you have this selection tool selected, you can hold the space bar on your keyboard and
just click and drag to pan around and hold the command key or control key on Windows and then using mouse wheel up or mouse wheel down to zoom in and zoom
out. Or you can also use your trackpad
out. Or you can also use your trackpad as well. By the way, if zooming
as well. By the way, if zooming direction feels weird, you can go in here and in the preferences, turn on the reverse zoom direction. I know some people don't like inverted, but I'm used
to the inverted scroll. And this is another way you can zoom in and zoom out right from here. Now, up here, if we toggle off the insert menu, you will see a few tabs here. Pages, layers, and
assets. Pretty straightforward. In the
assets. Pretty straightforward. In the
pages, you have two options to create a web page or a design page. Design page
is very new feature in framer. I think
they just launched it last month. It is
basically just a blank canvas to experiment with your designs. This will
not be a part of your website design.
Our main pages however are going to be here in the pages section. You can
create new pages just like this. But we
will come to this later. And this is what is going to be part of your actual website. All right. Notice that when I
website. All right. Notice that when I make a selection there pops up a right panel. This here is the properties panel
panel. This here is the properties panel which will show different properties for selected object like positioning, colors and stuff. We will explore all about it
and stuff. We will explore all about it later in the video. Now, two last things before we start designing. This here is a light and dark theme toggle. Now, this
will change the theme of framer and it will also change the theme of your website design and I will show you how to create light and dark theme for your website in just a few minutes. For now,
let's keep it in the light mode. This
here is a plug-in section. Plugins are
basically third-party tools created to do stuff in framework that framework can't do natively. We will use some of these free plugins during this course.
Now, I think we are ready to start on our website. A website is basically made
our website. A website is basically made up of frames. Now, what are frames you might ask? Well, frames are like boxes.
might ask? Well, frames are like boxes.
All websites are made up of boxes within boxes within boxes. The outer box or the parent box is called the container and the inside box or the child box is
called an item or a content. Back in
Frameware, to make a frame, just go to the layout options right here and select frame or just use the shortcut key F on your keyboard. You have options to
your keyboard. You have options to create row and column layouts, but we will come to that later. Click and drag to draw a frame. Notice that this frame
is inside this desktop frame. Which
means now this frame is the content of the desktop container frame. Let's
create another frame inside this frame.
And let's change the fill color of this frame just so that we can differentiate.
Now this light gray frame is content of the dark gray container frame. Let me
just close this fill properties. And now
I want to draw another frame. Now I can of course draw a new frame or I can just select this one. right click and duplicate it right from here or use command D or control D on Windows to
duplicate it and just drag it over here.
Now this gray frame has two contents inside it. But if I draw another frame,
inside it. But if I draw another frame, press F on the keyboard and click and drag over here to draw the frame. See
now it is not part of the dark gray frame. It is basically now another child
frame. It is basically now another child of the desktop frame. So we have this kind of child and parent relation which is quite similar to Figma. Let's get rid of this frame. To delete a frame, just
select it and press delete on your keyboard. By the way, you can resize any
keyboard. By the way, you can resize any frame just like this and move it around.
Currently, this frame has an absolute position and a fixed width and height, which means that when we preview it, by the way, this is how you can preview or click over this play button to preview a
specific breakpoint. This looks great,
specific breakpoint. This looks great, but when I resize the preview, we can see that it stays fixed in the place and the width and height doesn't change. But
now if I go back and change the fixed width to relative, now I can set a percentage relative to the parent of this frame. So if I set it to 100% and
this frame. So if I set it to 100% and preview, it fits 100% of its parent size. Even if I resize the website
size. Even if I resize the website window, but what if I set it to 50%.
Well, now it is 50% of the frame, but I expected it to start from the left, not in the middle. Even when I preview it, it stays in the middle when I resize.
Why is that? That is because we have an absolute position. This absolute sets
absolute position. This absolute sets fixed distance from its parent frame.
For example, currently we have pinned it to only the top of its parent container.
To pin it to the left, we can just click on this line here and it will pin it to the left. And this value tells us how
the left. And this value tells us how much pixels away we need it from the pinned point. These dotted lines also
pinned point. These dotted lines also tell you that this is currently pinned to left and the top. So if I set it to zero for both left and right, it is going to be pinned to the top and the
left with no distance. Now when I preview it remains that 50% of the total parent frame, but it is pinned from the top and the left. But see what happens when I pin it to the right as well. The
relative width of this frame becomes fixed because when I say it is pinned to the right, which technically means that it will take the whole width of the parent frame which is equal to the 1200
pixels right now. Now when I preview it, it stays pinned to the left, top and right without any space. But what about the content frames of this container?
Well, they are dependent on their own parent, which is currently our dark gray frame. So if I select this light gray
frame. So if I select this light gray box, the width is fixed. We can change it to relative and 50%. Let's do it 50% for the other as well. Although now they
are both 50% of the dark frame in width, but their position is still overlapping.
Let me change the fill color so that we can differentiate. See the both frames
can differentiate. See the both frames are pinned to the left but have different left value. Let's set them both to zero. Now both of them are
aligned to the left. But we don't want that. We want them side by side taking
that. We want them side by side taking 50% of the dark gray box each. So for
one of the boxes, let's remove the left pin and add a right pin and set it to zero. And now we have the result that we
zero. And now we have the result that we wanted. Summarize to say you need a
wanted. Summarize to say you need a little bit of practice to understand absolute and relative positioning. But
the good news is that there is a much simpler way to align things and this is what you would be using 95% of the times. It's called layouts. Here we can
times. It's called layouts. Here we can see that we have the layout options when I select any frame. Now what are layouts? If you have used Figma before,
layouts? If you have used Figma before, layouts are exactly like auto layouts.
And if you know anything about CSS, they are equivalent to CSS flexbox or grids.
If you don't know anything about either of them, here's a simple explanation.
Say that you have a container frame and have some content inside it. If you add a layout to it, you can arrange them into stacks or a grid. Now these stacks or grids are basically layouts. Mostly
we are going to be using stacks. Now the
stacks can be vertical or horizontal.
The parent frame is called the container and the children are its content items. The space between the container and its items is called padding. The space
between the content items itself is called gap. Layer container can have
called gap. Layer container can have multiple contents in it as low as one.
Container can have fit content width which means that its width will depend on the width of its contents. But we can also have a fixed width of a container.
The content items on the other hand can have a fixed width, a fit content width or a filled container width. Fill
container means that it will take all the space available in the container. If
you have two items and both have fill container width, they will share that space equally. Finally, you can align
space equally. Finally, you can align items inside a layout stack using distribute and align properties. If the
stack is horizontal like this one, distribute property can be set to start, center, or end to align things on the x-axis. You also have some special
x-axis. You also have some special options like distribute space between which basically pushes each item to the other end. Distribute space evenly adds
other end. Distribute space evenly adds even space around all the items and space around puts equal space around the
each item. To align items on the y-axis
each item. To align items on the y-axis in a horizontal stack, we have the align property which can be set to top, center, and bottom just like so. You can
combine these properties to align something. For example, in the bottom
something. For example, in the bottom right corner, just like this. But
remember, these alignment rules are reversed for a vertical stack. In the
horizontal stack, distribute is responsible for aligning on the x-axis and align on the y-axis. But in a vertical stack, distribute is
responsible for aligning on the y-axis and align property on the x-axis.
Anyways, let's see how we can make layouts in framer. So, we have this normal frame here. We can add layout right from here. You can see that it has added a stack layout. You can have a
grid layout which we will use later in the video. The direction is set to
the video. The direction is set to horizontal. You can set it to vertical
horizontal. You can set it to vertical as well. These are the distribute and
as well. These are the distribute and the align properties that we talked about earlier. The gap controls the
about earlier. The gap controls the space between each item of the layout.
Let's add some padding to it and see nothing happens. The padding should add
nothing happens. The padding should add some space around the items. But it didn't work. Why is that? That's because
didn't work. Why is that? That's because
if we select one of the contract items, we can see that the position is relative and we have a width set to relative 50%.
Which is not exactly what we need. After
our layout, we can now choose it to fill the container like we discussed earlier.
And let's do it for the other item as well. Now both of these are filling the
well. Now both of these are filling the parent container width. And if we now change the padding, it will add some spacing around it. But see that it is only applying to the sides but not on the top and the bottom. That's because
we still have the height of these both set to fixed. Let's change that. By the
way, if you want to multi select things, you can do it through the layers panel while holding the shift key and selecting the layers you want or you just hold shift and directly click on the items that you want to multi select.
Let's change the height of both of them to fill. And now padding works on all
to fill. And now padding works on all sides. Now, what about the parent
sides. Now, what about the parent container? This has a fixed height and
container? This has a fixed height and width. And its contents have a fill
width. And its contents have a fill height and width. So it means that the children height is dependent on the container. If the height of the parent
container. If the height of the parent increases, so does the children. What if
I make the height of the children fixed and set the height of the parent to fit content? Now the height of the container
content? Now the height of the container is dependent on the children. If height
of the children changes, the parent height always fits its contents. So
that's what fit content means. Now let's
add another item in this container by just duplicating this frame. Now we have three items but see it's going off the main desktop frame and we can't see that. By the way to see things that are
that. By the way to see things that are going beyond the parent you can select the parent frame and set the overflow value to be visible just like this. But
we don't want that. We want to fill the desktop container and not go beyond it.
Let's try to fill this stack. But see
that fill option is disabled right now.
Let's try fixed and set it exactly the width of the main desktop frame. And for
the children, let's set them to fill.
But now if I preview, see it stays that fixed width. We wanted it to fill the
fixed width. We wanted it to fill the container. But we saw earlier that the
container. But we saw earlier that the fill option was disabled. That is
because the parent of this frame is not yet a layout frame. So to enable that fill option, you need to select the parent frame and add a layout to it.
Let's keep this as a vertical stack. Now
if I set the content frame to fill the container and preview it. Now you can see that it is fully responsive. Now
that our desktop is also vertical stack, we have one horizontal stack inside it.
Let's duplicate this horizontal stack and see that now we have another content inside our vertical desktop stack. It
means that we can have layouts within layouts. Now let's see how alignment
layouts. Now let's see how alignment works for the items. To understand this, let's get rid of one of these items in the stack here. Currently, all the items in the stack are aligned in the center
vertically and horizontally. But let's
say that there was no gap in between them. And let's say instead of filling
them. And let's say instead of filling the container, they had a fixed width, which is pretty common where we have text on the left and a smaller image on the right. But I want them to push each
the right. But I want them to push each other on each side of the container. I
can increase the gap between them like this. But that is a fixed space that I'm
this. But that is a fixed space that I'm setting. They are not actually pushing
setting. They are not actually pushing each other away. To achieve that, we can set distribute to space between. And now
you can see that they are on each end of the container. And with this option
the container. And with this option here, we can control the alignment vertically. So if this container had a
vertically. So if this container had a fixed height, we can align it top, middle or bottom. This is exactly how I explained with that animation that we saw earlier. A website is no more than
saw earlier. A website is no more than just a stack within a stack and each stack is a section. By the way, one of the things that you must always do is set the height of the desktop container
to fit content so nothing goes beyond that. Now that we have learned the
that. Now that we have learned the basics of frames, layouts, and alignments, it's time we start designing a real website. I have this reference image of homepage that I designed
earlier. I'm going to copy that in here.
earlier. I'm going to copy that in here.
You can find this reference image in this resource folder linked below in the description. We are going to try to
description. We are going to try to recreate this design exactly in framer.
It's a beautiful design. We will make this design, make it responsive and add some other pages like contact project page and project detail page. And then
finally, we will add some interactions and beautiful animation effects to it.
Before we do that, this is always a best practice to define a style guide to keep everything consistent. I have already
everything consistent. I have already decided on a style guide. I want the colors and the typography and the images that I'm going to use. These assets are also available in the resource folder
linked below. I'm just going to paste
linked below. I'm just going to paste them in in the design file here. It's
quite straightforward. These are the colors that we are going to use. These
are the fonts and type scales that we're going to use. And these are the pages and sections that we want to design. And
here are some logos and images that we will be using throughout the website design. Let's start with defining our
design. Let's start with defining our colors. This is a best practice that we
colors. This is a best practice that we define our colors as styles so that we can reuse them across the website. And
plus this is the way you can create light and dark modes for frame website.
I will show that in just a minute. To
define the styles go to the assets tab here and in here click on the styles and here you can choose the style that you want to create. Let's select color
style. Now you can name your color. And
style. Now you can name your color. And
this tab here you can define your light and dark variant of the color. So I have already mapped out all the light and dark mode colors. For example, for my text primary, in the light mode, I can
see that this is the black color. Let's
name it text primary. And in the dark mode, let's pick this white L for the dark mode. Now, when I switch to dark
dark mode. Now, when I switch to dark mode, see the text color changes to white. Let me actually add some text to
white. Let me actually add some text to show what I mean. By the way, to add a text, click this option here or press T on your keyboard and just click anywhere to start typing. Let me increase the
font a bit so we can see it clearly. All
right. Now in the fill color I can pick a solid color. Add a gradient like radial or conic gradient. For now let's just set solid. Here you can pick either
a fixed color or we can set it to a style that we have just created. As you
can see this is the text primary style that we just created. So let's set it to this one. Now if I change to light and
this one. Now if I change to light and dark mode it changes the color of the text based on the theme that we have selected. Just based on this principle,
selected. Just based on this principle, you can create dark mode for your website. Now, let's quickly add the rest
website. Now, let's quickly add the rest of the color styles. Let's add text secondary. For light, pick this gray
secondary. For light, pick this gray color. And for the dark, pick this
color. And for the dark, pick this lighter gray. Let's add another one. Set
lighter gray. Let's add another one. Set
it to this blue color here. This will be our text brand. By the way, we don't have to set a dark mode color for this one because it is the same color for both in light and dark themes. I'm going
to continue creating these color styles and fast forward.
[Music] For this surface primary 90% color, I
set this color for the light and set the opacity to 90%. Just like this. And
similarly for the dark, pick the corresponding dark color and set it to 90% as well.
[Music] All right. Now all our color styles are
All right. Now all our color styles are ready. We can see that they change in
ready. We can see that they change in light and dark mode accordingly. Now
it's time to create the text styles. I
have already decided I'm going to use this bald font for headings and for the rest of them I'm going to use interd display font. And these here are the
display font. And these here are the sizes that I want. To create the text styles again click the plus on the styles and in the text you can select the text type you want. Let's go with
heading one and click on it again to set its properties. For heading one we want
its properties. For heading one we want the font to be bald. Weight is regular which is fine. In the color I can now pick the default color. It can be overridden, but it's always best to set
a default color. And that is why we created color styles first, so that we can now pick our text primary color as the default heading one text color. You
can play with other settings here, but most important one is to set the font size. So for heading one, our font size
size. So for heading one, our font size will be 120px. Now in web, it's always best practice to use rem.
So, if you select rim from the drop-down, framer will automatically convert your pixel values to rim values.
You can change the line height, paragraph height if you want, but I'm going to leave it as is. Now, let's do another one. This is going to be heading
another one. This is going to be heading two. Again, pick the font. Set the
two. Again, pick the font. Set the
default color as text primary. And size
for this one is going to be 64px. And
now, we can convert it to REM. Next, we
have adding three, which is enter display font. Pick the default color.
display font. Pick the default color.
I'm going to disable the open type for this one. You can leave it enabled, but
this one. You can leave it enabled, but I don't want open type in my design.
Finally, set the font size and convert it to REM. These two I'm going to use as body fonts. So, this time I'm going to
body fonts. So, this time I'm going to pick paragraph. Again, same deal. Select
pick paragraph. Again, same deal. Select
the font, set the default color, and pick the font size and convert it to rim. Let's create another paragraph
rim. Let's create another paragraph style. Let's rename this. By the way, to
style. Let's rename this. By the way, to rename, right click and just click rename and set it as something like body bold. Pick the font. Wait for this one
bold. Pick the font. Wait for this one is going to be semi-bold. Pick the
default color. Disable open type and set the font size. And that's it. We have
all our text styles also ready. Let's
switch to light mode and go back to our homepage and start designing. First
thing that we need is a nav bar at the top. Now I can go insert and pick
top. Now I can go insert and pick already made navbar and modify it. But
we are here to learn from scratch. So
this desktop is already a stack. I'm
going to draw a frame in it. Press F on the keyboard. Click and drag. Let's give
the keyboard. Click and drag. Let's give
it a fixed height of 90px. To give it a color, let's go to the styles properties and let's give it a color. Now again, I can pick a fixed color, but we don't want to do that. I'm going to give it
the surface primary color style that we just created earlier. For the width, I'm going to set it to fill the container.
Remember, we have this fill option because our desktop main frame is a stack. Now, this is going to be our
stack. Now, this is going to be our navbar. It is also going to contain a
navbar. It is also going to contain a logo and couple of navigational links.
So, it means that it can be a horizontal stack. So, let's add a stack layout to
stack. So, let's add a stack layout to it just like this. Now, let's go to the design page where we put our assets and let's copy this logo. Command C or control C on Windows. And let's go back.
Select this tag and command V on Mac or controlV on Windows to paste it in. See
that it's in this stack. Now, this is an SVG logo. It's still too big. Let's
SVG logo. It's still too big. Let's
change the size. Let's turn on the aspect ratio right from here. So, it
scales down proportionally and reduce the size to something like maybe 200.
Now, let's add the navlink text. Type in
the text just like this. Now, see, I can pick the font and the font size right from here in the styles properties. But
we have already created few text styles.
So let's apply from those styles that we just created. I'm going to pick this
just created. I'm going to pick this body style for the nan link. It has
applied the font font size and the default color we set in the text styles earlier. But we can override the color
earlier. But we can override the color right from here if we want. But let's
keep the default for now. Notice that
this text layer is not part of the navbar stack. We don't want this. So
navbar stack. We don't want this. So
let's put them inside here. You see our navbar have this logo and one text inside it. Let's rename these layers so
inside it. Let's rename these layers so that we can differentiate them easily.
Let's duplicate this text once more.
Command D or control D on Windows to duplicate. Change the text. Now we have
duplicate. Change the text. Now we have another nav link. We want the logo on the left and the links on the right. To
achieve this, we can put these links together in a stack. The width can be fit the content. And let's add some gap to this stack. Now let's select the
navbar stack and align content at each end by using the same distribute to space between property. Let's add some padding to it. And let's preview.
Looking beautiful. You might not notice it but there is a problem. Actually not
a problem but a preference. What happens
if you open this website in a very big monitor or a wide screen? the logo will be very far left and the links will be very far right and that is a very bad UX
practice. Look at the Apple website. See
practice. Look at the Apple website. See
that their nav bar does not go beyond a certain width no matter how wide screen you've got. To achieve this maximum
you've got. To achieve this maximum width limit, what we can do is inside the nav bar stack wrap these contents inside another horizontal stack just like this. And let's call this one fixed
like this. And let's call this one fixed container. This container's width will
container. This container's width will fill the parent container. that we can add a maximum width right from here and set it to a fixed value. For example,
1200 px. That value depends on how much width limit you want. Let's change the distribute to space between for this one as well. Now, we don't want that space
as well. Now, we don't want that space between in the parent navbar anymore.
So, we can set it to distribute center.
So, it always keeps the fixed container in the middle. Now, when we resize it, look at that. The content tries to fill the container but stops at 1200 px. And
because we set the navbar distribute center, it always keeps everything in the middle. But you might ask, why
the middle. But you might ask, why didn't we just add max width to the navbar stack? And why did we create
navbar stack? And why did we create another stack inside it? Well, the
reason is that we want the content to be fixed, not the background of the navbar.
Now, let's add some left and right padding to the fixed container for a much cleaner look. All right. Now, what
we want is that we want our website to be responsive. In Framer, you can add
be responsive. In Framer, you can add break points for different screen sizes.
So, what are break points really? Think
of them as points where your design switches style depending on the screen size. Basically, you're telling framer,
size. Basically, you're telling framer, hey, when the screen is this wide, show the design like this. But when the screen shrinks, change it so it still looks nice. Let me give you an example.
looks nice. Let me give you an example.
On desktop, you can show a big full navigation bar with all the menu items spread out. Perfect, right? But when you
spread out. Perfect, right? But when you shrink it down to the tablet, suddenly there isn't room enough to fit everything. So maybe you hide a couple
everything. So maybe you hide a couple of less important links or make the font size smaller, but on the mobile there is no way you can fit the whole navbar. So
instead, you switch to that little hamburger menu. And when you click on
hamburger menu. And when you click on it, it expands into the full menu.
That's the whole idea of breakpoints.
You adapt your designs for different screen sizes so it always looks clean and usable. Now let's see how
and usable. Now let's see how breakpoints actually work in Frameware.
We already have a desktop breakpoint with 1200 px value. To add a break point just click this plus button and select tablet. You can set your custom value
tablet. You can set your custom value but 8 10px default work most of the time. And now this is the tablet view of
time. And now this is the tablet view of our design. And similarly we can add a
our design. And similarly we can add a phone breakpoint. You can clearly start
phone breakpoint. You can clearly start seeing that the navbar is looking fine in the desktop and the tablet view but for the phone it just doesn't work.
Before we fix this I want to talk about something else here. This nav bar is going to be repeated on all the pages.
or homepage or contact page or project page. So whenever we have something that
page. So whenever we have something that is going to be repeated, it's always best to make it into a component.
Component is basically a reusable element. So to convert it into a
element. So to convert it into a component, right click on the nav bar in the main desktop frame here. By the way, when we have different breakpoints, our desktop is our primary frame. Whatever
you do on the desktop breakpoint also applies to the other break points unless you override any changes in other breakpoints. More on that later. For
breakpoints. More on that later. For
now, let's make it into a component.
Now, because we had break point set, so it already created three variants for us. To add a new variant, select any
us. To add a new variant, select any variant, and you can either create a variant from this option right on the right here, or on the bottom access, you can also create state variants like
hover and press state. For navbar, we don't need state variants, but if this was a button, then we might have a hover and pressed variant. Now that we have three variants each for different breakpoint, we can modify them each
separately. I'm happy with the desktop
separately. I'm happy with the desktop variant in the tablet variant. Maybe the
padding can be reduced around it just like this. We are currently in the
like this. We are currently in the napper component page. To go back, you can just click over here to go back to the homepage. Now, if we preview this,
the homepage. Now, if we preview this, notice how if we go above 1200 px in the width, it shows our desktop view. And as
soon as we drop below 1200 px, it changes it to the tablet view. And you
can clearly see that the padding of the napper also changes for the tablet view.
In the phone view, it is still looking bad. And let's fix this. In the layers
bad. And let's fix this. In the layers panel, you can see that this component is shown by the star icon. To edit a component, either double click on it or right click on it and you will see the
edit option. Other way to do is to go
edit option. Other way to do is to go into the assets and in the component section, you can see that we have our naporg component. You can open it right
naporg component. You can open it right from here as well. All the components that you make will be listed here.
Anyways, let's go to the phone variant.
First, let's get rid of this extra padding. Make sure to select the fixed
padding. Make sure to select the fixed container stack where we applied the 64px padding in the desktop frame. But
you can see that it is still not looking so good. In the phone variant, I want a
so good. In the phone variant, I want a hamburger menu which can be collapsed to show the nav links. So to bring that icon, you can either bring in your own icon, but framer has different icon
libraries available in the insert menu.
Here you can choose from different icon libraries. I quite like the feather
libraries. I quite like the feather icon. So let's drop it in. Let's
icon. So let's drop it in. Let's
increase the size of this icon a bit.
And right from here you can choose the icon that you want. Let's find the menu icon and change the color to text primary. Now I want to drop this in
primary. Now I want to drop this in here. But framework components work
here. But framework components work slightly different than Figma components. All the variants of the
components. All the variants of the components will have the same structure and the same amount of items. But you can override some properties in one variant or the other. Let me show you
what I mean. Let's drag this icon and put it inside our desktop variant here.
Just make sure to put it inside the fixed container stack. Now we have three items in this fixed container. Logo, the
menu icon, and another stack of links.
But notice this also adds it in exactly the same place in all the variants. See
what happens if I hide this menu. To
hide it, you can toggle off the visible property right from here. It becomes
hidden in all variants because I told you earlier that whatever you do in the primary variant, it applies to the other variants as well. You can see that this variant still has the menu item hidden
away. But now let's turn on the
away. But now let's turn on the visibility on the phone variant only.
What it does is that it overrides the visibility property just for the phone variant. In the other variants, it is
variant. In the other variants, it is still hidden. Now in the phone I can
still hidden. Now in the phone I can just hide the link stack because this is the look we want to go for. Now let's go back to the home and preview. This is
the desktop view and this is the tablet view. And now this is how it looks on a
view. And now this is how it looks on a phone. But this is not enough because
phone. But this is not enough because what I want is when I click on this menu, it should open a panel to show the menu links. To achieve this, let's go
menu links. To achieve this, let's go back to the component. With this phone variant selected, I can add another variant right next to it. Just like
this, we have another variant. Now,
let's rename it by double clicking on it. And let's call this one phone
it. And let's call this one phone opened. Now, this variant will show how
opened. Now, this variant will show how an opened menu looks like. Let's try
something here. As I need some space for the links, let's increase the height of this phone opened variant. Just like
this. H. But see, I don't want it to be aligned in the middle. I want the logo and the menu on top and the links will be below that. So we can override the
distribute property right from here from center to start. Now in this variant I want the menus to show. So I can just turn on the visibility of the link stack. This is not the look I want
stack. This is not the look I want still. I want it below the logo and this
still. I want it below the logo and this hamburger menu. So I can try to set the
hamburger menu. So I can try to set the direction of this fixed container to vertical. But it just stacked all the
vertical. But it just stacked all the contents vertically. I want the logo and
contents vertically. I want the logo and the menu to be in horizontal stack. What
I can do here is go back in the primary variant. Let's show the menu icon for a
variant. Let's show the menu icon for a second. Here I can wrap the logo and the
second. Here I can wrap the logo and the menu in the horizontal stack inside the fixed container. By the way, you can add
fixed container. By the way, you can add a stack right from here as well. Width
of this should fill the container and they should push each other on each end.
So let's change the distribute to space between. Let's rename the stack to logo
between. Let's rename the stack to logo plus mobile menu. Now I can hide the icon in the desktop menu again. And look
at that in the phone where we were showing the menu. This looks great now because we now have a horizontal stack of logo and the menu icon inside our fixed container. Now I can set the
fixed container. Now I can set the direction of the link stacks to vertical as well. Remember we are overriding
as well. Remember we are overriding these properties only for the phone opened variant. Now very important thing
opened variant. Now very important thing here. We don't exactly know what the
here. We don't exactly know what the height of the phone will be. Different
phones can have different heights. So to
fix this, we can set the height of the fixed container to view port. So it will take up the whole screen size regardless of the screen height. And for the parent
container, we can set it to fit the content just like this. The links are at the bottom right now because we have distribute space between for the fixed container which works perfectly for the desktop and the tablet variant. But for
the phone variant, we can change it to start. And now we can just add some gap
start. And now we can just add some gap between this. Now, when we have an
between this. Now, when we have an opened menu, the icon should also change to close. So, let's change the icon
to close. So, let's change the icon right from here to a close icon. Looking
great. Let's go back and try it out. But
see, when I click it, nothing still happens. Why? That's because we didn't
happens. Why? That's because we didn't actually add any interaction. To do
that, let's go back into the component.
What we want is that when I click on this menu button, the phone variant should change to this phone open variant. To add this interaction, we can
variant. To add this interaction, we can select the menu icon and try to add on click interaction. But we don't see any
click interaction. But we don't see any option to add the interaction. That's
because framer has a limitation that you can just only add interactions on the frames, not the shapes or the icons directly. So we need to wrap it inside a
directly. So we need to wrap it inside a frame. To do this, let's go back to our
frame. To do this, let's go back to our primary frame and show this icon for a moment. Right click and select add
moment. Right click and select add frame. This will add a frame around it
frame. This will add a frame around it and it will apply to all other variants.
We can set the width and the height of this wrapper frame to fit the content of the icon itself. And now with this frame selected, you can see that we have the option to add a link or an interaction.
We want to add a click interaction. We
will do it in the phone variant. We
don't want it to show on the desktop and tablet. So let's hide it right from
tablet. So let's hide it right from here. Make sure to hide the frame and
here. Make sure to hide the frame and not the icon only. Just like this. Let's
rename this tag as menu. You might want to show it again for the phone variants if it's hidden.
Now I can add interaction just like this. We want to create a new transition
this. We want to create a new transition because we want to transition from one variant to another variant. Here we can set the trigger of when this transition
happens. We want it to happen on click.
happens. We want it to happen on click.
Here we can add delay if we want. Here
you can set the transition cycle if you want. And most importantly, this is
want. And most importantly, this is where you select the variant you want to transition to. By the way, you can also
transition to. By the way, you can also add transition interaction by clicking and dragging this bolt icon and attaching it to the variant that you want to switch to. Now, when it's opened
and I click this closed icon, it should go back to the closed variant. So, I can add this interaction. Make sure to select the wrapper frame, not just the icon, and drag and connect it to this
variant. Now, let's go back and preview.
variant. Now, let's go back and preview.
Click this menu. And it does switch to the variant, but it is not showing those menu links. That is because our height
menu links. That is because our height is set to fixed 90px. Everything beyond
that cuts off. So let's change it to fit content. And now let's preview it again.
content. And now let's preview it again.
And now see it works beautifully. But
the animation is too jumpy and it cuts off the logo a bit. To change the transition animation, go back to the component, select this variant. And here
you can click to change the transition.
It is currently springy animation. You
can play with the settings for different styles of animations or you can just have an ease animation. Here you can either create your own basier curve which basically is a fancy way of saying how the animation starts and how the
animation slows or you can select from the presets right from here. Here you
can control the time of the transition.
And here you can see the preview of the transition. I think 0.6 seconds works
transition. I think 0.6 seconds works fine. Let's try it out. And now look, it
fine. Let's try it out. And now look, it is a beautiful smooth transition. I
promise we're almost done without our navigation. One thing we need to do to
navigation. One thing we need to do to improve UX is that we can make the nav links big in the phone variant. To
achieve this, we can actually change the font size on the phone variant for these links. But the thing is that we can have
links. But the thing is that we can have more nav links in the future. So it's
best to make a component of a nav link.
Remember we said that it's best to make component of anything that is going to be repeated. So let's right click on
be repeated. So let's right click on this text here and create a component.
Let's name this navl link. Now this is a component. I'm going to rename this
component. I'm going to rename this variant to the desktop variant. Let's
add another variant and call this one a mobile variant. And for the font size,
mobile variant. And for the font size, let's apply the heading three style. The
variant frame width and height is set to fix. Let's set it always to fit the
fix. Let's set it always to fit the content just like this. Now we have a component within a component. Let's go
back to our navar component right from here. And there it is. This is our
here. And there it is. This is our navling component. You can switch
navling component. You can switch between the variants of this component right from here. But what about the text? What if I wanted to change the
text? What if I wanted to change the text of this component? There is no way to change it right from here. I can go inside this component and change the text right from there. But the problem
is that it will stay whatever I set it to for wherever I use this component.
And the whole purpose of the component is reusability. So I should be able to
is reusability. So I should be able to change its text wherever I use the component for this. Framer has something called variables. Let me show you what I
called variables. Let me show you what I mean. Click on the property that you
mean. Click on the property that you want to make dynamic. So in our case, we want the content to be dynamic. We can
click on it right here. And I can either create a variable or add a fetch. Add a
fetch is if you want to bring in data from an external API. We don't want that. We want to just create a variable.
that. We want to just create a variable.
Here I can select if I want a plain text variable or formatted text. Formatted
text usually works best if this was a paragraph. But for us plain text is
paragraph. But for us plain text is fine. It will open up the variables
fine. It will open up the variables panel and it has already created a variable and set the default name to title. Let's change it to something like
title. Let's change it to something like navling text. And here you can set what
navling text. And here you can set what would be the default value. Let's keep
everything as is for now. This is great.
But before we check it, let's go up here. We have this link option here.
here. We have this link option here.
Here we can set a link to a specific page. When this text is clicked, it will
page. When this text is clicked, it will take you to that page. But the thing is that just like the text, it also needs to be dynamic. Different nav links can take you to different pages. So we can
click on it and create a variable for the link. You can check out all the
the link. You can check out all the variables of a component right from here. So far we have created two
here. So far we have created two variables for this component. You can
add more as well. While we are discussing links, framer also applies default link style to any text. If you
add a link to it, you can modify it right from here. You can set the color to your color style right from here. You
can also add hover style and say we just want on hover the color should change some other color like text secondary.
Now let's actually see why we did all this variable mapping in the navbar component. Now where we are using the
component. Now where we are using the nav link component. If you select this nav link component you can see that it has basically exposed those values here.
Now you can easily change the text or add the link and it will only apply for this specific component. For example,
let's duplicate this navlink component once more and get rid of this text contact because we don't need it anymore. Now we can just select the
anymore. Now we can just select the second component that we just duplicated and change the text for this component to contact. We will add links later. But
to contact. We will add links later. But
now we can see that component is completely dynamic. Notice that it has
completely dynamic. Notice that it has also updated this navling component for all variants because we changed it in the primary variant. It is cutting off because there is a fixed width or
height. So let's make it fit the content
height. So let's make it fit the content just like this. Now in the phone variant, I can select these components and change the variant to mobile. And
there you have it. So this means that you can use components to make responsive variants. Let's preview it.
responsive variants. Let's preview it.
It changes to that phone variant once we get to that phone breakpoint and click on it to open it. And these nan links are now bigger. And you can also see that on hover their color changes to
text secondary. They are not yet
text secondary. They are not yet clickable. They will be once we make our
clickable. They will be once we make our work and contact pages and link them to these. All right, the hard part is over.
these. All right, the hard part is over.
I took it slow because we were just learning the basics. Now I'm going to go a bit faster. Let's now design this hero section quickly. Add another text. Type
section quickly. Add another text. Type
in our text. Apply the heading one.
Override the color to text brand for this one. Just like this. Duplicate it
this one. Just like this. Duplicate it
using the shortcut key command D or control D on Windows. Change the text again. Let's remove the override for
again. Let's remove the override for this one to switch back to the text primary. I want this to be bit
primary. I want this to be bit transparent like this. So let's change the opacity to 0.8.
Currently we only have our desktop stack and it has three children in it. I can't
control individual gap between them. So
let's wrap both of these text into another stack. Let's rename the layer to
another stack. Let's rename the layer to hero section. I can set the height of
hero section. I can set the height of this hero section to view port so it always fill the whole screen. But for
our design choice, I'm going to fix it to 800 pixels. Now, let's set the gap to something like 64 pixels. Now, it's time to add this character in the design. I
have this image. Let's copy it and paste it in here in the hero section. But see,
we have a problem here. As this hero section is just a vertical stack, it puts it below the text. We actually want it over the text. For such scenarios where you want to break out of the stack
normal behavior, you can change the position type from relative to absolute.
Remember we talked about this earlier in the video. This image is now absolute to
the video. This image is now absolute to the hero section stack and it is pinned to the bottom of the stack. If I set it to zero, it will look something like this. Let's resize it a bit to achieve
this. Let's resize it a bit to achieve the look we want. We can move this up and down while keeping it pinned to the bottom. I think this looks nice. Let's
bottom. I think this looks nice. Let's
preview it. It's looking perfect. But
see, we want this fading style on the character. To do that, we can select
character. To do that, we can select this image and go to the styles properties. To add some extra styles,
properties. To add some extra styles, you can click on this plus icon next to the styles properties. Here you can pick from different kind of styles. But for
such fading style, let's choose mask.
This will add a linear gradient mask on top of it. You can adjust the mask just like this to achieve this fading style.
Now let's preview this. and it is looking amazing. But looking at the
looking amazing. But looking at the reference image, notice that one of the text is behind the character and the other is in front of it. So when we want to achieve something like this, we can
play around with the property called Zindex. So when you have this image
Zindex. So when you have this image position set to absolute, you will see a zindex property in the styles.
Currently, it is set to one. What we
want to do is increase the zindex of this text to greater than one. But see
we don't have zindex property in styles for this text. To add that you can click on this plus icon. Choose zindex. Now
you can increase the z-index to be greater than one which was set for the character. Remember it should be greater
character. Remember it should be greater than the zindex of the image always. Now
this is the look we wanted. Now let's
work on the next section which is going to be our client section. Let's add a text here quickly. Change the text.
Apply the text style.
In the design, I have the logos. Let's
bring those in and let's put them next to it right here. But we don't want them to be static, boring logos. We want them to be an infinite moving animation. For
that, we have a built-in component in Framer called ticker. To add a ticker, just go into the insert and in the interactive menu, you will find the ticker. Just drag it in. To add elements
ticker. Just drag it in. To add elements to the ticker, just drag from these dots and attach them to the item frames.
Let's add all of them like this. Let's
cut both of these layers and paste them in the desktop frame. Now, you don't want to delete these logo frames because they are being used in the ticker. So,
let's put them somewhere safe up here.
Let me just adjust the height of this ticker just like this. Let's select this text and the ticker and put them in a horizontal stack. Let's set the width of
horizontal stack. Let's set the width of this sticker to fill the container. And
here you can change the gap between the ticker elements. Let's change the width
ticker elements. Let's change the width of this text to fix so it is always in two lines. Let's rename this stack to
two lines. Let's rename this stack to client section. Let me just close all of
client section. Let me just close all of these layer sections so it's a bit tidier. And now preview this. See that
tidier. And now preview this. See that
the ticker is now playing. It's a bit too fast. You can play around with the
too fast. You can play around with the ticker settings right here. Let's reduce
the speed to maybe 50%. And now let's see. This is looking great. There are
see. This is looking great. There are
other settings of ticker that you can play with like direction of the ticker or you can make it slower on hover or even make it stop on hover. But we don't want that in our design. About the
padding, I want to give it the same padding as the header. So it aligns nicely with this logo. So let's add 64 padding around it. It is looking nice.
But see when I resize it, it does not stop to that 1200 px maximum width that we talked about when we were designing the navbar. Now what we can do is either
the navbar. Now what we can do is either add another stack wrapping around the items of this section. Let's call it fixed container and set it to maximum
width of 1200 pixels. Just like this.
Now when I preview it, it works beautifully. H actually I noticed that
beautifully. H actually I noticed that there seems to be some extra padding in the navbar. Let me just get rid of that.
the navbar. Let me just get rid of that.
All right. So, we have 64 padding in the inner wrapper. We don't need right and
inner wrapper. We don't need right and top padding on the main container. And
in the phone, let's add 20 right and left padding to this fixed container.
Now, it should align perfectly. By the
way, did you notice something? When we
scroll down the page, navigation also got scrolled and got lost. We always
want the navigation to stay on the top.
Well, in most cases, it's a simple fix.
We can just select this navar component and set the position from relative to fixed. Now, when we scroll, it stays
fixed. Now, when we scroll, it stays there. But our image is coming in front
there. But our image is coming in front of it. To fix this, we can increase the
of it. To fix this, we can increase the zindex of this fixed navbar to greater than the zindex of the image. Now, it
works beautifully. But there is a problem. Probably you can't see this but
problem. Probably you can't see this but there is a background to this navbar and it is not filling the whole website frame. So what we can do is try to set
frame. So what we can do is try to set it to fill but there is no fill property because it's not relative position anymore. It's a fixed width. And
anymore. It's a fixed width. And
remember we talked about pinning stuff.
So we can just pin it to left and right with zero value just like this. And now
it should work just as filling the container. You might not notice that
container. You might not notice that background color because it's a very light background and it might not show up on your monitor, but it's there, trust me. Let's move this character down
trust me. Let's move this character down a bit so it doesn't touch the navbar.
Now, we are going to make the rest of the sections. But before we do that, I
the sections. But before we do that, I want to tell you a trick. We want to align everything to a maximum of 1200 pixels width, just like we did in this client section. Well, let's say that we
client section. Well, let's say that we want another section. We could just duplicate this section just like this and it will align because we had that fixed container inside both of these
tags. But what if I have to change the
tags. But what if I have to change the max width from 1200 to something else?
Then it can be a bit tedious to change it everywhere. So here's the trick. If
it everywhere. So here's the trick. If
the background of the section is going to remain the same like we have in our design, what we can do is let's undo this first. And in the client section,
this first. And in the client section, we can just move these contents out of the fixed container and just get rid of this fixed container. And now we can just wrap all of our sections into a
vertical stack. Let's call this one as
vertical stack. Let's call this one as fixed container. Make sure the width is
fixed container. Make sure the width is fill. And you can add the maximum width
fill. And you can add the maximum width of 1200 pixels to this container only.
Now whenever we add a new section inside this fixed container, it will have that maximum 1200 pixels width applied to it.
But this only works if all of your sections are going to have similar background. You don't have to do this.
background. You don't have to do this.
This is just a trick that I wanted to share. All right, let's continue to our
share. All right, let's continue to our next section. Let's get rid of this
next section. Let's get rid of this section here. And in this one, we don't
section here. And in this one, we don't need the ticker, so let's get rid of that. Change the text just like this. We
that. Change the text just like this. We
don't need that fixed width anymore.
Let's set it to fit content. Change the
text style to body bold. Override the
color to text brand. Let's duplicate
this text. Now remember the shortcut key command D or control D on Windows. Let's
change the text style to heading 2. The
color can be text primary and change the direction of this stack to vertical. We
want to align everything to the left. We
can do this through here just like so.
Remember in vertical stack align property handles vertical alignment and distribute handles the alignment on the horizontal axis. Let's duplicate this
horizontal axis. Let's duplicate this text again. move it down the stack using
text again. move it down the stack using the keyboard down arrow key. Change the
text style to body just like this and remove the color override. Actually, we
can also remove the override for this text as well. Now, I'm going to just add some placeholder text and for that I use a plugin called Lauram. To access
plugins, just click over here and here you can browse all the plugins or you can just search for a particular plugin.
Let's search for this plug-in called Lauram Ipsum. It will open up the
Lauram Ipsum. It will open up the plug-in and now you can add words, sentences or even paragraphs just like this and it will apply to that selected text. You can browse frame marketplace
text. You can browse frame marketplace for more interesting plugins. For now,
let's continue. Let's set the width of this text to fill container. I need gap in between. But as this is just one
in between. But as this is just one stack, I can't control the gap individually. So let's put these two
individually. So let's put these two together in another stack and align to the left. Now I can control the gap
the left. Now I can control the gap between both of these tags individually just like this. Let's add a gap of 64 for this one. I think this section is looking nice. Let's duplicate this
looking nice. Let's duplicate this section again and work on our services section. Again, let's just change the
section. Again, let's just change the text. Now instead of this text, we need
text. Now instead of this text, we need these cards. To make this card, let's
these cards. To make this card, let's draw up a frame here. Just like this.
This also needs to be a stack because we have three vertical stack item inside it. So let's add a vertical stack layout
it. So let's add a vertical stack layout to it. Everything needs to be aligned to
to it. Everything needs to be aligned to top left. For the icon, let's use the
top left. For the icon, let's use the phosphorful icon library and increase the height of this icon to maybe 64.
Change the icon to a relevant icon.
Let's go with this selection icon. Good
thing about force for icons is that you can make them dual tone icons by adding alpha value to it just like this. As you
can see here, if I change the color to something like red, you can see that it has that dual tone effect to it. For our
case, let's give it our text primary color. Let's rename this frame to
color. Let's rename this frame to service card. Add some padding to it.
service card. Add some padding to it.
Maybe let's go with 32. And we need rounded corners which we can easily add from the styles in the radius. Let's add
32 radius or maybe 24. Next thing we need is the heading text. So, let's just copy this text and paste it in here and
change the style to heading three. Get
rid of the color override and double click on it to change the text. We need
a paragraph. So, let's just copy this one and paste it in here. And get rid of the extra text just like this. For this
text, we can apply text secondary color to it. This card should fit the content.
to it. This card should fit the content.
And let's add some gap between the items. Now, as I said earlier, this card needs to be repeated. Just the content is going to change. So, we can make it into a component. Right click and create
component. Let's keep the name service
component. Let's keep the name service card and create the component. Now, this
card is a component and it only has one variant. Let's rename this variant to
variant. Let's rename this variant to desktop. Let's go back to home and put
desktop. Let's go back to home and put this card inside our services section.
We are actually missing this border around it. So, let's double click and
around it. So, let's double click and edit the component. First, let's change the fill from fixed white to our surface secondary variable. And let's add a
secondary variable. And let's add a border to it just like this. For the
color, choose border 100. And width of the border can be 6 px. Let's go back and have a look. Nice. Let's duplicate
it. And we need them to be horizontally stacked. Let's remove this one and let's
stacked. Let's remove this one and let's add a stack to it. Set it to horizontal and the gap can be 32. Now, how do I change the content of this card or maybe
change the icon of this card? Currently,
I can't. Remember, we talked about exposing certain values of a component to make them dynamic. We just need to do that again. So, let's go to this
that again. So, let's go to this component again and select this icon. I
should be able to change the icon. So,
let's create a variable for that. Just
like this. Similarly, make a variable for the title and this description text.
You can also rename the variable to anything you want. Let's call this one description. So, it's easier for us to
description. So, it's easier for us to understand. Now, if I go back, we can
understand. Now, if I go back, we can see that in the component properties, I have the option to change the icon, title, and the description just like how we did for the nav link. So, let's
change the icon and the title. I can
also change description, but let's leave it as is. Let's duplicate this card once more and see this is overflowing the stack which we don't need. By the way,
to make the overflowing elements visible, you can select the parent container and set the overflow to visible just like this. But we want these cards to fill the space equally
and be responsive. So, let's select all of these component cards and set the width to fill. And now it looks great.
Let's rename this stack to something like cards container. By the way, you might be wondering why are we doing all this layout and fill container and fit content stuff. Why can't we just set
content stuff. Why can't we just set fixed height and fixed width for desktop, tablet, and phone separately and be done with that? Well, the thing is that we're just designing three break points. But think about it. There are
points. But think about it. There are
phones with different screen sizes.
Similarly, we have tablets. Some are
big, some are small. And what about laptop sizes and huge monitors? So
that's why we use these layouts to make everything responsive for different screen sizes even with just three break points. Now notice something. We have a
points. Now notice something. We have a very subtle background color to our whole website. Don't worry about it
whole website. Don't worry about it because we will add it in just a few minutes. For now, let's just duplicate
minutes. For now, let's just duplicate this frame section. This is going to be our project section. So let's just quickly change the text accordingly.
Let's rename this card container to project container. And let's get rid of
project container. And let's get rid of these cards because here we will design our project cards. First, let's go to the design page and copy this image and
paste inside this container. Let's add
some corner radius to it so it has some rounded edges. I need a text here. Let's
rounded edges. I need a text here. Let's
just go inside this component and copy this text and paste it over here just to save some time. Now, this is also starting to feel like that it should be a vertical stack. So, let's just move it
out for now and add a stack to it. Let's
call this project card and change the direction to vertical. And let's change the height to fit as well. And maybe the content should also align to left just like this. Let's copy this text from
like this. Let's copy this text from this component again and paste it inside this project card. You don't have to copy. You can add another text and you
copy. You can add another text and you know add the content, but I'm just doing it to save some time. Now, here is the interesting bit. Let's change all the
interesting bit. Let's change all the items width to fill the container just like this. Now because we have the width
like this. Now because we have the width of the project container fixed, we can change the width and the contents will always fill the space like this. Let's
wrap these texts into a substack and add some gap between the image and the stack just like this. Now again this card can also be a component. So let's right
click and make it into a component. And
let's make the image and both of these texts dynamic by creating variables. You
should know how to do all this by now.
Let's go back and put this inside it.
All right. Now, let's just duplicate this once more. And for both of these, I'm going to set the width to fill. Now,
see, when I duplicate it once more, it tries to put another card inside that horizontal stack. But this doesn't look
horizontal stack. But this doesn't look so nice, especially when we have more items. One row should only have two items. To achieve that, if we select this parent container, we can see that
it's a horizontal stack. Right now, to make it look like this one, we can change the layout from stack to grid.
Just like this. Remember, we talked about grid layout. In grid layout, you can control the columns and rows you want. For us, two columns and two rows
want. For us, two columns and two rows work perfectly. You can also control
work perfectly. You can also control vertical and horizontal gap right from here. Now if you select any item inside
here. Now if you select any item inside the grid, you have some extra properties. Let's delete this one and
properties. Let's delete this one and let's select this one. And here I can control the size of this card. I can
select for the columns that it should span across how many columns. So if I select two columns, it will take two columns. If you see this weird gap,
columns. If you see this weird gap, that's because in the grid settings in advanced, it has set the height to fill container by default. Let's change it to fit content to fix this problem. So, you
can play around with these settings to create different layouts inside a grid.
But for now, we just need two columns and two rows. And each card should just take one column just like this. Now, I
can change the content of this project card component just like before. Let's
just update the image for each of these cards. And remember how we did this? We
cards. And remember how we did this? We
created a dynamic property for image in the project card component. Everything
is looking great. You can change the content as well, but I'm just going to keep it as is for now. Don't worry about the tablet and the phone view right now because I know it looks terrible, but we
will fix that later. Now, let's just create this CTA card section. By the
way, if you don't want to start something from scratch, just duplicate something similar. For example, I can
something similar. For example, I can duplicate this card by holding down the option key on the Mac or alt key on your Windows and just clicking and dragging to duplicate it just like this. Now, as
this is a component, I can't directly edit it. To deattach a component, just
edit it. To deattach a component, just right click it and detach the instance just like this. Now, it's a normal frame. Get rid of the icon and the
frame. Get rid of the icon and the heading. Let's remove the color
heading. Let's remove the color overrides for this. Resize and let's rename it to CTA card. And let's just remove the border as well. Change the
fill to surface tertiary. Now we need a button. So let's start by adding a text.
button. So let's start by adding a text.
Let's add a stack to it. Now let's just set the width and the height to fit the content. Just like this. And let's add
content. Just like this. And let's add some padding around it. Oops, I didn't change the width to fit. Let me just do that. Everything is aligned in the
that. Everything is aligned in the middle. That is fine. Let's change the
middle. That is fine. Let's change the fill to button primary. Select this
text. apply body text style to it.
Override the color to text on color just like this. And to make it rounded, let's
like this. And to make it rounded, let's add 999 radius to it. We made it into a stack with padding so that when the content of this button changes, it should automatically grow just like
this. Let's change the text to say
this. Let's change the text to say something like button text. Now we need to make it into a component. And there
are two reasons for it. One is obvious that this is going to be reused in many places. Secondly, we need the hover and
places. Secondly, we need the hover and pressed variants. Let me just make it
pressed variants. Let me just make it into a component. Let's call this our primary button. And now button can have
primary button. And now button can have that hover and pressed states. To add
those state variants, we can just click here and select hover to create hover variant. Just like this. On hover, I can
variant. Just like this. On hover, I can change the fill from button primary to button primary hover. So it looks hovered. Similarly, let's create a
hovered. Similarly, let's create a pressed variant and change the fill to button primary pressed. Let's cut this button and paste it inside here. Let's
make this one a horizontal stack and increase the gap a bit and padding can be something like 24. Now as this is aligned to top when the text increases
on this component the button stays on top. So maybe let's change the alignment
top. So maybe let's change the alignment to center vertically just like this. Now
we can just make this card into a component as this can be used in different places just like this. Let's
copy it inside here and fill the container. We're not doing the dynamic
container. We're not doing the dynamic properties right now. I will do that later in the video. By the way, we have used color variables so far and we had
set them to dark and light mode as you can remember. So, let's try changing to
can remember. So, let's try changing to dark mode. Oh, see it is working for the
dark mode. Oh, see it is working for the most part. But some of the places we
most part. But some of the places we forgot to set the variables. For
example, if you select this desktop breakpoint, we can see that the fill is set to fixed white color. So, let's just change it to surface primary. And now it
looks perfect. Let's see. This mask is
looks perfect. Let's see. This mask is weird. Let's quickly fix this.
weird. Let's quickly fix this.
I think dark and light theme are working perfectly now. Apart from this logo
perfectly now. Apart from this logo here, let's fix it by applying text primary to this SVG logo. Just like
this. In the light mode, it will be black and in the dark mode, it will be white. It's now looking great. Let's
white. It's now looking great. Let's
quickly complete our desktop frame design. Next, we have the testimonial
design. Next, we have the testimonial section. I'm just going to duplicate
section. I'm just going to duplicate similar section and just bring it down in the stack using the keyboard arrow down key. Let me just really quickly
down key. Let me just really quickly change the text. Now, I want to design the testimonial cards and I don't want to do it from scratch. Uh I think this project card is quite similar. So, let's
just duplicate it over here. We don't
need these here. Now, let's detach this project card instance. We need image on the left. So, we can change the
the left. So, we can change the direction to horizontal. Let's add a fill surface secondary for this one. And
some padding and some corner radius. And
let's adjust the corner radius of this inner frame to match the outer corner radius. By the way, there is a formula
radius. By the way, there is a formula to do this. Whenever you have like a card with corner radius and you have another item which needs corner radius inside it. So to make it look perfect
inside it. So to make it look perfect just minus the padding from the outer radius. So in our case outer card has 24
radius. So in our case outer card has 24 corner radius and the padding is 16. So
the corner radius of this image would be 24 minus 16 which is 8. And now it looks perfect. I want this image to always
perfect. I want this image to always have a fixed width and fill the height of the parent. So, let's unlock the aspect ratio and set height to fill. And
now it works perfectly. Let's change the text. Let's change the style on this
text. Let's change the style on this text here. Add some placeholder text.
text here. Add some placeholder text.
Remove the color override. Next, we need these star ratings. So, luckily in Framer, we have this built-in star shape right here. Just select it and click and
right here. Just select it and click and draw to draw it. Let's duplicate it four more times and put them all in a horizontal stack. Now we can control the
horizontal stack. Now we can control the gap. Make sure to fit the content for
gap. Make sure to fit the content for width and height. For color, we don't have any color style for it. So, let's
try to pick this color. Oops, it didn't work. Don't worry. Let's just set it
work. Don't worry. Let's just set it manually. Let's rename this stack to
manually. Let's rename this stack to stars and put it inside our frame here.
This text needs to be changed to a person name and the company name. Let's
align everything to the left. Stars are
a bit too large. Let's select all of them and reduce the size a bit. Just
like this. One important thing, set the height of this card to fix so that when we resize it, the content should fill height of it. And for this frame here,
set the height to fill the container.
Now, as you can see that it is now center aligned. We don't want that. So,
center aligned. We don't want that. So,
let's change the distribute property to start. And as I need the author and
start. And as I need the author and company name to be always at the bottom, I can wrap the star container and this text into another stack and align
everything left. And now we can just set
everything left. And now we can just set the parent container to distribute space between just like this. Now this card is fully responsive.
Let's change the name. All right. So
let's replace this image. Now you can bring your own, but I'm going to use this Unsplash plugin. And let's search for a happy man. Let's choose this one.
Let's cut this image and put it into testimonial card and paste it in. Let's
just put it next to our old image and delete the old one. Now again set the height to fill and change the radius as before. Now let's make it into a
before. Now let's make it into a component and let's make the content dynamic by creating variable for this text and for this one as well. Let's
call this one as author. We want this image to be dynamic as well. So let's
create a image variable for this one.
And just like that, our testimonial component is ready. Let's place it inside our stack. We need two testimonials. So let's just duplicate
testimonials. So let's just duplicate this one. Select both of them and set
this one. Select both of them and set the width to fill. And this stack needs to be vertical just like this. In our
design, we have the CTA section here. So
I'm just going to copy this one and paste it in here. Now let's quickly do the footer. Add the text. Apply a style.
the footer. Add the text. Apply a style.
Duplicate it once more. Change the text for this one. Wrap them in a stack.
Distribute space between. And let's
place it over here. H. Actually, I don't want it to be a part of testimonial section. So, let's just cut it out. I
section. So, let's just cut it out. I
want the footer section to be its own section. So, let's duplicate this
section. So, let's duplicate this testimonial section and get rid of everything and paste our footer stack here. I need a top border for this
here. I need a top border for this section. So, let's add a border right
section. So, let's add a border right from here. I can set the width of this
from here. I can set the width of this border to zero for right, bottom and left and leave 1px on the top and change
the color to border 100. I think so we are done. Actually I forgot to rename
are done. Actually I forgot to rename the sections as we just duplicated them from the client section. All of them are saying it's client section. So let's
just quickly rename all of these to relevant names so it's just easier for us to understand. Now let's preview this. It's looking great. Everything is
this. It's looking great. Everything is
nice and pretty. This text over here is still in front of the nav bar. It's an
easy fix. Let's select this nav bar and increase the z-index to three. Now, it
should work, but it's always better to actually give it a bigger value like 9 so that in the future if you add something with zindex 4, 5, 6, n bar
always stays on top of that. Now, our
desktop design is looking great. Now, we
can start tweaking the tablet view. I
promise it's going to be really quick.
So, first thing I'm going to do is select all of these sections here in the tablet and change the padding to 32 because 64 works great for the desktop, but for the tablet 64 is too big. Now,
it looks better. These cards are too squished together. So, in the tablet
squished together. So, in the tablet view, we can change the direction to vertical and it just works. See, this is why we spend so much time in making these cards responsive in layout so that
when we change the direction, it should just work. Now, it's looking great.
just work. Now, it's looking great.
Other sections are fine as is. But what
about these texts? They are too big for a tablet. It would be great if we could
a tablet. It would be great if we could somehow change the text size automatically for different break points. Well, the good news is that we
points. Well, the good news is that we can. To do that, let's go to the text
can. To do that, let's go to the text styles that we defined earlier in the assets tab. Select any text style. And
assets tab. Select any text style. And
here you have the option to add break points. And it will automatically make
points. And it will automatically make three break points as we have three break points in our design. Large is for desktop, medium is for tablet and small is for phone. Now I can individually
decide what will be the font size for each breakpoint. So for example in
each breakpoint. So for example in medium I can reduce the font size so that it fits. I think 5.5 ram is looking nice. I can do it for the phone as well.
nice. I can do it for the phone as well.
Just like so. Let's repeat this process for other textiles. So for heading two, let's add break points. I think I like the size created by default for the
different break points for now. Let's
preview it to see how it looks. I think
so it is looking nice. Actually the
footer is not filling the container.
That's probably because width in our primary frame is set to fixed. Let's
change it to fill. And now it will fill the container. Our tablet is looking
the container. Our tablet is looking good. Let's work on the phone view. Now,
good. Let's work on the phone view. Now,
for the hero section, this depends on what look you want to go for. You could
just resize this character to something smaller and place it on top of it like this. Actually, let's change the padding
this. Actually, let's change the padding between these texts to something smaller for tablet and phone. But I still don't like the look of the phone. I would like
the character and the text to be stacked vertical. So, we can easily do that. All
vertical. So, we can easily do that. All
we need to do is select this character image and change the position from absolute to relative. And now it will behave just like anything else in the stack. Now I can just drag it over here.
stack. Now I can just drag it over here.
So it is the first item in the vertical stack. Now as per the size when I try to
stack. Now as per the size when I try to resize it is resizing proportionally. So
I can unlock the aspect ratio just like this and reduce only the height. But see
when I resize it keeps the character in the center of the frame. Well it's an easy fix. In the fill where you uploaded
easy fix. In the fill where you uploaded the image you can see that we have this position property which is set to center. You can change it to top center
center. You can change it to top center so it always cuts from the bottom only.
Another thing that you can do is set this position to focal point and set this point to where you want to focus.
Just like this. Now it tries to always focus to that point as the size changes.
But for us, let's keep it top center.
Let's tweak the mask here so it shows the character a bit more. Now let's
select the hero section container and set distribute to start. Add some top padding and change the height to fit content and maybe some bottom padding
too. Now for the rest of the section,
too. Now for the rest of the section, let's change the padding to 20.
Currently, it is set to 64, which is too big for the phone. On the phone, this section can be vertical as well. Also,
make the text center aligned right from here. Heading two is too big for the
here. Heading two is too big for the mobile. Let's update it. Again, make
mobile. Let's update it. Again, make
sure to update it for only the small break point. Just like this.
break point. Just like this.
This is starting to look very nice. For
these cards, we can align them vertically like how we did for the tablet. For the project container, we
tablet. For the project container, we have two column grid. We can make it one column right from here. But what about this CTA card component? We can't change
the direction for this right from here.
What we can try to do is edit this component, create a variable property for the direction property just like we did for the other things. And now I can change the direction from where I have
used the component. But still I can't control the button to fill the container. The other way is to create a
container. The other way is to create a variant for the phone. So let's undo this. And in the CTA card component, add
this. And in the CTA card component, add another variant just like this. And this
will be the mobile variant. Now I can change the direction to however I want.
Let's reduce the width a bit. Reduce the
gap. And I can maybe fill this button just like this. And just like this, now I can go back to the homepage. And in
the phone breakpoint, I can just change the variant of this component to the mobile variant. One thing we missed was
mobile variant. One thing we missed was how are we supposed to change the content of this button. We didn't create any variables for this button text. So
let's go inside this CTA card. I still
can't do it over here because button is also a component within the CTA card component. So let's double click on the
component. So let's double click on the button to edit the button component. Now
here I can create and assign a variable to this text just like this. And when
you do it for the primary variant, it also assigns it to the rest of the variants. Now if I go back to the CTA
variants. Now if I go back to the CTA card component, I can change the button text. But we still have a problem. What
text. But we still have a problem. What
if one CTA card button says explore more and some other CTA card instance say I don't know something like contact me. It
means that this button text needs to be dynamic for CTA card as well. So we can create another variable in CTA card and assign it to this button text variable.
It's like a chain chain of connections to basically expose the button text to the main page level. Now I can change the button text right from here in the
homepage. Let's change the CT card
homepage. Let's change the CT card variant to mobile as well. For the
footer, let's change the direction to vertical in the phone. Make sure to select the internal stack just like I have and set the height to fit content.
Now select both of these texts and set the width to fill. And I think so we are done with our homepage for now. Let's
just switch the theme and make sure everything is in order. Everything is
looking beautiful and nice. Oo, this is tiring. If you think you have learned
tiring. If you think you have learned something, anything, I think I deserve a subscribe and a like. Please do that.
And after you do that, go take a break, have some coffee. I'm going to go grab something to eat and I will be back. I
promise. All right, I'm back. Next step
is to learn how to create a page. Well,
it's quite simple. Go here in the pages.
Click over here and add a page. Name it
whatever you want. Let's call it contact. Now we have a contact page.
contact. Now we have a contact page.
Let's design it real quick. We need a navbar. Now the thing is that there are
navbar. Now the thing is that there are some things that are always going to stay on every page. For example, a navbar and a footer. We don't want to
copy again and again for every page.
What we can do is go to the homepage and select the desktop frame. And up here we have this option to add a template.
Let's call it main template. Now this is a template page. If you go in the layers, you can see that there is only one layer that says placeholder.
Placeholder means that this is where all the content of any page where we use this template will go. Let me show you what I mean. Let's go back to the home and cut this nav bar right from here.
And let's edit this template again. You
can edit it right from here. Now here in the template I can just paste in that navbar and place it over the placeholder just like this. Make sure the position
is fixed and pinned to top left and right. And remember we added background
right. And remember we added background fill to the desktop frame on the homepage. Now we can just do it over
homepage. Now we can just do it over here. So let's set the fill to surface
here. So let's set the fill to surface primary. Now we've got our navigation
primary. Now we've got our navigation placeholder. will have the content of
placeholder. will have the content of the page and at the bottom we need a footer because that is also going to be available on every page. So let's cut the footer from the homepage like we did
for the navbar and go back to the template again and paste in the footer just like this. The desktop frame of this template is also a stack so it automatically stacks at the bottom. Now
we can create similar break points for template as well. Let's add a tablet one in the template. The footer will have 32 padding instead of 64. And maybe we can
have it vertical stack just like this.
And add some gap to it. Now let's add the phone breakpoint. And here let's set the width of these text to fill the container and align them in the middle.
And maybe actually we can add text style breakpoint for the body just like we did for the headings. for large 1.5 ram.
Medium can be also 1.5 and small can be 1.26. Let's do this exactly for the body
1.26. Let's do this exactly for the body bold as well. So it's consistent. Now
let's go back and check it out. And look
now even we don't have the navbar and the footer on this homepage. But because
we are using a template on it, it still shows that navbar and the footer. Let's
check out the tablet and phone view. I
think something is gone wrong here for the phone variant. Let's go into the template and let's go inside the navar component and let's investigate and compare both of these. All right, I see
the problem. I accidentally added
the problem. I accidentally added padding to the wrong stack here. Let's
remove it. We actually wanted to give right and left padding of 20 pixels to this fixed container. And same should go for this h. Why do we have this weird
space on the left? Let's see. Oh, sorry.
I entered 9 pixels instead of zero when removing the padding earlier. Now, it's
fine. Let's go back to the template.
Let's change the height of this navbar to fit the content and preview. By the
way, you can only preview the template as well. It seems to be working fine
as well. It seems to be working fine now, but let's make this navbar a bit more interesting. Currently, we can see
more interesting. Currently, we can see that we have a fill of surface primary set to it. Let's change that and set it to surface primary 90%. Now this
background is a bit transparent. Now on
top of that we can add some background blur. Right from here in the styles you
blur. Right from here in the styles you can add your background blur. Just make
sure to apply to the primary variant. So
it gets applied to all other variants automatically. Now if I preview look at
automatically. Now if I preview look at the nar this is now transparent and how everything behind is kind of blurred out. And same goes for the phone
out. And same goes for the phone variant. All right let's start working
variant. All right let's start working on our contact page. Before we do that, let's just delete this reference image as we don't need this anymore. Now,
let's go back to the design first. As
you can see in the contact page, we need a form section. Let's go to the contact page right from here. See that there is no navbar still, but I thought we did all that template making just for this.
Well, don't sweat it. All you got to do is just add the template to it right from here. And there you go. Now you
from here. And there you go. Now you
have the navbar and the footer. Now, we
need a form on this page. But before
that, I'm just going to quickly copy one of these sections from the homepage and paste it in here to save some time.
Let's increase some padding. Top can be 128 pixels or maybe 200. Now, let's get rid of this text. We don't need it. And
let's change the text to something like get in touch and you know message me or something like that. Now, for the form, let's go to insert. And inside the form,
framer has its own form builder. Or you
could go with the third party forms like Mailchimp or HubSpot or any other. For
now, let's just go with the form builder. I'm going to drag and drop it
builder. I'm going to drag and drop it in here in this stack. Again, this is nothing more than just bunch of frames.
So, let's fill this container. Let's
increase the height of these inputs to match our styles. So, maybe these inputs can be 56 pixels in height. This button
too. By the way, notice that this button is not the button that we designed.
Basically, what happened is that framer added its own button component. And you
can edit it as well by double clicking on it. And you can see that it has a few
on it. And you can see that it has a few variants. You have the loading,
variants. You have the loading, disabled, success, and the error. And
some state variants for hover and pressed. To keep things consistent,
pressed. To keep things consistent, let's change the colors to our color styles. Change the fill of this button
styles. Change the fill of this button to button primary. This one can be button hover and this one button primary pressed. For the text, let's apply the
pressed. For the text, let's apply the body text style. Let's increase the height to something like 60 pixels. And
let's change the text color to text on color. Radius can be 999. So it's
color. Radius can be 999. So it's
completely rounded. This spinner frame can be a bit bigger as well. And we
probably don't need success and error variant. So let's just remove those. Now
variant. So let's just remove those. Now
the button is looking nice. Let's try to update the textiles of these labels for inputs. So let me just try and select
inputs. So let me just try and select this. Maybe I can select it from the
this. Maybe I can select it from the layers and let's apply textile body to it. Now for the inputs, there is no way
it. Now for the inputs, there is no way to apply textiles directly to it. But
you can apply a different font size.
Let's apply the 1.5 ram to it. Now
change the color to text primary for the placeholder. The color can be text
placeholder. The color can be text secondary. The fill can be surface
secondary. The fill can be surface secondary. All right. So the colors are
secondary. All right. So the colors are set but there is a special property of inputs which is focus. Focus means when you click on any input it becomes focus.
So you can control how it looks like when it is focused. To do that let's go into the focus properties and let's say that we want a border of 1 px and the color can be border 100. I've just
realized that the font sizes are not matching. So let's change the font to
matching. So let's change the font to enter display from enter just like this.
Let's also add a border around it with 2px and the color can be border 100 again. By the way, if you select this
again. By the way, if you select this input, you can add different input properties to it or you can change the input type to something like date or URL
depending on what we want. For us, we want it to be text because it's just a name. The name field is the label value
name. The name field is the label value which will be sent to the database if you submit this form and placeholder can be changed right from here. You can also make it a required or not required
field. We are just learning. We can just
field. We are just learning. We can just get rid of these two fields and maybe duplicate this once and change it to message and also change the input field
to text area and increase the height like so. You can also adjust the
like so. You can also adjust the placeholder and the field name to whatever you want. Main thing now is what happens when I click this submit button. One thing that we can do is
button. One thing that we can do is change the variant of this button based on the form state right from here. So
during the loading state the button changes to loading variant and on success we can set it to another variant. But in our case we just need to
variant. But in our case we just need to redirect the user to a thank you page.
So to do that we can select this form container and here we can decide where to send the data. Great thing is that framer makes it really easy to send it to an email. Here you can enter where
you want to receive this email and you can also decide the sender name, subject and the description of the email. So
what will happen is that you will receive an email from framer with this name, this subject and body. But it also includes the data that was submitted in
the form. Other way to send the data is
the form. Other way to send the data is to either attach a Google Sheets. not
going to show you how to do that. Just
click over here and it will walk you through how to connect it. And thirdly,
you can also connect an external API right from here with this web hook option. For the learning purpose, I'm
option. For the learning purpose, I'm just going to keep it blank. However,
once it sends to something, we can set redirect link. Here you can pick a page
redirect link. Here you can pick a page where you want to redirect. Here you can pick the page you want to redirect to after the submission. We will create a thank you page later. But for now, let's
just set it to homepage. And that's it.
Let's preview it. Now, if I submit this without filling in, the validation is working perfectly as this is a required field. So, let's fill in the both of
field. So, let's fill in the both of these and try submitting again. And
there you go. It loaded for just a second there and redirected us to the homepage. Now that we have our contact
homepage. Now that we have our contact page, maybe we should link it to this nav link here as well. So let's go back to the navbar component. Select this
contact navl link instance and we can link it to the contact page just like this. We can also link the work page but
this. We can also link the work page but we don't have the work page right now.
We will do this later in the video. By
the way, you don't have to do it separately for the mobile variant because you did it in the primary and as I told you if you do it in primary it applies everywhere. Now we can preview
applies everywhere. Now we can preview homepage and we can go to contact page right from here using this link. And
once we submit the form there, it will redirect back to home. This is great.
But in real scenario, there should be a thank you page where it should actually redirect to. So let's quickly create a
redirect to. So let's quickly create a new thank you page. You can see that it is already using the template. Let's
copy this section from the contact page.
Actually, while we're doing that, rename this section to something like contact section. Now, just copy it and paste it
section. Now, just copy it and paste it in the thank you page. You don't have to copy stuff. It just saves me some time.
copy stuff. It just saves me some time.
So that's why I'm doing it. Let's call
this one thank you section here. Now I
can just change the text to something like I will get back to you. Thank you
for your message and remove the form.
Height of this section can be viewport.
And let's align the content in the middle. Actually select the internal
middle. Actually select the internal stack as well and align everything in the middle just like this. All right,
let's preview this. H it's looking interesting. Maybe the padding can be
interesting. Maybe the padding can be reduced to something like 64. Let's see
it again.
Actually, we don't need viewport height.
We can just set it to 800 pixels. And
that's it. It's a simple thank you page and it's ready. Now, in contact page, we can change the redirect from the homepage to thank you page just like this. And that's it. Now, we are done
this. And that's it. Now, we are done creating our contact and thank you page.
We need a project index and project detail page. What I mean by this is
detail page. What I mean by this is currently on our homepage, we have listed some dummy projects, right? In a
typical portfolio website on homepage, you would just show your special projects or featured projects. Then you
would have like an explore more work button which actually takes you to a separate page where you list all of your projects. So let's change the text on
projects. So let's change the text on this button in this CTA card to say explore more work. Now when I click this button or if I click work from the
navbar I should go to the new work page where we will have all the works listed.
So first thing first we need a page.
Let's add that. Let's call this one work. Let's just copy this whole project
work. Let's just copy this whole project section from the homepage and paste it in here. Let's rename this section to
in here. Let's rename this section to work section and add some top padding of 200. You can change the text to whatever
200. You can change the text to whatever you like. For example, amazing work or
you like. For example, amazing work or whatever you think works best. We don't
need CTA card. So, let's remove that.
Let's duplicate this project card twice more just to show some extra projects in here. Now, from the homepage, we need to
here. Now, from the homepage, we need to link this button to this page. But, we
actually didn't add a link variable to the button yet. So, let's go in here inside the button component. Here we can create a variable for the link just like
we did for the other stuff. Now go back to the CTA card. Same thing again.
Create a variable to expose it to the main page level just like this. And now
if I go back I can link it to the work page just like this. Let's test it.
Scroll down to the CTA and click explore more button. And now we are on the
more button. And now we are on the workpage. Now here's where things get
workpage. Now here's where things get more interesting. Now that we have a
more interesting. Now that we have a work page, whenever we have a new project, we can add it to this page. But
wouldn't it be better if there was like a database where you could just add your project data and it automatically shows up here? To solve this, we use CMS. CMS
up here? To solve this, we use CMS. CMS stands for content management system.
CMS is like a database and it contains collections. Now, collections can have
collections. Now, collections can have some fields like project name, image, client name, description or my role. Now
these collections can have records. For
example, in this project collection, we can add all the projects that we have worked on. And we connect this CMS
worked on. And we connect this CMS collection to our work page. And it
automatically picks up the details of our projects from our project collection and shows it on our work page just like this. And when we click on any project,
this. And when we click on any project, it takes us to a project details page which we will discuss how to design later in the video. On this page, you can further show the fields from the
project collection. CMS makes it easier
project collection. CMS makes it easier to manage content. Instead of designing different pages for each project, we just keep on adding project details to our project collection and it
automatically fills in that data in our design. Let me show you how CMS works. I
design. Let me show you how CMS works. I
promise you by the end of this video you will understand all about CMS. To access CMS, click over here on the top. You can
either start with a built-in CMS for a blog or import your own from a data source. But let's learn from scratch.
source. But let's learn from scratch.
Let's create a collection right from here. Let's name this collection
here. Let's name this collection project. Now, this is where we will add
project. Now, this is where we will add all our projects that we worked on. But
if I press this add new item button, I get this form where you have fields like title, slug, and content. You might ask where are these fields coming from? And
what if I want some other field for my project? I don't know something like
project? I don't know something like role. What to do then? Well, that's why
role. What to do then? Well, that's why it's important to define your collection fields first, which you can do right from here. Let me remove the default
from here. Let me remove the default fields that framer added so you don't get confused. By the way, you can't
get confused. By the way, you can't remove slug. Slug field is basically a
remove slug. Slug field is basically a URL. So, let's say that you have these
URL. So, let's say that you have these four projects and one of them is iPhone 16. And when you click on this, it takes
16. And when you click on this, it takes you to a unique URL. For example, your website.com/work/
website.com/work/ iphone16. Now, this is the slug for that
iphone16. Now, this is the slug for that specific project. And it's unique for
specific project. And it's unique for each project. Don't worry about it. You
each project. Don't worry about it. You
will understand what it means soon. For
now, we need to create fields for our project section. Now, here you need to
project section. Now, here you need to think to yourself what data you need to show for a project. And based on that, you create certain fields which you can do right from here. You have option to
choose from different type of fields like text field, date field, color, link, image or even vector icons. So
let's say you need a project name field.
Now project name is obviously going to be a plain text field. So let's go with that. Let's call this field project
that. Let's call this field project name. Here you can play with different
name. Here you can play with different settings of this field. For example, I can mark it as required or add some placeholder or default text. But for
now, let's keep it as is. Let's create
another field and let's call this one short description. I'm going to leave
short description. I'm going to leave the other settings as is. For the slug, I can set the slug to be based on the name of the project. Now, if I close this and add a new item, you can see
that we have the fields that we just created. I can enter the project name.
created. I can enter the project name.
Slug automatically gets filled in as we set it to be based on the project name.
And in the description, I can just put some random text for now. This is just a sample data. In real portfolio, you
sample data. In real portfolio, you would actually put real project name and short description. And just like that,
short description. And just like that, you have added one project. Let's
quickly add another dummy project. Let's
assume the project name is second project and the description is testing ABC. Now that we have our CMS collection
ABC. Now that we have our CMS collection project created. So far, we have created
project created. So far, we have created a project collection and we have added two project records in that collection.
Now, all we've got to do is connect the CMS collection to our work page. For
that, let's just move this container out of the way for now. And if we go to the insert in the collection, we can see that it shows our collection that we just created. Let's drag and drop that
just created. Let's drag and drop that in. And there you go. As you can see,
in. And there you go. As you can see, this is showing the project name of both of the projects that we added in the project collection. In the layers, if
project collection. In the layers, if you look at it, here is the project list. And this will list all the items
list. And this will list all the items from project collection. And this
internal project layer is the instance of a record from your project list. And
currently it only has one text layer which is showing the project name. But
you might be wondering there is one layer of text and it is showing the project name for both of the projects.
See how it works is that you only design for one project and it also applies the same design for the other project in the list. Let me show you what I mean. Let's
list. Let me show you what I mean. Let's
select this text layer and duplicate it.
See what happened is that it added another text layer. But it also applied it to the other project in the list.
Let's continue and it will become all clear to you. Let's select this project's collection and set the width to fill. Now let's select this internal
to fill. Now let's select this internal project and maybe add a fill. Notice as
I change the color, it also gets applied to the other item in the collection.
Whatever I do to this layer, for example, if I change the direction, it also gets applied to the other one. And
that's the beauty of it. So that you have to design just one item and it also applies to the other items as well. Now
you might be thinking both of these text layer are showing the project name. What
if I wanted one of them to show the project name and the other one to show the short description that we added. If
I select this text and have a look at this text content, I can see that this is connected to the project name. And
you can see that by clicking on it. And
if I wanted to show the project description, I can change this connection from project name to short description right from here. So
basically you can assign any field value from your project collection. And now
you can see that one of the text is showing the project name and the second text is showing the short description.
Now I can continue making this pretty and adding an image. But we've already designed a project card component.
Remember this? So let's use this instead of doing everything from scratch. So,
let's copy this card and get rid of these two text layers because we don't need them anymore. Let's remove the fill and set the width to fixed. Now, paste
it in. All right. So, we've pasted in the card. Let's set the width of this
the card. Let's set the width of this card to fill. Actually, let's select this parent one because we need a grid for this. So, let's change the layout to
for this. So, let's change the layout to grid and set the gap to maybe 32 with two columns. Just like this. Now it is
two columns. Just like this. Now it is starting to look just like how we had before. It is showing two cards because
before. It is showing two cards because we had two items in our collection. But
see we have a problem. Currently the
text are not even connected to the project name or the project description.
We can do that right from here. Remember
we created these properties when we designed the project card component so that we could change the title right from here to something else. But instead
of giving a fixed title, I can map this to the project name just like this. And
now you can see both of these cards are showing their respective project names.
And same thing goes for the description.
I can map it to the short description.
Now whenever we need to add some other project to this page, we don't have to design it from scratch. We can just go to the CMS and add another project. Just
go to the CMS, click new item, add the project name and add the short description. And there you go. Now the
description. And there you go. Now the
project is added and it is also showing on our work page. Now what about these images? Well, we haven't connected them
images? Well, we haven't connected them to any project field. We don't even have a project field for the image. So let's
go back to the CMS, edit the fields, and add another field. Make sure to select the image type of the field. Let's make
the image field required as well. And I
can upload a default image, but let's leave it as is. Now, for each project, we can add a relevant image. So, let's
say we upload this board image right here. Now, I can just update the project
here. Now, I can just update the project name and short description to make it a bit more relevant to this image. So, it
is easier for us to distinguish between different projects. Again, I'm just
different projects. Again, I'm just using a demi text. You can write whatever you want. Now, I'm going to repeat this process for the rest of the project items. Upload relevant image.
change the project name, add a relevant description. By the way, if the slug
description. By the way, if the slug doesn't update, just copy this and paste that name in here and it will automatically update that slug for you.
Actually, we should do this for the first project as well. Just like this.
And let's update the content of the third project. This one is going to be a
third project. This one is going to be a plane image. And the project name would
plane image. And the project name would be project plane. And the short description can be something like this aircraft is very fast. Let's add another
project so that we have even four projects in our grid. Let's call this one project train. The short description can be something like this train is very big. And upload the relevant image.
big. And upload the relevant image.
That's it. Now back in our work page, we have the updated projects and their details, but image is still not updated.
That's because we didn't assign the image to the CMS variable. So let's do that. Select this project card and
that. Select this project card and assign this image property to the image field of CMS project collection. That's
it. Our project list is now totally dynamic with our custom styling. On work
page, we are fine with showing all the projects in our list. But on homepage, maybe we just want to show only specific projects. We can easily do this now. So,
projects. We can easily do this now. So,
first thing first, let's copy this project list. Go back to home. Select
project list. Go back to home. Select
this project section and paste it in.
Let's move it up the stack and get rid of this static project container as we don't need it anymore. Now, like I mentioned earlier, we want to show only specific projects on the homepage or
maybe we want to just show the two most recent ones. So, what we can do about
recent ones. So, what we can do about that is select this CMS collection and you will see some content properties on the right panel. Here you can select the source of the collection. You can add
some kind of sorting or add conditional filtering through this option. For
example, you can set something like if the project name is equal to this, then only show that project. But for now, let's not go into that complexity. You
can also add pigeonation if the list is too big. But in our case, we can just
too big. But in our case, we can just add a limit of two. So it only shows two most recent projects. Now, what about if I click on any project on homepage or on
the work page? It should take me to a page with the details about that specific project, right? Well, we don't want to create separate detail pages for
each project. That would be crazy. So,
each project. That would be crazy. So,
CMS allows you to create one detail page for all. To do that, let's go back to
for all. To do that, let's go back to the pages and add a page. Add CMS page just like this and select the project collection and see here we have index or
detail page option. Index page is where all the work items are listed. But we
have already done that. We just need a details page. So let's go with that.
details page. So let's go with that.
This will create a basic page with some design to it and project fields already assigned to them. For example, you have this next project button text added which basically takes you to the next project in the list depending on what
kind of design you want for the project detail. You can modify this project
detail. You can modify this project page. Let's quickly fix the design. This
page. Let's quickly fix the design. This
stack needs to be filling the container.
Max width can be 1200 pixels. Add some
top padding of 200 pixels. And look at that. It already had that project name
that. It already had that project name and project description text added to it. It was just not being shown because
it. It was just not being shown because of the poor design. One of them is showing the project name and the other one is showing the project description.
Now I want both of them on my project detail page. So maybe let's just change
detail page. So maybe let's just change the color of these text. Actually
instead of changing the color we can just apply the text style of heading one and change the color to text primary. I
think so it's too big. Let's go with heading two. Same thing goes for the
heading two. Same thing goes for the other text. Set the style to body LG
other text. Set the style to body LG just like this. And the color can be text primary. Now, this next project
text primary. Now, this next project section, well, you can keep it, but I'm just going to get rid of it because, well, I want to keep my design clean.
And maybe this image height can be a bit bigger. Now, you might be wondering,
bigger. Now, you might be wondering, this is just for one project. Where are
the pages for the rest of the projects?
Well, this here is one page for all. You
can change between different collection items right from here just like this.
And it will automatically update the data accordingly. But what about if we
data accordingly. But what about if we had a full description of a project?
Let's say all of your projects have an overview challenge solution and results. How can we show it over here?
results. How can we show it over here?
Well, what we can do is we can go back to the CMS, add another field, and this time instead of plain text, we add a formatted text field. Let's call this
one full description. Now we can go back to each project and just add in our full description. I'm just going to copy and
description. I'm just going to copy and paste some placeholder text here. Now
because this is a formatted text field, I can format the content. Like for
example, we have heading 1 through six and paragraphs. Now to show this
and paragraphs. Now to show this content, let's close this and go to our project detail page and insert this content here. To do that, we can go to
content here. To do that, we can go to insert and inside CMS, we have this field option. And here we can just drag
field option. And here we can just drag and drop the full description in here.
Oh, I think we forgot to add full description of this project. So, let's
go back to the CMS. Let's just copy the same full description and copy it for the rest of the projects. I'm just doing it to save some time. Of course, in real time scenario, all the projects will have different descriptions. All right.
Now, we have the full description for all our projects. And you can see that it is showing right here. But it is still not showing as formatted as we want it to. To fix this, we can add a
style to it right from this option. So,
let's add heading one to it. Wo, this is too big for our liking. Maybe we can remove this and add heading two style to it. But this also means that we have to
it. But this also means that we have to go back in the CMS and in the full description change the heading one content to heading two so that it applies that heading two style to it.
And let's do it for all the headings.
And let's just copy all of this and update it for all the rest of the projects. Just like this. Now the
projects. Just like this. Now the
heading two is looking fine, I think. So
it's still too big, I guess. Maybe we
can do heading three for this. Before we
do that, let's add the paragraph style as well. And you can see that it has
as well. And you can see that it has added that paragraph style and it has applied all body text style to it. You
can however change it to body bold if you like. Now let's actually apply
you like. Now let's actually apply heading three instead of heading two so it looks a bit nicer. Go to the CMS and select one of these projects. And
actually let's add some line break to it so there is some gap between them. And
let's change these heading two to heading three. Make sure to change all
heading three. Make sure to change all of these headings to heading three. And
now let's just copy this and update it everywhere else. Let's go back to our
everywhere else. Let's go back to our project page. Now we can remove the
project page. Now we can remove the heading two right from here and add heading three style. And there you go.
It is looking much nicer. We can switch between different projects and it will load their full description accordingly.
All that is left to do is actually make these projects clickable on the work page. So when I click on them, it should
page. So when I click on them, it should take me to the relevant project. And the
same thing goes for the homepage as well. It's pretty simple. If I select
well. It's pretty simple. If I select this project item on the homepage, there is no option to add a link to it yet.
That's because we are actually using a component. And you should know by now
component. And you should know by now how to expose any property to the front for any component. Just go into the component. Here we have the option to
component. Here we have the option to add the link. Let's create and connect a variable to it. And now let's go back.
And now I can just add a link to a page.
But this time instead of connecting to a specific page, we have this option to connect it to a project slug. Let's
select this. Let's do this in the work page as well. And that's it. it will
work for all the items automatically.
Let's preview this on the homepage. If I
click on this project, it goes to that project page. And actually, we should
project page. And actually, we should also connect this worknav link to the work page as well. You should know how to do this by now. Go to the navar component and just add the link to the
work nav link just like this. Now, let's
just preview it again. Scroll down to the project section and click on any project and it will take you to the project detail page. And if I click on this work now link now, this should also
take me to the work page. And if I click on any project on the work page, this will again take me to a project detail page, which means all our clicks are working fine. Now, any project I click
working fine. Now, any project I click on, it automatically opens that project detail page. All that is left is to make
detail page. All that is left is to make the rest of the pages responsive as well, just like how we did for the homepage. Don't worry, it's going to be
homepage. Don't worry, it's going to be really quick. Let's go to the contact
really quick. Let's go to the contact page. at a break point for the tablet
page. at a break point for the tablet and a phone. For the tablet, I can just reduce the padding a bit, maybe 32 for the sides and on top of it, it can be
150. And on the phone, it can be 150 on
150. And on the phone, it can be 150 on the top and 20 on each side. This form
has some extra padding that we don't need. So, let's remove it for all. Now,
need. So, let's remove it for all. Now,
let's go back to the work page and add break points. And the same thing for the
break points. And the same thing for the tablet. 150 on top and 32 pixels padding
tablet. 150 on top and 32 pixels padding on the sides. And for the phone, 150 px padding on the top and 20 px on the sides. And maybe we can also change this
sides. And maybe we can also change this grid to one column layout. Just like
this.
Now let's test this. Let's go back to home and preview this. Change the size to phone view. Open the menu. Click
work. Oops, this is not working. This
menu didn't close when we clicked on the work page. Don't worry, it's a very
work page. Don't worry, it's a very quick fix. Let's go to the navbar
quick fix. Let's go to the navbar component. And here in the phone
component. And here in the phone variant, remember we added interaction on this close icon to close the navbar.
We can add the same interaction on these links as well. Just like this. Now when
we click on these links, the navbar will switch to close variant automatically.
As you can see this works now. And let's
see work and contact page are also responsive. Let's see now the project
responsive. Let's see now the project detail is left to be made responsive.
So, let's go to the project detail page right from here and add a tablet and the phone breakpoint. And for this stack
phone breakpoint. And for this stack here, let's add 32 pixels padding on all sides and 150 pixels on top. And for the phone, 150 px on top and 20 on the
sides. Maybe the height of this image
sides. Maybe the height of this image can be a bit shorter for the phone and the tablet view as well. Let's go to the work page and preview. Click on the
project and everything is now working smoothly. Finally, we are done with this
smoothly. Finally, we are done with this website. But this website is looking
website. But this website is looking very boring, static website without any bells and whistles. So now it's time to add animations and effects to it. And
always remember to complete the website first and then start applying effects.
Now this is the last and the most fun part of this video. Before we dive in, just a reminder to subscribe and like.
And also if you are looking for a practical yet modern portfolio design, I have created this beautiful portfolio template with elegant design and smooth animations in framer that I'm also using
for myself. You can get this template
for myself. You can get this template right now at a discount price from the link in the description. This is a limited time offer. No matter what kind of creative professional you are, you
can get this template and easily modify it to make it your own. Now let's go back to the video. Now in terms of animation and effects there is so much you can do in framer. Let's go through
some of the things that you can do and rest you can try on your own. First
let's try animating our hero section of homepage because that's the first thing that anybody sees when they visit your website. To add effects let's select any
website. To add effects let's select any layer. For example, this text layer and
layer. For example, this text layer and you can see this effect option here.
Click this plus icon to see what kind of effects you can add. For example, text effects can apply text effects on letters itself. Appear effects add
letters itself. Appear effects add effects like moving from one place to another. Hover effect is like an effect
another. Hover effect is like an effect that is applied when you hover on it.
Similarly, we have press. We also have loop. If you want to loop an animation,
loop. If you want to loop an animation, then you can also add some scroll animations. I won't be covering all of
animations. I won't be covering all of these because that could be a complete different course just for the effects.
So, let's start small. Let's add text effect. This here shows the preview of
effect. This here shows the preview of the effect. Framer has added a default
the effect. Framer has added a default text effect to it. This here is the trigger. This means when this effect
trigger. This means when this effect will be played. Currently, it is set on appear, but you can change it to layer in view or section in view. We will
explore these settings later. Let's keep
it on appear for now. On appear means it will play as soon as the page loads. You
have bunch of preset text effects to play with. You can select them and see
play with. You can select them and see how each of them looks like out of the box. These are some great effects in
box. These are some great effects in Framer. But in the enter settings, you
Framer. But in the enter settings, you can also control how this text enters into the effect. For example, before entering, the opacity here is set to zero. In the transition, you can control
zero. In the transition, you can control the transition of this effect. Like
maybe you can make it bouncier or smooth and slow animation. Let's not change anything right now. And let's preview.
And just like that, without doing anything, this text has this blur effect applied to it, which looks really cool.
I'm going to hide this character for now just to see the animation clearly. Now
let's preview. And look at that. This is
looking really good, but it's a bit too fast. Maybe I can add some delay of 0.3
fast. Maybe I can add some delay of 0.3 seconds to the effect. So it starts after 0.3 seconds after the page loads.
Let's reload now. And this is looking great. But let's spice it up a bit. In
great. But let's spice it up a bit. In
the same effect, let's go to the enter settings and maybe change the offset Y to 100. By the way, you can see the
to 100. By the way, you can see the preview right here as well. Let's
preview it. Now the text starts to come in a bit further below. Similarly, we
can also add an offset of X to like minus 100. And now it looks even better.
minus 100. And now it looks even better.
Let's try another thing. Let's go back into the enter settings and increase the entering scale a bit. Now when I preview this, see how it starts as big text and
then reduces the size as it ends. You
can mix in different enter effect options to make unique effects. I think
this is looking really great now. So
let's make that character visible again.
And let's apply a peer effect to this character. Again you can select from the
character. Again you can select from the presets like fade in and scale in and more. And you can play with the enter
more. And you can play with the enter effects. For example, I can give it Y
effects. For example, I can give it Y offset of 150 just like this. Now when I preview it, it fades in but from the bottom. It is still very fast. Maybe we
bottom. It is still very fast. Maybe we
can slow it down a bit. To play with the speed of animation, we can go to the transition settings in here. Currently,
it is set to a spring animation. And
time of animation is 0.4 second and the bounce is 0.2 seconds. Let's try to add some delay of 0.8 second and slow down
the time to maybe 1 second. Now, let's
preview it. This is looking much better.
Now, for this text here, let me just copy the style of this text. To copy a style, select the layer and right click over here and then copy. Just like this.
Now just select the layer where you want to apply it and then go to the effects, right click and paste it. Now both of these texts have the same effect. Maybe
we can add some delay to the second one so it comes after the first one. Now
let's preview. This is looking much nicer. I mean look at this. Within
nicer. I mean look at this. Within
seconds we were to make this hero section much more interesting. Now we
can add more than one effect to something. For example, if I want to
something. For example, if I want to give it like a parallel effect, I can add a scroll speed effect just like this and reduce the scroll speed of this element to 50%. Now, as I scroll the
website, this character will scroll 50% slower. Similarly, I can increase it to
slower. Similarly, I can increase it to 120%, then this character will scroll 20% faster than other elements.
Now, let's try and add simple appear effect to this text here. And we can add some Y offset to it just like this. But
see when I preview it, the effect does not play for this text. That's because
when we loaded the page, it ran that effect already. What we want to do is
effect already. What we want to do is instead of on appear, we can say that when this layer is in view only then start the animation. This here controls
when it should start the effect after the object is in view. Should it start as soon as it comes into view or in the middle of the screen or when it is exiting the screen? We have the same
enter effects properties for this one as well. But in addition to that, you have
well. But in addition to that, you have the exit effects which are played basically when that element is about to go off screen. Similarly, you can also disable the replay right from here,
which means that it will only play once instead of playing every time when you scroll up and down. Now when I preview this and scroll down to this layer, the effect starts playing. Let's try it
again. And there you go. Now you don't
again. And there you go. Now you don't have to apply effect to one particular element. You can also add it to the
element. You can also add it to the whole stack. Like for this section here,
whole stack. Like for this section here, let's apply a peer effect on this stack and select the layer in view in the middle just like this. And let's
actually go to the enter transition and make it a smooth transition instead of a bouncy one. To do that, let's choose
bouncy one. To do that, let's choose ease. Now you can either play with this
ease. Now you can either play with this basier curve to control the speed of animation over time yourself or pick from the presets below. I'm going to do a custom one like this and maybe add
some time to it. And also let's add some offset of Y to it just like this. Let's
preview this and scroll through this section. It is much smoother animation
section. It is much smoother animation actually. Now let's apply the same
actually. Now let's apply the same section effects to this text here. So
let's copy this effect. Select this text and remove the existing one and paste it in just like this. Actually, better yet, let's remove it from this text and just apply it to the whole stack. Just like
this. You may want to do it individually for each element. Or you can do it like how I did it. Let's apply the same style to all of these heading sections. We
already have the effect copied. We just
need to right click here and paste it.
Let's do it for this heading section as well. Again, go to effect and paste it
well. Again, go to effect and paste it in. And just for fun, let's add the same
in. And just for fun, let's add the same effect to this one as well. Now, let's
preview this. The heading section looks amazing. And as I scroll, the text comes
amazing. And as I scroll, the text comes in nicely. These cards are still static.
in nicely. These cards are still static.
So, let's add some effects to these ones. For these cards, maybe we can add
ones. For these cards, maybe we can add the same style. But to make it more interesting, there is a trick that I like to do. First, let's just paste the same effect to all of these. Just like
this. Now for each of these texts I can change the offset a little bit and make it higher and higher as I go. So for
example for this one it can be 130 and for this one it can be 160. Now when I preview this as I scroll one card comes after the another one which looks really
nice. Now you might notice that as I
nice. Now you might notice that as I scroll up and down every time these sections with effects come into the view they're playing the effect again. We
don't want it to play again and again.
Well, sometimes you do want to replay, but in our case, we don't. So, to turn off the replay, you can go into the effect settings and turn off the replay right from here. Let's select all other
elements where we applied this effect and turn the replay off. I'm going to fast forward this section to save some time.
All right, all of them are done. Now,
when I preview it, it does not replay on scroll. By the way, you might notice the
scroll. By the way, you might notice the whole page reload sometime. It is just a framer thing, so don't worry about it.
Let's move on and copy this effect again and paste it for this card. Actually,
let's just quickly do it for the other cards as well. Let's select the CTA, paste that in. Let's select this heading section. And actually, let's select
section. And actually, let's select these cards here as well, and paste the same effect to all of these. Now, let's
preview. Now, as I scroll down, you can see that the text slides up nicely with this smooth transition, which is really satisfying. Website seems to be looking
satisfying. Website seems to be looking really good. And when you apply the
really good. And when you apply the effect on the desktop, it also applies to the other break points. As you can see, as I scroll down the tablet view, this is looking very smooth and modern.
By the way, I just noticed that there is no home nav link in the navbar. How
ignorant of me. So, let's go back to the navbar component really quickly.
Duplicate this nav link. Change the text to home and link this to the homepage.
Just like this. It should work now.
Let's go and preview it. Let's go to work and home. Now the home nav link is working. All right. We just learned how
working. All right. We just learned how to apply effects to elements. There's
another type of animation that you can do to make your site more interesting.
So let's say that what I want to do is when I hover this character, there should be a cursor saying drag me and then I should be able to drag this character around. So let's try to do it
character around. So let's try to do it and you will see what I mean. So first
thing first, let's go to the design page and copy these images and let's go back to the homepage and paste them in here.
Now I'm going to use these images later.
First let's add some text that says drag me and let's add our body text style to it. Just like this. Now let's resize
it. Just like this. Now let's resize this hand image and place it next to this text. Oops, wrong image for the
this text. Oops, wrong image for the drag me. Actually, we needed this one.
drag me. Actually, we needed this one.
So, let's resize it and actually rotate it just like this. By the way, this is how you can rotate anything right from the bottom corner just like so. Now,
select both of them and press shift A to add them to a stack. Let's add some cap and maybe add a fill of surface primary just like this. Also, let's add some
padding around it just like this. And
let's make it fully rounded by adding border radius to it. Let's rename this stack to drag cursor. Let's cut this closed hand image from the homepage and
make this one into a component like we have done many times before. Now here I am going to create a pressed variant just like this. And I'm going to paste that closed hand image right here and
get rid of this open hand image just like this. You're going to see why we
like this. You're going to see why we did this in just a second. Let's go back to home. Delete this as we don't need it
to home. Delete this as we don't need it anymore. Now select the character and in
anymore. Now select the character and in the properties you will see this option to add a cursor. You can either select a web cursor and pick from the default cursors or you can add a custom cursor.
Let's remove the web cursor from here and add a new custom cursor right from here. Here you need to pick a component
here. Here you need to pick a component to set as the cursor. It can be any component. For our case, I'm going to
component. For our case, I'm going to pick the drag cursor component that we just created. And let's add a spring
just created. And let's add a spring transition by just clicking right here.
Now, when I preview and hover on this character, I see that cursor on hover.
But there's a problem. When I hover on this text, that cursor disappears.
That's because it thinks that I am hovering on the text. Now, to ignore the mouse events on these text, we can select both of these texts and in the
styles, click this plus symbol and select pointer events and set them to none. Just like this. And now when we
none. Just like this. And now when we preview, it will work fine. Now when I try to click and drag, still nothing happens. Well, we have just added a
happens. Well, we have just added a cursor for now. We have not added that drag effect to the character yet. So
let's go back, select the character and add that drag effect right from here.
Let's keep the settings as is. And let's
preview. Now I can hover on it and it says drag me with hand icon. And then I can start dragging and the character drags and the cursor also changes to that pressed variant. Let me hide this
yellow cursor outline so that you can see much easily. Now look at that. This
is looking beautiful. So this is a very creative thing that you can do in framer. Actually when I drag down here
framer. Actually when I drag down here you can see that the fading effect goes away. So let's actually do one thing.
away. So let's actually do one thing.
Remove the mask from the character and apply the mask to the whole hero section and adjust it like so. Let's preview
this. And now it looks much better wherever I drag it to. This is shaping up nicely. Beautiful smooth animations.
up nicely. Beautiful smooth animations.
Framer has made it so easy to add effects and animations. You can also do some really really complex animations but we will discuss them some other day.
Ooh, what's that? We forgot to add max width container to these pages. So these
are not aligned. Remember we had this in our homepage. We didn't add this to the
our homepage. We didn't add this to the other pages. So let's go to the contact
other pages. So let's go to the contact page. Select this section and add a max
page. Select this section and add a max width of 1200 pixels. Like so. Let's
preview this. And now it should work.
Let's do this exact same thing for the other pages as well. And add a max width of 1200 pixels just like this. And let's
go to the work page. And same thing, select this work section and add a max width of 1200 pixels. And for the project page, if I can remember
correctly, I think so. I've already
added that max width. And yes, I have added it. Let's preview this. Now
added it. Let's preview this. Now
everything is perfectly aligned. I
noticed that this mask that we added to this hero section doesn't look so nice on the phone view. So, let's just remove that for the phone variant. Let's check
it out now. Let's change some pages.
Looking good. Maybe this drag effect we don't need for the phone. So, maybe we can remove the drag effect from the phone variant just like this. Now, let's
look at another kind of effect or animation which can be achieved through component variants. So let's say that
component variants. So let's say that when I come to this project section and I hover on this card, there should be some kind of indication to tell me that I can click this project. Now there are
million ways to do this. But let's say we want to show view project when I hover on this. So what we can do is go into the component, add a hover variant
just like this. Now first thing I want is an overlay to dim the image and then we can add a view project text on top of that. So let's draw a frame here and
that. So let's draw a frame here and let's put that in here. And remember I told you whenever you put something in primary it also shows in other variants.
Let's put this frame out of this image frame just like this and make it absolute as this is going to be acting as the overlay. Actually let's stack them together and this would be our
image area. So let's rename that. Now
image area. So let's rename that. Now
let's select the frame again and set it to absolute again. Let's pin it to all sides and set it to zero. Just like
this. On the default variant, we don't want to show this. So, we can set the opacity to zero. And on this variant, I want to show it. So, I can override the opacity to 100. Just like this. And
actually, let's change the color of this frame from white to something semi-transparent, black, something like this. You might see that this is showing
this. You might see that this is showing that weird corner. That's because only image has a border radius and not the overlay frame. Well, you could add a
overlay frame. Well, you could add a border radius to overlay just like the image. But a better way is to actually
image. But a better way is to actually remove the border radius from the image and actually add border radius to the containing stack like this and set the overlay to clip. And now it is looking
fine. Now all we need to do is add a
fine. Now all we need to do is add a text here. So let's add a text saying
text here. So let's add a text saying view project. Apply our text style just
view project. Apply our text style just like this. Color can be text on color.
like this. Color can be text on color.
And let's put it inside here. And notice
that it has disappeared. That's because
it is inside the overlay frame for which we set the opacity to zero. Let's align
it in the middle just like this. And you
can see that it is showing it over here as the opacity is 100. Now when I preview this and hover, you can see that the overlay appears and so does the
text. To make it a bit more interesting,
text. To make it a bit more interesting, let's make this text appear slightly from the bottom. So let's select this text, move it down using the keyboard down arrow key. You might not see it,
but it is actually moving down. And the
proof is that this text here has also moved down in the hover variant as well.
But let's just override the position to make it center on hover. And now when I preview and hover on this, you can see that the text slides up just slightly, which looks nice. So this is another way
to use component and states to make animations and effects.
This is looking great. Now there is one more effect that I think so I should talk about that is page transitions. See
when I change to different pages the change is so abrupt. It would look much nicer if there was a smooth transition.
So to add page transitions all you got to do is select this desktop frame on the homepage and you will see this effect option. Click here to add a page
effect option. Click here to add a page transition to all pages or a single page. Let's go with all pages. If you
page. Let's go with all pages. If you
leave default settings and preview it, you can see that when I change pages, there is this crossfading transition. To
make it more interesting, you can go into the transition settings and select from different presets. For example,
this slide left. Now, when I change pages, it will slide in from the left.
One that I particularly like is this wipe up. And on top of this preset, you
wipe up. And on top of this preset, you can also decide how does this page leaves. So for example, you can change
leaves. So for example, you can change the transition basier to something like this and increase the time to 0.8 seconds. And now when you preview, you
seconds. And now when you preview, you have this beautiful wipe up transition with that smooth animation. Let's switch
the theme to dark mode and preview it again. And you can see that the dark
again. And you can see that the dark mode is looking even better, I think. So
we are done with the website. It's time
to publish the website. Before we
publish, there are a few things which are not required to publish, but you should always do those. Go to settings here. First of all, give your website a
here. First of all, give your website a title. This is very important for SEO.
title. This is very important for SEO.
You can name it anything you want. I'm
just going to call it framer tutorial.
Next, add the site language. This is an English site, so I'm going to select English. And here, add a short
English. And here, add a short description about your website. And in
here, you should always upload a favicon and a social preview. These are very important. There are some other options
important. There are some other options in here like setting a password protection or adding Google Analytics and even custom code but let's not do those today. Let's save these changes
those today. Let's save these changes and I think so we are done and now it's time to hit that publish button. And
there you go. It's published. And this
is the URL of your framework website.
Click here to view the website. And this
is looking so good. All the animations are working perfectly. The pages are responsive. It's so good. Let me zoom
responsive. It's so good. Let me zoom out a bit in the browser so I can see more content. And when I click on
more content. And when I click on another page, look at those page transitions. It's unbelievably it's
transitions. It's unbelievably it's unbelievable that you could make such a website within just short period of time. By the way, if you don't like this
time. By the way, if you don't like this URL, Framer gives you ability to add your own domain right from here. Now, if
you are on a paid plan, then you can connect your own domain. If not, you can still create a subdomain for free. for
example, the bold template.framer.ebite.
Now, this URL will take you to your website. Let's try it out. And there you
website. Let's try it out. And there you go. Now, this website is available on
go. Now, this website is available on your custom domain. As you can see up top, I just saw a problem with our phone view in the homepage, which is that this project section is not supposed to be
two columns. So, let's select this
two columns. So, let's select this project section and make it one column just like this. By the way, did you notice that in the live URL, the website is showing in the dark mode? That's
because it's nighttime where and when I'm working and my system theme is set to auto. So, if it's daytime, it's going
to auto. So, if it's daytime, it's going to be light mode and if it's nighttime, it's going to be dark mode. However,
there is a possibility to make a theme switch toggle like I have here on my portfolio website. It is a bit tricky to
portfolio website. It is a bit tricky to do that. We will explore it some other
do that. We will explore it some other day. For now, this website is done and
day. For now, this website is done and dusted. Thank you for watching this
dusted. Thank you for watching this course. As I said, if you learned
course. As I said, if you learned something from this course, please like, share, and subscribe. Learning should be free and I will try my best to keep creating these complete courses for
free. As I mentioned earlier, if you
free. As I mentioned earlier, if you don't want to create website from scratch, you can get this website template from the link below for a very low cost. Or if you want to save tons of
low cost. Or if you want to save tons of time and would like to get a premium portfolio template, check out my esteemed portfolio template which I am actually using myself. Link for that is
also in the description. Now, if you want to support my channel apart from just subscribing, you can join my YouTube membership. This keeps me
YouTube membership. This keeps me motivated to keep creating these free courses. Thank you for watching. See you
courses. Thank you for watching. See you
in the next one.
[Music]
Loading video analysis...