行内元素和块级元素的具体区别是什么?inline-block是什么?(面试题目)


 一,行内元素与块级元素的区别:

1.行内元素与块级元素直观上的区别二、行内元素与块级元素的三个区别

    行内元素会在一条直线上排列(默认宽度只与内容有关),都是同一行的,水平方向排列。

    块级元素各占据一行(默认宽度是它本身父容器的100%(和父元素的宽度一致),与内容无关),垂直方向排列。块级元素从新行开始,结束接着一个断行。

2.块级元素可以包含行内元素和块级元素。行内元素不能包含块级元素,只能包含文本或者其它行内元素

3.行内元素与块级元素属性的不同,主要是盒模型属性上:行内元素设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效

二、行内元素和块级元素转换

        display:block; (字面意思表现形式设为块级元素)

       display:inline; (字面意思表现形式设为行内元素)

三、inline-block

inline-block 的元素(如input、img)既具有 block 元素可以设置宽高的特性,同时又具有 inline 元素默认不换行的特性。当然不仅仅是这些特性,比如 inline-block 元素也可以设置 vertical-align(因为这个垂直对齐属性只对设置了inline-block的元素有效) 属性。
HTML 中的换行符、空格符、制表符等合并为空白符,字体大小不为 0 的情况下,空白符自然占据一定的宽度,使用inline-block 会产生元素间的空隙。(这句话下面会用例子解释)

还是似懂非懂吗,来看下例子吧,保证就懂了

详细应用

在了解inline-block之前,导航栏一直采用float浮动来达到横向排列的目的,然而浮动是会产生副作用的,需要清除浮动,相对变得麻烦了。使用inline-block将会变得很方便:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <style>
        div{
            width: 100%;
            background: yellow;
            height: 100px;
            text-align: center;
            line-height: 100px;
        }
        a{
            color:#fff;
            text-decoration: none;
            display: inline-block;
            width: 100px;
            height: 30px;
            line-height: 30px;
            background: red;
        }
    style>
head>
<body>
    <div>
        <a href="">我是a1a>
        <a href="">我是a2a>
        <a href="">我是a3a>
        <a href="">我是a4a>
    div>
body>
html>

 效果

有没有发现,每个a之间都会有一个空隙,这个空隙是因为块级元素会换行,就有换行,HTML 中的换行符、空格符、制表符等合并为空白符.所以换行符会占据宽度,产生间隙 

如何取消inline-block产生的间隙

下面举例说明2种方法,更多方法请参考张鑫旭文章:去除inline-block元素间间距的N种方法

第一种

使用负值的margin各个浏览器的负值也不相同,才能完美贴合

浏览器 margin值(左右)
火狐 margin:-4px
chrome margin:-3px
IE margin:-2px

第二种

父元素的css中设置word-spacing负值

浏览器 word-spacing
火狐 word-spacing:-8px
chrome word-spacing:-6px
IE word-spacing:-4px

效果

兼容性

很遗憾,IE7以下的浏览器不支持inline-block,但并非完全不支持

解决IE6、IE7兼容性的方法:

1、首先设置inline-block触发块元素,具有了layout的特性,然后设置display:inline使块元素呈现内联元素,此时layout的特性不会消失。

2、直接设置display:inline,使用zoom:1触发layout。

兼容所有浏览器的方法是:

display:inline-block;

*display:inline;

*zoom:1;

块级元素列表
定义地址
定义表格标题
定义列表中定义条目
定义文档中的分区或节
定义列表
定义列表中的项目
定义一个框架集
创建 HTML 表单

定义最大的标题

定义副标题

定义标题

定义标题
定义标题
定义最小的标题

