按钮和输入的垂直文本对齐
你曾经苦恼于文本的垂直对齐吗?我想很多的前端开发者都会遇到这样的烦恼吧,那么本文就来给你详细介绍一下如何利用line-height, padding以及flexbox实现相应的对齐功能。
基本的按钮和输入风格
一个按钮和输入的高度以及垂直对齐是由他的边框,padding,字体大小以及line-height决定的。

有了这个理解之后,我们来定义按钮以及输入的基本风格:
<input class="form-control" type="text" value="Input element">
<button class="btn">Button</button>
<style>
.btn, .form-control {
/* reset user agent stylesheet */
background-color: transparent;
padding: 0;
border: 0;
border-radius: 0;
color: inherit;
appearance: none;
/* make sure properties affecting height have same value */
font-size: 1em;
line-height: 1.2;
padding: 0.5em var(--padding-x);
border-width: 2px;
border-style: solid;
}
/* button */
.btn {
display: inline-flex;
justify-content: center; /* center the content horizontally */
align-items: center; /* center the content vertically */
--padding-x: 1.2em;
border-color: transparent; /* hide button border */
}
/* input */
.form-control {
--padding-x: 0.5em;
}
</style>
- 这里我们把按钮的display设置成了inline-flex,这样我们就可以使用justify-content以及align-items来做中间对齐。
- 我们对按钮和文本使用了同样的vertical padding, font-size, line-height以及border-width。
- 我们并不想给按钮加入特定的边框,所以这里设置成transparent.
- Line-height的值需要比1大一点点。假如使用1,输入的元素就会有问题,所以我们这里使用的是1.2,当然你也可以使用normal。
上面这样的基本风格设置可以保证按钮和输入元素有同样的高度,以及他们的内容是垂直对齐的。当然,你可以修改他们的font-size,或者设置不同的font-family,这些修改都不会影响对齐。
进一步优化
下面我们需要做的是为按钮和输入设置定制主题。

例外
也许你会遇到一些情况,我们需要设置固定高度的按钮和输入元素,而默认的line-height会破坏对齐。这种情况下,我们可以把垂直padding去除掉,并且设置line-height等于height的值。下面是一个例子:
.height-30, .height-40, .height-50 {
height: var(--height);
&.btn, &.form-control {
line-height: var(--height);
padding-top: 0;
padding-bottom: 0;
}
}
.height-30 {
--height: 30px;
}
.height-40 {
--height: 40px;
}
.height-50 {
--height: 50px;
}


Recent Comments