Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS: Width in percentage and Borders

Tags:

html

css

layout

I've defined widths of the containers in percentage. I'd like to add a border (3px on right side of a width), since container width is in % while the border width is in px, how can I adjust the width of the container?

<div class="wrap">   <div class="left">...</div>   <div class="right">...</div> </div>  .wrap{     width:100%; }  .left{     width:30%; }  .right{     width:70%; } 

I'd like to add 3px border on the right side of .left. For example:

.left{     width:30%;     border:3px solid #000; } 

Since I have defined width in the %, what is the best way to re-adjust the width of the .left. I can roughly decrease the width to 29%, but I want to do precisely.

like image 359
user1355300 Avatar asked Jun 17 '12 08:06

user1355300


People also ask

How do you display border-width in CSS?

The syntax for the CSS border-width property (with 2 values) is: border-width: top_bottom left_right; When two values are provided, the first value will apply to the top and bottom of the box. The second value will apply to the left and right sides of the box.

What is width percentage CSS?

The <percentage> CSS data type represents a percentage value. It is often used to define a size as relative to an element's parent object. Numerous properties can use percentages, such as width , height , margin , padding , and font-size .

Does border Add to width CSS?

By default in the CSS box model, the width and height you assign to an element is applied only to the element's content box. If the element has any border or padding, this is then added to the width and height to arrive at the size of the box that's rendered on the screen.


2 Answers

Use the box-sizing: border-box property. It modifies the behaviour of the box model to treat padding and border as part of the total width of the element (not margins, however). This means that the set width or height of the element includes dimensions set for the padding and border. In your case, that would mean the element's width and it's border's width would consume 30% of the available space.

CSS box model

Support for it isn't perfect, however vendor prefixes will catch most if not all modern browsers:

.left {     width: 30%;     border: 3px solid #000;      -moz-box-sizing: border-box;     -webkit-box-sizing: border-box;     -ms-box-sizing: border-box;     box-sizing: border-box; } 

More information can be found on the MDN and Quirksmode.

According to Quirksmode, using the 3 vendor prefixes above (-moz-, -webkit- and -ms-), you get support for all browsers, even IE8.

like image 61
Bojangles Avatar answered Sep 21 '22 15:09

Bojangles


The easiest cross-browser way is to NOT set the border on the outer divs, and instead set it on a NEW div inside .left. Simple, and works well.

like image 26
Emil Stenström Avatar answered Sep 21 '22 15:09

Emil Stenström