糟糕,<table>是块级元素吗?好像认知出错了

3个问题

开篇,先提出3个问题

  1. <table> 是块级元素block element吗?
  2. <table> 的宽度默认是 100% 吗?
  3. 块级元素block element的默认宽度是 100% 吗?

百度回答

看看百度对此上述三个问题的回复,

实际问题

但实际,我发现,百度答案可能都不对,或者说这是大家认知上的,是错的

我写了一个简单的demo,结构很简单,由 <table><span> 组成

html 复制代码
<table>
  <thead>
    <tr>
      <th>标题1</th>
      <th>标题2</th>
      <th>标题3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>内容1</td>
      <td>内容2</td>
      <td>内容3</td>
    </tr>
    <tr>
      <td>内容1</td>
      <td>内容2</td>
      <td>内容3</td>
    </tr>
  </tbody>
</table>
<span>span内联元素</span>

<table>是块级元素block element吗?

<span> 元素没有紧跟在 <table> 后面,<table> 符合block element独占一行的特征

但是,<table> 的宽度是 100% 吗?好像并不是

<table> 的宽度是自身宽度,等同于 width: auto 并不是 width: 100%

而百度/大众对块级元素的认知,块级元素宽度就是100%

这是不是和实际并不相符合?

实际上 <table> 确实是独占了一行,具备了块级元素的特征,但是宽度并不是 100% 而是 auto

留下两个疑问:

  1. 会不会 <table> 根本就不是块级元素呢?
  2. 会不会块级元素的宽度并全部是 100% ,还有 auto

进一步查看 <table> 的默认属性,

显示 <table>display: table 并不是 display: block

总结

我认为

  1. <table> 并不是真正意义的块级元素(display: block),而是具备了块级元素特征的 table 元素(display: table
  2. 它独占一行,但宽度为 width: auto
  3. 以内部宽度为准,并不会自动拉伸适配父级宽度

举个例子,<table> 自身内容宽度只有300px,那即使剩余700px宽度可用,也不会主动撑满,而是以300px为准,在区域(父级)宽度小于300px时,会压缩自身宽度适配区域(父级)宽度,总体而言,相等于原生就自带了 width: automax-width: 100% 两条css属性

这也是 width: 100%width: auto 的区别吧

这点在适配大屏幕上,可能会遗漏掉

了解的意义

我们在做项目的时候,总是使用类似 el-table 之类的组件封装,但却很少去了解基础元素本身,也可能不知道,为什么 element-ui 的组件示例代码中,为什么要加 style="width: 100%"

可能觉得删掉也是一样的呈现

PS:我复制组件代码的时候,经常删掉了这行样式,现在看来是有用意在的

el-table 是自动获取宽度并设置表格 style width 样式,并通过 <colgroup> 设置每一列的宽度,并监听了屏幕 resize 事件,时刻保持适配,所以设置 style="width: 100%" 也是为了兼容/确保获取到的当前组件的宽度是自适应的宽度吧

所以在这种情况下,让我们可以不用去管自适应的问题,可能也正是因为组件太好用了,以至于我们忘记了HTML元素本身

写在最后的毛遂自荐,大专,base广州,7年前端,目前外包,想进好公司,求捞,谢谢

相关推荐
Redstone Monstrosity16 分钟前
字节二面
前端·面试
东方翱翔23 分钟前
CSS的三种基本选择器
前端·css
Fan_web1 小时前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝1 小时前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js
cc蒲公英2 小时前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel