前端(五)

278 阅读5分钟

一盒子模型

先来吐槽,学过android的应该知道:控件的宽和高指定了就不会改变,内容和padding共同分配这块区域,margin不属于控件的一部分。然而前端概念就多了:css宽高仅仅是内容区域的宽高盒子的大小是:内容区域+2*padding+2*border+2*margin标签的大小是:内容区域宽高+2*padding+2*border。(android 好像是按照IE的规则去做的,不过在被前端淘汰了~)

1.1body也有margin

<body>标签有必要强调一下。很多人以为<body>标签占据的是整个页面的全部区域,其实是错误的,正确的理解是这样的:整个网页最大的盒子是<document>,即浏览器。而<body><document>的儿子。浏览器给<body>默认的margin大小是8个像素,此时<body>占据了整个页面的一大部分区域,而不是全部区域。

1.2认识weight和height

盒子的宽高!= css中写的宽高,css中写的仅仅是内容的占用区域。

1.3认识padding

padding有四个方向,所以我们能够分别描述4个方向的padding。

写法一:

padding-top: 30px;
padding-right: 20px;
padding-bottom: 40px;
padding-left: 100px;

写法二:综合属性的写法:(上、右、下、左)(顺时针方向,用空格隔开。margin的道理也是一样的)

padding:30px 20px 40px 100px;
  • 如果写了四个值,则顺序为:上、右、下、左。
  • 如果只写了三个值,则顺序为:上、右、下。??和右一样
  • 如果只写了两个值,则上、右边、和上一样、和右一样。

1.4认识border

border就是边框。边框有三个要素:像素(粗细)、线型、颜色。

border是一个大综合属性。比如说:

border:1px solid red;

就是把4个边框,都设置为1px宽度、线型实线、red颜色。

1.5margin

标准文档流中垂直方向margin有塌陷问题;

margin尽量不要用在父子之间,最好用在兄弟之间;

margin 0 auto;是让盒子居中,要求有明确的宽度;

二标准文档流的特性

我们在前边的文章中也说道过一些关于文档流的特性,这里系统归纳一下:

  • 无论多少个空格、换行、tab,都会折叠为一个空格。
  • 同行内高低不齐,底部对齐。
  • 行内元素和块级元素的区别。

         行内元素:

              与其他行内元素并排;

              不能设置宽、高。默认的宽高,就是文字的宽高(行内替换元素除外)。

               paddingtop paddingbottom margintop marginbottom 设置无效,效果看上去有效的也不会影响其他元素的位置(img除外)

         块级元素:

               霸占一行,不能与其他任何元素并列;

               能接受宽高。如果不设置宽度,那么宽度将默认变为父亲的100%,高度是包裹内容。

三行内元素和块级元素转换

我们可以通过display属性将块级元素和行内元素进行相互转换。display即“显示模式”。

块级元素可以转换为行内元素:

一旦,给一个块级元素(比如div)设置:

display: inline;

那么,这个标签将立即变为行内元素,此时它和一个span无异。inline就是“行内”。也就是说:

  • 此时这个div不能设置宽度、高度;
  • 此时这个div可以和别人并排了。

行内元素转换为块级元素:

同样的道理,一旦给一个行内元素(比如span)设置:

display: block;

那么,这个标签将立即变为块级元素,此时它和一个div无异。block”是“块”的意思。也就是说:

  • 此时这个span能够设置宽度、高度
  • 此时这个span必须霸占一行了,别人无法和他并排
  • 如果不设置宽度,将撑满父亲

四浮动

标准流里面的限制非常多,导致很多页面效果无法实现。如果我们现在就要并排、并且就要设置宽高,那该怎么办呢?视乎根据现有的标准文档流规定没法实现。办法是:移民!脱离标准流! 

css中一共有三种手段,使一个元素脱离标准文档流:

  • (1)浮动
  • (2)绝对定位
  • (3)固定定位

浮动基本准则是(切记):划定一块一的区域,每个区域内浮动。如果每个元素都去浮动,容易照成混乱

接下来总结一下通过浮动特性,来更好的使用浮动布局:
  • 浮动的元素脱离标准文档流,并且不再区分行内和块级,都可以设置宽高
  • 浮动的元素互相贴靠。
  • 浮动元素有字围效果
  • 收缩性:div浮动,宽度就变成了包裹内容。

会发现浮动会影响标签标准文档流的特性,有时候开发需要清除这样的影响

方法一:给浮动元素的祖先元素加高度

如果一个元素要浮动,那么它的祖先元素一定要有高度。

有高度的盒子,才能关住浮动。(记住这句过来人的经验之语)

方法二:clear:both;

如果祖先高度是0,那么意味着浮动没有被关住,但是不想让后边标签因为管不住而受到影响,就需要在后边标签属性上加上clear:both;这种方法有一个非常大的、致命的问题,它所在的标签,margin属性失效了。两个父标签之间没有间隙了。一个父亲是不能被浮动的儿子撑出高度的。

方法三:隔墙法;

上面这个例子中,为了防止第二个div贴靠到第二个div,我们可以在这两个div中间用一个新的div隔开,然后给这个新的div设置clear: both;属性;同时,既然这个新的div无法设置margin属性,两个父盒子之间还是没有高度。一个父亲是不能被浮动的儿子撑出高度的。

方法四:内墙法;内墙法可以给它所在的家撑出高度。

方法五:overflow:hidden;给父亲加上overflow:hidden; 那么,父亲就能被儿子撑出高了。