美文网首页让前端飞
为什么img标签是inline元素还可以设置宽高?

为什么img标签是inline元素还可以设置宽高?

作者: xuelulu | 来源:发表于2019-04-23 18:16 被阅读1次

之前刷面试题,看到一道题目 如题!?惊到了,以前写代码怎么没注意到这样的细节 ( ̄▽ ̄)"
真是才疏学浅了。
参考:可替换元素 - CSS:层叠样式表 | MDN


img默认display: inline
原来CSS中还有一个概念:可替换元素

MDN上是这么解释的:

  在 CSS 中,可替换元素replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。
  简单来说,它们的内容不受当前文档的样式的影响。CSS 可以影响可替换元素的位置,但不会影响到可替换元素自身的内容。例如 <iframe> 元素,可能具有自己的样式表,但它们不会继承父文档的样式。
典型的可替换元素有:

  • <iframe>
  • <video>
  • <embed>
  • <img>

有些元素仅在特定情况下被作为可替换元素处理,例如:

  • <input>
    "image" 类型的 <input> 元素就像<img>一样可替换
  • <option>
  • <audio>
  • <canvas>
  • <object>
  • <applet>(已废弃)

CSS的 content 属性用于在元素的 ::before 和 ::after 伪元素中插入内容。使用content 属性插入的内容都是匿名的可替换元素

这些元素有一个共性,就是他们的内容都不是通过在标签内添加文本,而是通过某个属性(src、data(<object>)、label(<option>)或js控制(<canvas>))来显示内容的。
可替换元素拥有内置宽高,他们可以设置width和height。他们的性质同设置了display:inline-block的元素一致。

ps:我在看别人的资料的时候,看到个误区,textarea、button等并不是可替换元素,他们是浏览器默认的内联块元素。

display: inline-block;

额外知识:

  1. 当需要给图片设定固定宽高,并需要不拉伸时(等类似情况),
    1)背景图,background-size配合background-position。(适用于装饰性图片)
    background-size: [ <length-percentage> | auto ]{1,2} | cover | contain;
    background-position: [ left | center | right | top | bottom | <length-percentage> ]{1,2}
    background-position值还可以是边偏移量:例:background-position: bottom 10px right 20px;
    2)img元素,object-fit配合object-position。(适用于内容图片)
    object-fit: fill | contain | cover | none | scale-down;
    object-position: 同background-position;
    object-position和background-position的区别在于默认值不同,
    object-position默认为50% 50%;
    background-position默认为0% 0%;

2.图片img元素下面有一段空白区域,是因为vertical-align和line-height。


空白区域

解决:img元素display: block;
图片来自:CSS深入理解vertical-align和line-height的基友关系

3.vertical-align 只对行内元素、表格单元格元素生效。
vertical-align: baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>;

基本概念

图片来自:深入理解 CSS 中的行高与基线

相关文章

  • CSS 文字环绕图片

    前言 img是行内元素,因为img标签不会独占一行。之所以img可以设置其宽高,是因为img标签既是行内元素,还是...

  • 为什么img标签是inline元素还可以设置宽高?

    之前刷面试题,看到一道题目 如题!?惊到了,以前写代码怎么没注意到这样的细节 ( ̄▽ ̄)"真是才疏学浅了。参考:可...

  • 宽度与高度

    1.内联元素的宽高 给 inline 元素设置宽高是没有任何效果的 给inline元素设置margin,paddi...

  • html及html5知识笔记

    html标签知识 img标签为内联元素,但是其自带width和height属性,所以其可以设置宽高; a标签上的n...

  • 块级标签与行级标签的区别与转化

    区别: 1.块级元素可以设置宽高,行级元素不能设置宽高(只能根据文字来设置,比较特殊的是img\input是可以设...

  • display:inline-block

    inline-block 的元素既具有 block 元素可以设置宽高的特性,同时又具有 inline 元素默认不换...

  • 浅谈html中的置换元素和非置换元素

    置换元素: 1、可以设置宽高,有自己的属性,和inline-block有一样的属性。 2、主要是指 img、inp...

  • Display简析

    block:默认宽度为父元素宽度,可以设置宽高,换行显示 inline: 默认宽度为内容宽度,不可设置宽高,同行显示。

  • 【CSS单标签和meta属性】

    meta属性 单标签 meta、hr、br、img、link、input 既是行内属性标签又可以设置宽高的标签 a...

  • HTML5:canvas

    1.canvas是inline-block元素,canvas和 img相同,不建议用css控制canvas初始宽高...

网友评论

    本文标题:为什么img标签是inline元素还可以设置宽高?

    本文链接:https://www.haomeiwen.com/subject/ccnxwqtx.html