创建一条水平线
元素为 fieldset 元素定义标题
  • 标签定义列表项目
    </td> <td>为那些不支持框架的浏览器显示文本,于 frameset 元素内部</td> </tr> <tr> <td><noscript></td> <td>定义在脚本未被执行时的替代内容</td> </tr> <tr> <td><ol></td> <td>定义有序列表</td> </tr> <tr> <td><ul></td> <td>定义无序列表</td> </tr> <tr> <td><p></td> <td>标签定义段落</td> </tr> <tr> <td><pre></td> <td>定义预格式化的文本</td> </tr> <tr> <td><table></td> <td>标签定义 HTML 表格</td> </tr> <tr> <td><tbody></td> <td>标签表格主体(正文)</td> </tr> <tr> <td><td></td> <td>表格中的标准单元格</td> </tr> <tr> <td><tfoot></td> <td>定义表格的页脚(脚注或表注)</td> </tr> <tr> <td><th></td> <td>定义表头单元格</td> </tr> <tr> <td><thead></td> <td>标签定义表格的表头</td> </tr> <tr> <td><tr></td> <td>定义表格中的行</td> </tr> </tbody> </table> <table class=" "><caption>行内元素列表</caption> <tbody> <tr> <td><a></td> <td>标签可定义锚</td> </tr> <tr> <td><abbr></td> <td>表示一个缩写形式</td> </tr> <tr> <td><acronym></td> <td>定义只取首字母缩写</td> </tr> <tr> <td><b></td> <td>字体加粗</td> </tr> <tr> <td><bdo></td> <td>可覆盖默认的文本方向</td> </tr> <tr> <td><big></td> <td>大号字体加粗</td> </tr> <tr> <td><br></td> <td>换行</td> </tr> <tr> <td><cite></td> <td>引用进行定义</td> </tr> <tr> <td><code></td> <td>定义计算机代码文本</td> </tr> <tr> <td><dfn></td> <td>定义一个定义项目</td> </tr> <tr> <td><em></td> <td>定义为强调的内容</td> </tr> <tr> <td><i></td> <td>斜体文本效果</td> </tr> <tr> <td><img></td> <td>向网页中嵌入一幅图像</td> </tr> <tr> <td><input></td> <td>输入框</td> </tr> <tr> <td><kbd></td> <td>定义键盘文本</td> </tr> <tr> <td><label></td> <td>标签为 input 元素定义标注(标记)</td> </tr> <tr> <td><q></td> <td>定义短的引用</td> </tr> <tr> <td><samp></td> <td>定义样本文本</td> </tr> <tr> <td><select></td> <td>创建单选或多选菜单</td> </tr> <tr> <td><small></td> <td>呈现小号字体效果</td> </tr> <tr> <td><span></td> <td>组合文档中的行内元素</td> </tr> <tr> <td><strong></td> <td>语气更强的强调的内容</td> </tr> <tr> <td><sub></td> <td>定义下标文本</td> </tr> <tr> <td><sup></td> <td>定义上标文本</td> </tr> <tr> <td><textarea></td> <td>多行的文本输入控件</td> </tr> <tr> <td><tt></td> <td>打字机或者等宽的文本效果</td> </tr> <tr> <td><var></td> <td>定义变量</td> </tr> </tbody> </table> <table class=" "><caption>可变元素素列表--可变元素为根据上下文语境决定该元素为块元素或者内联元素</caption> <tbody> <tr> <td><button></td> <td>按钮</td> </tr> <tr> <td><del></td> <td>定义文档中已被删除的文本</td> </tr> <tr> <td><iframe></td> <td>创建包含另外一个文档的内联框架(即行内框架)</td> </tr> <tr> <td><ins></td> <td>标签定义已经被插入文档中的文本</td> </tr> <tr> <td><map></td> <td>客户端图像映射(即热区)</td> </tr> <tr> <td><object></td> <td>object对象</td> </tr> <tr> <td><script></td> <td>客户端脚本<br><br></td> </tr> </tbody> </table> </div> <!--conend--> <div class="p-2"></div> <div class="arcinfo my-3 fs-7 text-center"> <a href='/t/etagid4929-0.html' class='tagbtn' target='_blank'>htmlcss</a><a href='/t/etagid72492-0.html' class='tagbtn' target='_blank'>blockinline-blockinl</a> </div> <div class="p-2"></div> </div> <div class="p-2"></div> <!--xg--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle"><h2 class="fs-4">相关</h2></div> <hr> <!----> <!----> </div> <!--xgend--> </div> <div class="col-lg-3 col-12 p-0 ps-lg-2"> <!--box--> <!--boxend--> <!--<div class="p-2"></div>--> <!--box--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle pb-2"><h2 class="fs-4"><a href="#">标签</a></h2></div> <div class="clearfix"></div> <ul class="m-0 p-0 fs-7 r-tag"> </ul> <div class="clearfix"></div> </div> <!--box end--> </div> </div> </div> </main> <div class="p-2"></div> <footer> <div class="container-fluid p-0 bg-black"> <div class="container p-0 fs-8"> <p class="text-center m-0 py-2 text-white-50">一品网 <a class="text-white-50" href="https://beian.miit.gov.cn/" target="_blank">冀ICP备14022925号-6</a></p> </div> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6e3dd49b5f14d985cc4c6bdb9248f52b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </footer> <script src="/skin/bootstrap.bundle.js"></script> </body> </html>