Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Often to control form layout, designers will resort to adding tables to their forms even when there is no semantic reason to utilize a table to display data. So to avoid this needless markup, you should use CSS to control all form layout presentation and leave your form markup as logical as possible. So in this exercise we will tackle two problems most designers face when dealing with form layout. Lining up text input boxes and labels and creating multi-column checkboxes or radio button groups. So, again if you are working along with me, we are still in the contact.htm file and we are about to do a few more stylistic elements here to our forms.
It's a common practice for most people to actually select the text input field and go down to the Property inspector and insert a character width and a maximum amount of characters and there is nothing wrong with doing it that way. As a matter of fact you can go ahead and insert a maximum number of characters if you want for this. Let's do let's say a 60 and maybe we will do the same thing for the Email. I will click Email and type in a maximum number of characters there. But I am not going to do a Character Width, and the reason I am not going to do a Character Width is because I can actually control that through cascading style sheets. So I am going to open up my CSS Styles panel and if your styles are all expanded down as mine are, I am going to close main.css and there is contact_secondary. Now I could edit it here, but it's going to be a lot easier for me to do this by hand. So I am going to double-click contact_secondary to open up that style sheet.
If I scroll down the Styles I am going to find a commented area that is just for form styles. So I am going to keep going down until I find the clear class style. I am just going to add a rule right underneath clear. So let's go ahead about line 69 and add a new rule. So let's type in input, input is actually an element selector and it refers to almost every form element. So checkboxes, text areas, text fields, those are all considered input tags. So I am going to go ahead and open up my curly brace and I am just going to pass along one value to it, width, and I am going to make that value equal to 200 pixels wide. So we will save that and now if I go back to contact.htm, I can see that the width of every element has really expanded. Now it's not going to stretch your checkboxes to 200 pixels wide but what it does is it makes the area that that element occupies 200 pixels wide. It's also done the same thing for our Additional Comments and if I scroll down I can see that the other form elements are experiencing about the same thing. So let's go back up to the top of the form.
So that's not necessarily what I want for everything. Maybe for the input text fields but not for my other form fields. So let's see how we can kind of avoid it for those guys. If I actually select one of the checkboxes, I notice down on my Tag Selector that the checkbox is input.checkbox. Now that doesn't occur naturally. So if I switch over to Code View I can actually see that this checkbox has a class applied to it called checkbox. As a matter of fact, all the checkboxes have that class applied to it. Now we are using this for stylistic purposes, so what we would want to do is go through and find every field that you don't want to be controlled through that generic input element and create a class for it. And we are going to write a group selector that's going to basically turn that width off. The other thing that this does for us is it allows us to pass in information about what this object is. So assigning a class value to this is not necessarily needless markup; it is conveying information.
So let's go back to our contact_ secondary and underneath my input I am first going to go ahead insert a comment. Remember, we can do that with our coding toolbar. I can just click Apply Comment and we will do a CSS comment here. Inside this comment I am going to type in reset width for non-text inputs. Anytime you are doing a rule that's basically responding to another rule or resetting some value, you probably want to throw a comment in there so that not only people working with you or people who might be coming after you understand what's going on, but this is to remind yourself of what you have done this and sometimes that's more important than anything else.
So I am going to type in input.radio, so those will be on my radio buttons and I will do a comment and say input. checkbox. I will do another comment and I will type in input.submit and then finally I will open a curly brace and assign a width value to this as well. But this width value is just going to auto and that is our way of telling these elements whatever width you naturally go ahead and be that width. So I will go ahead and save this. Now when I go back to my contact form, switch over to Design View, you can see that although my text elements are exactly the width I need them to be, all my checkboxes have now reverted back to their normal width.
Now the second part of this is making sure that our labels in our text input fields are lined up. Name and Email are about the same width, but occasionally you are going to have Address and maybe Street Address and other things like this are going to be much longer and those typically give you form elements a ragged justified appearance. So by going ahead and establishing a width for input elements and then establishing a large enough margin with your label elements, you can ensure that you are going to have properly lined up labels and elements regardless of their width. So let's go back to our contact_secondary.css and underneath the rule that we just scripted we will do another rule. Here, we are going to go ahead and comment this one out as well since we are applying some pretty specialized selectors, we will go ahead and comment these out.
In this one we will type in display labels next to form elements, add a class for when you want them to stack. Okay, so what is this doing? Well, these rules are going to make sure our labels are appearing either to the side or above the form elements. Sometimes we are going to want our labels out to the side; sometimes we are going to want them above it. So this is going to give us the flexibility to do both and we are going to pass along our margin that's also going to keep the labels far enough away from our elements so that they are lined up properly.
So the first one will be our label element tags. We go ahead and do label and inside that we are going to go ahead and float that to the left. So we are using floats here and we have actually floated a container element. Don't forget to do that. So you could float the fieldset tag or you could float the form tag itself. That would make sure that will still contain these floats. Underneath that we are going to type in margin and we will go down to margin-right and we will go ahead and give this a margin of 2 em. So we are tying that to the actual text size which is a good idea because labels are textual. All right, so we will go down right below that and we will pass in a class as well. So we will type in a label.top. Now that's all one word, there is no spaces there, so label.top. That is an element-specific class selector and underneath that we will type in display. We will change the display to block and underneath that we will type in float and we will pass in the value of none. So that's turning off our float and it's making it display as a block label element. Now block label elements occupy their own space. This will not allow the label and the form element to reside on the same line.
So we will go ahead and save that, go back to contact.htm and now notice that our Name and Email have a little bit of distance between and our form elements. If we scroll down and look at Additional Comments, Additional Comments is not on its own line and lined up directly above our text area. If I click inside Additional Comments I can see that this already has a label tag with the top class applied to it. So here we are using both methods. So let's go ahead and save this file. That helps up deal with the layout problem of lining up text input boxes and labels. In our next exercise, we will look at creating multi-column checkboxes or radio button groups so that they can stack next to each other vertically.
Get unlimited access to all courses for just $25/month.Become a member
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.
Your file was successfully uploaded.