1. ホーム
  2. css

[解決済み] 入力中のパディングは幅を100%にする

2022-05-15 13:02:39

質問

オブジェクトにパディングを設定すると、たとえ明示的に設定されていてもその幅が変わってしまうということはわかりました。この背後にある論理を論じることができる一方で、それはいくつかの要素でいくつかの問題を引き起こします。

ほとんどの場合、子要素を追加して、100% に設定された要素の代わりにその要素にパディングを追加すればよいのですが、フォーム入力の場合、それは不可能な手順です。

これを見てください。

body {
  font-size: 14px;
  margin: 0px;
  padding: 0px;
}

DIV.formfield {
  clear: both;
  margin: 0px;
  padding: 10px;
}

DIV.formlabel {
  margin-top: 20px;
  padding: 5px;
  font-weight: bold;
  text-align: left;
}

DIV.formvalue {
  background-color: #eee;
  border: 1px solid red;
  padding: 10px;
  margin: 0px;
}

DIV.formvalue.correct {
  border: 1px solid green;
}

textarea.textarea {
  width: 100%;
  min-height: 80px;
}

input.input {
  width: 100%;
  padding: 5px;
}

input.input2 {
  width: 100%;
}

input.input3 {
  width: 100%;
  padding: 5px;
  margin: -5px;
}

input.input4 {
  width: 100%;
  padding: 10px;
  margin: -10px;
}

input.input5 {
  width: 100%;
  padding: 10px;
  box-sizing: border-box;
}
<div class='formfield' id='field_text'>
  <div class='formlabel'>No padding</div>
  <div class='formvalue'>
    <textarea class='textarea' cols='80' rows='10' name='text'>No padding here</textarea>
  </div>
  <div class='formlabel'>Also no padding</div>
  <div class='formvalue'>
    <input type='text' class='input2' name='apa' value='Or here...' />
  </div>
  <div class='formlabel'>5px padding, which extends the parent element, d'oh!</div>
  <div class='formvalue'>
    <input type='text' class='input' name='apa' value='I dont want to extend outside the square!' />
  </div>
  <div class='formlabel'>5px padding and -5px margin, this does the trick, almost...</div>
  <div class='formvalue'>
    <input type='text' class='input3' name='apa' value='I dont want to extend outside the square!' />
  </div>

  <div class='formlabel'>10px padding and -10px margin, things are falling apart on the right side</div>
  <div class='formvalue'>
    <input type='text' class='input4' name='apa' value='I dont want to extend outside the square!' />
  </div>

  <div class='formlabel'><img src="/bilder/icons/badges/ok.png" width="16" height="16" border="0"> 10px padding and box-sizing: border-box</div>
  <div class='formvalue correct'>
    <input type='text' class='input5' name='apa' value='I dont want to extend outside the square!' />
  </div>
</div>

2つ目の入力はパディングが5pxに設定されていますが、これはデフォルトの設定よりも非常に好ましいです。しかし残念ながら、これによって入力はすべての方向に 10px 大きくなり、100% の幅に 10px が追加されることになります。

問題は、input の内部に子要素を追加できないため、修正できないことです。そこで質問なのですが

幅を 100% に保ったまま、入力の内側にパディングを追加する方法はありますか? フォームが異なる幅の親でレンダリングされるため、親の幅を事前に知らないので、100%にする必要があります。

どのように解決するのですか?

CSS3 を使用すると、プロパティ ボックスサイズ の幅を計算する方法を変更することができます。 入力 .

input.input {
    width: 100%;
    box-sizing: border-box;
}

詳しくはこちらでご覧いただけます。 http://css-tricks.com/box-sizing/