大家都知道html是由标签元素组成的,在了解元素的类型转换之前,让我们先来了解一下html的元素类型。
  一、html元素类型分为两种:块级元素和内联元素,内联元素又被称为行内元素。
   常见的块级元素有:div、o、dl、ul、li、h1至h6、p等,常见的内联元素有span、label、a、img、input、b、i等。它们之间有何区别呢,下面就详细演示一下。
  1、块级元素独占一行,内联元素会与其它内联元素处同一行。我们看下面的代码:
  

  1. <p>块级元素p标签</p>
  2. <span>内联元素one</span>
  3. <span>内联元素two</span>

  我们分别给p和span标签一个背景色,然后看运行效果如下:

  块级元素默认宽度是父级元素的宽度,这里我们给P元素一个小点的宽度之后,它还会占据一整行吗?答案是肯定的,效果如下:

  内联元素元素还有一个特性,就是当其所在行不能完全放下自己的位置的时候,会截断一分为二,把剩下的部分放第二行,个别元素例外。

  2、块级元素默认宽度为父级元素的宽度,内联元素的宽度是内容自然撑开,而高度两种元素都是内容自然撑开。

  如果我们单独对块级元素和内联元素设置宽高会怎么样呢?我们给上面的标签添加如下样式:

  1. p{
  2. width:200px;
  3. height:200px;
  4. background-color:#ccc;
  5. }
  6. span{
  7.  
  8. width:200px;
  9. height:200px;
  10. background-color:pink;
  11. }

  运行的结果如下:

  可见对块级元素p标签设置的宽高都有效,而对内联元素设置的宽高是无效的,这是因为内联元素不支持指定宽高,其宽高由内容自然撑开,并且受padding值的影响,我们给第一个span标签添加一个50px的padding值,效果如下:

  可见内联元素span的宽高都有变化,这里又出现了一个有趣的问题,细心的朋友肯定发现了,变宽后的span标签和上面的P标签有一部分重叠了,这是为什么呢?因为内联元素与其上下相邻元素的距离不受padding值影响,但是与左右相邻元素之间的距离是受padding值影响的。

  在这里,我们再来看看margin值的影响,先给p标签的margin一个50px的值,效果如下:

  可以看到块级元素的外边框值对上下左右都有效果。接下来我们去掉p标签的margin值,然后给第一个span写上margin:50px,得到如下效果:

  可见对于内联元素,它的margin值和padding一样只对左右相邻元素的距离产生效果,而对上下相邻元素的距离无影响。

  3、块级元素和内联元素还有一个不同点,就是块级元素能包裹块级元素和内联元素,而内联元素只能包裹内联元素,不能包裹块级元素。比如,你可以在div里放div、ul、img、span等等,都能正常显示,而在span中可以放b、i等,不能放div、p之类,这里就不上图了,感兴趣的朋友下来自己试。

  4、总结:通俗一点理解,块级元素就好比一个大人物,在页面上不管自己胖瘦都要独占一排。只要它说了让你离它远点,你就得远点,远多少都由它决定(margin值)。大人物家大业大,家里再养几个大人物和小人物都没有问题(可以包裹块级和内联元素)。

  而内联元素呢,好比一个小人物,在页面上和别的小人物们都是坐一排,一排坐满了自动坐第二排。左右两边胳膊动一动(设置margin的左右值),可以让左右的小人物们离自己远点,但是对于自己上下的人物就没法了。家里呢,养几个小人物还可以,大人物就养不起了(不能包裹块级,只能包裹内联)。

  在这里需要注意的是,有两个特例,块级元素中的p标签是不能包裹块级元素的,内联元素中的a标签可以包裹任何元素。另外内联元素input和img都支持部分块级元素的特性,比如设置宽高和上下margin值有效。

  二、接下来我们来讲讲块级元素和内联元素之间的转换

  在网页布局中,我们常常会需要块级元素具有内联元素的特征,比如58同城的这个导航栏:

  是用ul来实现的,ul中的li是块级元素,默认是独占一行,但在这里我们需要它横排显示,这时候就用到了元素的类型转换。

  想让一个块级元素转换成内联元素,在其样式中设置display:inline,再设置宽度就可以了,但是这里我们不能这样设置,因为inline值会把块级元素完全转换为内联元素,而不再具有块级元素的特性,这里我们仍需要在li里放置块级标签,所以这里我们用另外一个写法,设置display:inline-block,这样会将li转化为行内块元素,使其既能横排排列又能包裹块级元素。

  下面我们来详细说一下display这个属性,它用来做元素类型转换总共可以设置三个值:inline,inline-block,block。inline是将一个元素转换为内联元素,inline-block转换为行内块元素,block是转换为块元素。其中inline-block使用的最多,我们可以一起再来看一个将内联元素转换为行内快元素的例子,先上图:

  这样一个竖排的导航栏,一般我们用ul来实现,代码如下:

  1. <ul>
  2. <li id="li-01"> <a href="#"></a> </li>
  3. <li id="li-02"> <a href="#"></a> </li>
  4. <li id="li-03"> <a href="#"></a> </li>
  5. <li id="li-04"> <a href="#"></a> </li>
  6. <li id="li-05"> <a href="#"></a> </li>
  7. </ul>

  通过给li设置背景图片和宽高等就能显示成图上的样子,li中包含了一个a标签,a标签里没有任何内容,作为一个内联元素,此时的a标签没有大小,所以我们在页面上根本点击不到它,我们希望达到的效果是用鼠标点击li的时候就能触发a标签的链接,所以此时我们给a标签做如下处理:

  1. a{
  2. display:inline-block;
  3. width:40px;
  4. height:40px;
  5. }

  通过把a标签转换为行内块元素,再给它设置和li一样的宽高,就能够实现效果。这里直接把a标签转换为块元素的效果也是一样的。

  最后补充一点,display的block值不仅有将元素转换为块元素的作用,还有显示元素的作用,如果你在样式初始化的时候写了这样一句代码:*{display:block;},通过通配符把所有标签的display值设为block,你就会发现你写在head标签里的titile标签和style标签等的内容都会被显示在页面上。这个属性值,我们一般是和display:none(不显示),配合起来用的。比如我们常常看到一些导航栏,当鼠标放上去的时候,会出现一个二级导航栏,鼠标移开的时候二级导航栏又会消失不显示,就是通过display的这两个属性值来控制的。

  display这个属性非常强大,相当于能把元素打回娘胎重造,上面讲到的只是它的冰山一角,在css3中又引入了很多新的用法,比如display:flex将元素设置为一个弹性盒子,在这里就不一一介绍了。

  

