關於 <input> 的寬度問題

忍你很久了,今天就把你給解決!

情境

如果你想做這個畫面:

situation

你大概會這樣寫:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<style>
.input-block {
display: flex;
}
.input-block__text {
flex-shrink: 0;
}
.input-block__input {
flex: 1;
}
</style>

<div class="input-block">
<span class="input-block__text">姓名:</span>
<input class="input-block__input" type="text">
</div>

這時候你就會發現 <input> 的寬度沒辦法縮到很小:

problem

長話短說

在上面的例子你可能會想說加上 flex-shrink: 0min-width: 0 來處理,但很抱歉,都沒有用哦!

其實 <input> 會自帶一個寬度,應該是標籤上的 size 屬性:

1
<input type="text" size="20">

在 Chrome 上大概會是 200px 的寬,所以如果你沒有設定 width 的話,當 <input> 被縮放到很小的時候,他就會固定在 size 的寬度。

至於 Flex 的部分比較特殊,flex: 1 確實可以讓元素吃到剩餘空間來填滿容器,但如果沒有設定 width 就會有上面的問題。

解決辦法

記住一個要訣就好,如果你要讓 <input> 寬度可以自適應,那就幫他加上 width

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<style>
.input-block {
display: flex;
}
.input-block__text {
flex-shrink: 0;
}
.input-block__input {
flex: 1;
width: 100%;
}
</style>

<div class="input-block">
<span class="input-block__text">姓名:</span>
<input class="input-block__input" type="text">
</div>

solution

如果是在 block-level 的空間中也是同樣道理:

1
2
3
4
5
6
7
8
9
10
11
12
13
<style>
.input-block {
display: block;
}
.input-block__input {
/* 預設的情況 */
width: auto;
}
</style>
<div class="input-block">
<span class="input-block__text">姓名:</span>
<input class="input-block__input" type="text" size="20">
</div>

block-problem

<input> 加上 width

1
2
3
4
5
6
7
8
9
10
11
12
<style>
.input-block {
display: block;
}
.input-block__input {
width: 100%;
}
</style>
<div class="input-block">
<span class="input-block__text">姓名:</span>
<input class="input-block__input" type="text" size="20">
</div>

block-solution

mentor-program-day38 再次理解什麼是作用域?
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×