css 之 display: table & table-cell 的使用

在写项目的时候有这么一个需求:需要一个框后面带一个按钮,当时我就想,so easy 两个div 拼一下,但是实现的时候发现 前面的那个 input 框宽度不是很好控制,如果按钮宽度变化,有需要重新去调。 [- -||]

image.png

想到的第一种方法是:将两个都放在一个 position: relative 的容器中,按钮浮动在上层,下面的 input 100%宽度,然后设置padding。

但我看网上 ui 插件源码的时候发现了一个简单却没有用过的方式(当时看的是 vue 的 ui 库 [iview] (https://www.iviewui.com/components/input]),用的是元素的 display:table 属性(父元素),子元素都是 display: table-cell 属性。

结构是这样的:

结构.png

其中 login-modal-input 也就是组件容器的样式:

.login-modal-input {
  display: table;
  width: 100%;
  border-collapse: separate;
}

主要的元素 input 的宽度必须设置 width: 100%, 这里不会占满整个父元素,但会将input 框的宽度尽量拉大:

.login-modal-input input {
  width: 100%;
  display: table-cell;
}

而按钮部分:

.login-modal-input .append-box {
  display: table-cell
}

最终。。

结果.png

在不能用 flex 布局的情况下,table 倒是替代 flex 的部分功能。不过坑爹指出也是蛮多的,有些样式修改起来也是。


相关资料:
我所知道的几种display:table-cell的应用
大神的空间 display: table 以及 display: table-cell 可以再 ie8+ 中使用,效果类似于 display: flex,但是没有flex 功能强大。
布局神器(一)display:table-cell

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,805评论 1 92
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,514评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,625评论 0 26
  • 正闲的无聊,手机铃声响起,是发小刘嘎子打来的。嘎子说:“晚上请你吃饭,美女加咖啡,不来别后悔哟。"嘎子这货精的很...
    杨杰子江阅读 718评论 0 2
  • ㈠ 天色将将亮,阿木已然利索地打点好行装。南安睡眼惺忪地被挖起来洗漱,神游之余还不忘幽怨地瞪了阿木一眼,这才什么时...
    篱下有鹿阅读 1,261评论 4 19