简介:

  在20世纪90年代,许多网页布局是使用table,使用table最主要的原因是因为可以放text到一个盒子里,但是这是一个比较复杂的过程,现在可以使用比较简单的方法,那就是css。

元素盒子:

  从里到外

  content area < content box < padding box < border box < margin box

宽度和高度:

  通常会明确定义一个元素的宽度,很少明确定义元素的高度。width和height并不能应用到inline nonreplaced elements,例如,如果你定义width和height属性到a标签,浏览器将会忽略这些声明。

下面的代码:

  a:link {color: red; background: silver; height: 15px; width: 60px}

它的宽度和高度由内容来决定,而不是定义的宽度和高度。如果你添加属性display,值为inline-block或者block,width和height属性将会起作用。

(提示:如果没有min-width和max-width属性,则width的值就是宽度。如果width的值大于max-width的值,则使用max-width的值,如果width的值小于min-width的值,则使用min-width的值。min-width的值优先级最高)

(提示:width值为auto和100%的区别,auto是除去margin,border,padding的宽度,去占用父元素的宽度。而100%则完全是占用父元素的宽度,如果元素存在margin或者border或者padding,则元素会超过父元素的范围)

width 
<length>|<percentage>|auto|inherit
初始化值 auto
可以应用该属性的元素 所有的元素,除了nonreplaced inline elements, table rows, row groups
继承性 no
百分比 是引用包含该块的元素的宽度
   
height 
<length>|auto|inherit
初始值 auto
可以应用该属性的元素 所有的元素,除了nonreplaced inline elements, table rows, row groups
百分比 是引用包含该块的元素的高度
   
   

提示:height:100%声明元素将会是它父元素的高度。height:auto,说明元素的高度依赖于它子元素的高度。

提示:你可以通过使用box-sizing属性来改变width和height属性的计算范围。你可以使用content-box或者

border-box作为计算的范围,这篇文章使用默认的计算范围(box-sizing: content-box)

Padding:

  在一个元素的content area之外,有一个区域叫做padding,它是在content和border之间的区域,

设置padding最简单的方法是通过属性padding.

padding 
[<length>|<percentage>]{1,4}|inherit
     初始值    没有定义对于shorthand elements
可以应用该属性的元素 所有元素
继承性 no
百分比 引用包含该块的元素的宽度
计算的值 看单个的属性(padding-top等等)
note padding不能设置负值

如果你想所有的h2元素有1em的padding,你可以写下面的代码:

  h2 {padding: 2em; background-color: silver}

Note: 一个元素的背景色默认扩展到padding区域,但是可以通过属性background-clip来改变背景区域。

默认元素并没有padding。

padding的属性值可以设置任何值,从ems到inches。设置padding的最简单方式是

设置一个值,这个值将会应用到四个边上。但是如果你想要在四个边上设置不同的值,那也是相当简单的,

  h1 {padding: 10px 20px 15px 5px}

值得顺序是很重要的,遵循下面的顺序:

padding: top right bottom left(TRBL)

你也可以使用不同类型的长度值,例如:

h2 {padding: 14px 5em 0.1in 3ex;}

重复的值:

  有时你输入的值可能有些重复,例如:

  p {padding: 0.25em 1em 0.25em 1em}

你并不需要记录这么多个数字,你可以使用一下的代码代替

  p {padding: 0.25em 1em}

这两个值足够代替四个值。

css定义下面的规则:

  如果left的值没有定义,则使用right的值。

  如果bottom的值没有定义,则使用top的值。

  如果right的值没有定义,则使用top的值。

让我们看一个例子:你想要元素只有left padding不是0,你可以写代码:

  h2 {padding: 0 0 0 3em;}

如果你想要p有一个空行,你可以写代码:

p {margin: 0; padding: 0.5em 0;}

单边的padding

  如果你仅仅想要设置left padding的值,你不需要设置h2 {0 0 0 3em;},你可以使用代码:

  h2 {padding-left: 3em;}

 padding-top, padding-right, padding-bottom, padding-left
<length>|<percentage>|inherit
初始值 0
可以应用该属性的值 所有元素
继承性 No
百分比 引用包含该块的元素的宽度
Note padding不能设置负值
   

下面的两种代码实现相同的效果:

h1 {padding: 0 0 0 0.25in;}

h1 {padding-left: 0.25in;}

-----------------------------

h1 {padding: 0.25in 0 0;}

h1 {padding-top: 0.25in;}

------------------------------

h1 {padding: 0 0.25in;}

h1 {padding-right: 0.25in; padding-left: 0.25in;}

通常,只要你设置超过一个边的padding,最好你使用padding。但是从文档的显示角度来看,

它并不关心你使用哪种方式。

百分比和padding

  百分比计算是根据父类元素的content area计算得来的。所以,如果父类元素的

宽度改变,则他们也会改变。例如下面的例子:

p {padding: 10%; background-color: silver;}

<div style="width: 600px">

  <p>

    this paragragh is contained within a div that has a width of 600 pixels,

    so its padding will be 10% of the width of the paragraph's parent element.

    Given the declared width of 600 pixels, the padding will be 60 pixels on all

    sides

  </p>

</div>

<div style="width: 300px;">

  <p>

    This paragraph is contained width a DIV with a width of 300 pixels,

    so its padding will still be 10% of the width of the paragraph's parent.

    There will, therefore, be half as much padding on this paragraph as that

    on the first paragraph

  </p>

</div>

考虑一下,如果你没有声明width,元素的总体宽度(包括padding)依赖于父元素的宽度。

百分比的值是相对于父元素的宽度来说的,它应用到top, bottom padding,还有left, right padding。

div p {padding-top: 10%;}

<div style="width: 500px;">

  <p>

    This is a paragragh, and its top margin is 10% the width of its parent element

  </p>

</div>

你可以混合使用百分比值和长度值,例如:

  h2 {padding: 0.5em 10%;}

Padding and Inline Elements

  到目前为止,现在的讨论是针对block boxes的元素。当padding应用到inline

nonreplaced elements时,可能会有些不同。

例如:如果你设置top和bottom padding为strong元素。

  strong {padding-top: 25px; padding-bottom: 50px;}

这种设置在文档中是允许的,但是如果你应用这种设置到inline nonreplaced element,它将不会影响到行高。当没有可见的背景,因为padding是透明的,先前的声明将没有

任何视觉效果。在inline nonreplaced elements中的padding并不会改变行高。当然,伴有background color和padding的inline nonreplaced element会有背景色

在元素的上面和下面,例如:

  strong {padding-top: 0.5em; background-color: silver;}

demo

行高并不会改变,但是由于背景色会扩展到padding。行的背景色会重叠到它之前的行。

上面说的行为仅仅是针对inline nonreplaced elements的top和bottom边。left和right边会有一些不同,

如果你为inline nonreplaced element设置left或者right padding,他们将会可见的。

  strong {padding-left: 25px; background: silver;}

如果一个inline nonreplaced element跨行,情形可能有点不同。例如:

  strong {padding: 0 25px; background: silver;}

left padding应用到元素的开始,right padding应用到元素的结尾。默认情况下,padding并不会应用到每一行的left和right边。

你可以修改跨行的行为,通过使用box-decoration-break。

Padding和Replaced Elements

你可以应用padding到replaced element上,例如:你可以应用padding到image元素上,

  img {background: silver; padding: 1em;}

不管replaced element是block-level或者inline,padding将会围绕content,背景色将会填充到

padding,你也将会看到padding将content和border分离开。

在inline nonreplaced elements中的padding并不会影响行高,但是在replaced

elements的padding中会影响行高。

Padding Borders Outlines Margins的更多相关文章

  1. CSS 笔记三(Tables/Box Model/Outline)

    CSS Tables border border: border-width border-style border-color|initial|inherit; border-width borde ...

  2. Study Tips

    1. 100% width divs not spanning entire width of the browser in webkit. Even Body can not span the en ...

  3. 复习CSS

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. CSS Questions:Front-end Developer Interview Questions

    Describe what a "reset" CSS file does and how it's useful. What Is A CSS Reset? A CSS Rese ...

  5. css 内联元素inline 行框全解

    首先看一篇文章: CSS框模型:一切皆为框 — 从行框说起 一 行框 看图说话 上图代表了框模型中的行框.line-height 属性设置行间的距离(行高).该属性会影响行框的布局.在应用到一个块级元 ...

  6. 跨浏览器开发:CSS

    理解CSS盒子模型 如果不需要很多奇巧淫技的跨浏览器兼容的 CSS 代码,透彻地理解 CSS 盒子模型是首要事情,CSS 盒子模型并不难,且基本支持所有浏览器,除了某些特定条件下的 IE 浏览器.CS ...

  7. CSS Core Technology

    1. Selector Different types of selectors: Selectors can be divided into the following categories: Si ...

  8. THE BOX MODEL

    Review In this lesson, we covered the four properties of the box model: height and width, padding, b ...

  9. CSS Notes

    Margin vs. PaddingMargin is on the outside of block elements while padding is on the inside. Use mar ...

随机推荐

  1. ios系统 ipa文件 打包流程详解 及 常见问题处理

    注:先反省一下,原本打算一天一篇,每天进步一点点,但是最近变懒了,居然三天没有更新,在此告诫各位道友及我自己,程序员需戒欲,搞技术需持之以恒,不能三天打鱼,两天晒外. 现在步入主题,前段时间使用xco ...

  2. model first,DB first,code first

    code first迁移数据库1.打开程序包管理器控制台2.运行Enable-Migrations,运行之后会生成Migrations文件夹与相应的文件 Configuration.cs3.设置 Au ...

  3. CoordinatorLayout学习笔记

    CoordinatorLayout是一个增强型的FrameLayout.它的作用有两个 作为一个布局的根布局 最为一个为子视图之间相互协调手势效果的一个协调布局 代码如下: <?xml vers ...

  4. Linux之目录基本操作命令

    Linux之目录基本操作命令 目录基本操作命令 1.tree命令 tree命令以树状图列出目录的内容. 语法 tree(选项)(参数) 选项 1.-a显示所有文件和目录 2.-A使用ASNI绘图字符显 ...

  5. Python3基础 用while 循环求解 一个整数的阶乘

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  6. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  7. 漂亮的PHP验证码

    <?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; p ...

  8. MYBATIS 无效的列类型: 1111

    查询的时候竟然也会报错,如果参数是数字,需要加上jdbcType 在xml中加上 t.chart_id = #{chartId,jdbcType=DECIMAL}

  9. Docker,容器,虚拟机和红烧肉

    Docker火了,有多火你自己看看下面的统计数据就知道了 在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超 ...

  10. 最简单的Linux虚拟机磁盘扩容方法

    思路:1.虚拟机增加磁盘容量: 2.将增加的磁盘容量增加到系统分区中: 准备阶段: 下载Gparted软件:https://sourceforge.net/projects/gparted/files ...