浅析HTML的元素类型及其转换的更多相关文章

  1. HTML基础--元素类型及类型转换

    元素类型及类型转换 一.XHTML元素分类 根据css显示分类,XHTML元素被分为三种类型:块状元素,内联元素,可变元素 1.块状元素(block element) 1)块状元素在网页中就是以块的形 ...

  2. 5:CSS元素类型

    5:CSS元素类型 学习目标 1.元素类型分类依据和元素类型分类 2.元素类型的转换 3.inline-block元素类型的应用 4.置换和非置换元素的概念和应用案例 一.元素类型分类依据和元素类型分 ...

  3. 好程序员web前端分享CSS元素类型

    好程序员web前端分享CSS元素类型 目标 1.元素类型分类依据和元素类型分类 2.元素类型的转换 3.inline-block元素类型的应用 4.置换和非置换元素的概念和应用案例 一.元素类型分类依 ...

  4. 元素类型以及overflow,white-space等属性

    1:预格式化标签:<pre></pre>2:overflow属性="visible/hidden(隐藏)"/scroll/auto(自动)/inherit; ...

  5. HTML元素类型和类型的转换

    HTML元素分为:块状元素和内联元素 块元素:(block) 1.默认独占一行 2.没有宽度时,默认撑满一排 3.可以定义元素的宽和高 常见的块状元素有div,ul,li,h1-h6,ol 内联,行内 ...

  6. [改善Java代码]避开基本类型数组转换列表陷阱

    开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import ...

  7. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  8. C++四种类型的转换

    在C/C++使用的语言 (type) value(您还可以使用type(value))对于显式类型转换,经常提到投.转换程序猿的精度等完全掌握手,一个传统投往往是过度使用.成为C++要根源. 为了降低 ...

  9. JavaScript学习笔记(五)——类型、转换、相等、字符串

    第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...

随机推荐

  1. Python调试指南

    http://blog.sina.com.cn/s/blog_a15aa56901017u0p.html http://www.cnblogs.com/coderzh/archive/2009/12/ ...

  2. poj3177重修道路——边双连通分量缩点

    题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子: 对于每个叶子,互相连一条边即可:若最后剩下一个,则去和根节点连边: 所以叶子节点数+1再/2即答案. 代 ...

  3. Java类加载原理解析(转)

    1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载.Java的类加载机制是技术体系中比较核心的 ...

  4. openStack高可用性和灾备方案

    1. 基础知识 1.1 高可用 (High Availability,简称 HA) 高可用性是指提供在本地系统单个组件故障情况下,能继续访问应用的能力,无论这个故障是业务流程.物理设施.IT软/硬件的 ...

  5. 原生app与WebApp的区别

    Native App开发Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统要采用不同的语言和框架进行开发,该模式通常是由 ...

  6. linux系统下file使用的magic文件格式说明

    magic 本手册是file命令所使用的magic文件的格式说明文档,版本是5.04. file命令用于识别文件类型,其他检测,检测文件内容中是否符合 'magic模式',也就是规则. /usr/sh ...

  7. 3. docker容器内信息获取、命令的执行、容器的导入和导出

    一.依附容器 依附操作attach通常用在由docker start或者docker restart启动的交互型容器中.由于docker start启动的交互型容器并没有具体终端可以依附,而容器本身是 ...

  8. CloseHandle()函数的使用

    CloseHandle()函数的使用?? 很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHande ...

  9. gulp --watch直接退出,并没有监听

    1.在es6(彩票项目)搭建环境时遇到gulp --watch 只运行一次就退出了不能监听: D:\nodejs\es6-base>gulp --watch [::] Failed to loa ...

  10. django-跨域访问

    pip install django-cors-headers #安装cors INSTALLED_APPS = [ ... 'corsheaders', ... ] MIDDLEWARE_CLASS ...