CSS中提的height属性对行内非替换元素无效,啥是行内非替换元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS中提的height属性对行内非替换元素无效,啥是行内非替换元素?相关的知识,希望对你有一定的参考价值。

我知道行内元素与块级元素的区别。但“行内元素”与“行内非替换元素”有什么区别呢?

“行内元素”包含了“行内非替换元素”,他们的唯一区别就是该元素是否是替换元素,一般常见的替换元素是 <img> <input> <select> <textarea> 等元素,前面所列元素都是“行内元素”。但“行内元素”还包括<span> <em> <strong> <a> 等元素。
注:替换元素是指内容的呈现不是由自己决定,而是由属性中的值来决定。
例如:<img src="xxx.jpg" />
参考技术A 行内元素(inline) 置于行内的元素 如 span a label ,没有高度和宽度
行内框(inline-box) 置于行内的框元素 如 input
块元素(block) 独占一行,如p,div
行内非替换元素在Web规范里面没有这个说法,我想应该是inline-box的不专业说法.
参考技术B 1. 行内非替换元素

一般是 该元素的内容直接就显示在文档中,如 p元素 中的文本 就 原样不动的显示在最终的界面上。

2.行内替换元素

作为其他显示的一个钩子元素 ,比如 img input 等 ,是要 指示用户代理 插入一个 控件或图片的。
ps:比如 a 如果想设置 width 就必须加入 adisplay:block 转换成块级
个人理解 新手 勿喷
参考技术C 行内就块状元素。
如:div h1 他们不写宽度独占一行 称这是块状元素。
span font b 这些一行不写宽度可以放很多个,,称这是非块状元素,也叫行内元素。
我是这么理解的,希望帮到你,也希望不要误导你.

行内替换元素的行内框高度

img元素

font-size和line-height对图片的行内框没有任何影响。换句话说,就是这两个值不论怎么变也不会影响图片的垂直位置

但它还是有一个相对的line-height值,vertical-align的百分比值相对于元素的line-height来计算。

img下外边距边界与基线对齐,就是元素的底部与基线对齐,也可以认为图片的基线就是它的最底部

图片高度改变不会影响line-height值

行内框高度=height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>js</title>
    <link rel="stylesheet" href="">
    <style>
        p {
            border: 1px solid red;
        }
        img {
            padding: 10px;
            background-color: green;
            border: 10px solid cyan;
            margin: 10px;
        }
    </style>
</head>
<body>
    <p>aaa<img src="images/2.jpg" alt=""><span>bbb</span></p>
</body>
</html>

 结果:

表单元素

type=text, textarea,type=button, 等与文字结合的表单元素

font-size 与 line-height影响其行内框高度,其实质还是里面的字体在起作用,font-size和line-height都应用到了字体的身上。即使加上宽高限制也是一样的。

text, textarea等输入框表单元素因为里面能输入文字,其实质还是改变文字字体大小与行高。

其本身高度影响自然也会其行内框高度,height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom;

所以这些与文字结果的表单替换元素,其行内框高度由其本身垂直方向上的高度(包括内容,外边距,边距和内边距)和与之相关的字体的font-size与line-height决定。谁在是谁。

input这种替换元素的baseline并不在元素的底部,所以并不是底部与基线对齐

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>js</title>
    <link rel="stylesheet" href="">
    <style>
        form {
            border: 1px solid blue;
        }
        .txt {
            width: 640px;
            height: 20px;
            padding: 5px 3px 5px 5px;
            border: 1px solid red;

        }
        .btn {
            width: 90px;
            height: 32px;
            background-color: #c40000;
            border: none;
        }
    </style>
</head>
<body>
    <form action="">
        <input type="text" class="txt">
        <input type="button" class="btn" value="提交">
    </form>
</body>
</html>

结果:

.btn {
    font-size: 30px;
}

当增大字号时:

由于文本框的baseline并不在它的底部。所以它并未与文字的底部对齐,才会造成上面的错位现象。

通过给文本框加 vertical-align: bottom; 可以解决上面的错位问题

当font-size或者line-height值很大时,即使文字看不见了,但依然会撑起其行内框的高度

.btn {
    font-size: 60px;
}

总结: 

所以行内替换元素可以分为两种,一种是不与文字结合的,一种是与文字结合的

不会文字结合的,行内框高度=height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom;

与文字结合的,如果字体的行高大于height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom

则行内框的高度为行高,否则就是垂直方向属性和。总之就是谁大是谁。

 

以上是关于CSS中提的height属性对行内非替换元素无效,啥是行内非替换元素?的主要内容,如果未能解决你的问题,请参考以下文章

CSS一些总结

Css 知识点

行内元素和块级元素的区别

块级元素和行内元素的区别 (block vs. inline)

行内替换元素的行内框高度

2017前端面试题之Css篇