Intro to Framer » First steps

First steps

Let’s get our feet wet by trying out a few simple things.

Open Framer and click the + button to get an empty document (or select New from the File menu) and go to the Code tab.

Save your project as First steps.

By default, you’ll have Canvas as the selected device, which is good because it has a clean white background and will show everything at its actual pixel size.

First things first: Framer works with layers. Everything you see in a prototype is a layer. You can draw layers in Design (or import them), but here, to better understand the basics, we’ll create them in Code.

Create a new Layer by typing ⇧⌘N.

layerA = new Layer

If you prefer to write your code manually, make sure to type Layer with a capital ‘L’.

Hi there, layerA

You’ve created a layer with the name ‘layerA’. You can use any name, even ‘Bob’ or ‘Susie’, but it’s best to give your layers descriptive names, like ‘navigationBar’, ‘timeline’, ‘avatar’, ‘saveButton’, etc.

The above line actually says the following:

layerA is a new object of type Layer.

Later we’ll talk about what objects precisely are.

It’s not obligatory, but the convention is to start the names of your layers with a lowercase letter. So that would be ‘bob’ and not ‘Bob’.

You cannot use spaces, so for longer names, it’s best to use camel case. E.g.: ‘navigationBar’, or ‘navBar’ for friends.

Ah, and one more thing: don’t start your names with a number, so no ‘1stLayer’. But names like ‘layer1’ or ‘layer1ofMany’ are perfectly okay.

You’re free to use spaces, points, commas or other ‘forbidden’ punctuation marks in Design. They will automatically be replaced by an _ underscore. Starting the name of a layer with a number isn’t a problem either, because Framer will add a $.

We didn’t add any details about the size, position or even color of our layer, so Framer is using default values.

Let’s give ‘layerA’ some properties.

Click the little handle next to layerA to put it in edit mode.

When a layer is in edit mode, you can change its position by dragging it, and change its dimensions by dragging the handles.

Position the layer 150 from the left (x) and 400 from the top (y), and make it 350 by 100 points. Instead of dragging the layer you can also enter these values in the Layer Panel.

Or you can be a hacker and type everything directly in code. Type a tab to indent the lines with properties.

layerA = new Layer
	x: 150
	y: 400
	width: 350
	height: 100
Download Framer project

You can put different properties on the same line, if you want, by separating them with commas:

layerA = new Layer
	x: 150, y: 400
	width: 350, height: 100

You can even use math operators like +, -, *, and / (add, subtract, multiply, divide). So when you’re figuring out the correct position of a layer, you can do things like: “Ten more points to the right… and maybe another four.” (150+10+4)

Try this:

layerA = new Layer
	x: 150+50
	y: 400/2
	width: 350-50
	height: 100*3
Download Framer project

When you use a calculation (or anything but a number) to set a property, you’ll see a little padlock appear in the properties panel.

Padlocks for calculated values

It’s the panel’s way of saying: “I’m not touching this!”, and that’s good because you wouldn’t want it to override your custom code.

By the way, using math operators in the Properties Panel will directly calculate the result (like in Framer Design, or in Sketch).

How to make a gray square

The result is a 300 by 300 pt square, positioned 200 pt from the left and the top.

So yes, the same as this:

layerA = new Layer
	width: 300
	height: 300
	x: 200
	y: 200
Download Framer project

We’ll now change the default background color and give the square a touch of border radius.

Pro tip: To get to edit mode you don’t always have to click the little handle, you can just type ⌘E when your cursor is somewhere in the layer’s code block.

Set a border radius of 50 pt by dragging the little handle in the layer’s top left corner.

The background color can be picked in the properties panel. The panel will always write an “rgba()” value, even when you select a crayon, or one of the web safe colors in hex notation like #00FF00.

But you can, in fact, use any CSS color notation in your code. Try "red", one of the CSS named colors.

layerA = new Layer
    width: 300
    height: 300
    x: 200
    y: 200
    borderRadius: 50
    backgroundColor: "red"
Download Framer project

Note that whenever a value is not a number but text, like the string "red", it must be enclosed in quotation marks.

Hi, I’m Red

You can also change a layer’s properties after having created it.

Let’s make the square orange and convert it to a circle by giving it a border radius of 150.

layerA = new Layer
    width: 300
    height: 300
    x: 200
    y: 200
    borderRadius: 50
    backgroundColor: "red"
layerA.backgroundColor = "orange"
layerA.borderRadius = 150
Download Framer project

These two new lines override the earlier backgroundColor and borderRadius values. You can change the properties of a layer at any time.

Note that for changing existing properties you have to use dot notation, and write equality signs instead of colons.

How about a circle?

Another way to change properties is to set them on props. In this case, you do write them in the same way as when creating a layer (and you have to type less).

layerA = new Layer
    width: 300
    height: 300
    x: 200
    y: 200
    borderRadius: 50
    backgroundColor: "red"
layerA.props =
    backgroundColor: "orange"
    borderRadius: 150

Enough with the static layers, let’s move some stuff around. Time to animate!