美文网首页
css 之 display: table & table-cel

css 之 display: table & table-cel

作者: 滑天下之大稽 | 来源:发表于2017-08-03 17:52 被阅读0次

在写项目的时候有这么一个需求:需要一个框后面带一个按钮,当时我就想,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

相关文章

网友评论

      本文标题:css 之 display: table & table-cel

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