さて、オブジェクトにパディングを設定すると、明示的に設定されていてもその幅が変わることがわかります。この背後にあるロジックを議論することができますが、それはいくつかの要素にいくつかの問題を引き起こします。
ほとんどの場合、子要素を追加し、100%に設定した要素の代わりにその要素にパディングを追加しますが、フォーム入力の場合、それは可能なステップではありません。
これを見てください: http://sandman.net/test/formcss.html
2番目の入力のパディングは5pxに設定されていますが、これはデフォルト設定よりも非常に好みです。しかし、残念ながら、100%幅に10pxを追加するなど、入力はすべての方向に10px増加します。
ここでの問題は、入力内に子要素を追加できないため、修正できないことです。質問は次のとおりです。
幅を100%に保ちながら、入力内にパディングを追加する方法はありますか?フォームは異なる幅の親でレンダリングされるため、100%にする必要があります。そのため、親の幅は事前にわかりません。
CSS3を使用すると、プロパティbox-sizingを使用して、ブラウザがinput。
input.input {
width: 100%;
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
詳細についてはこちらをご覧ください: http://css-tricks.com/box-sizing/
ブラウザ間の互換性はわかりません(firefoxとsafariで動作します)が、このソリューションを試すことができます:
DIV.formvalue {
padding: 15px;
}
input.input {
margin: -5px;
}
(変更した値のみを投稿しました)
1つのオプションは、パディングがあるINPUT
でDIV
をラップすることです。
CSS:
div.formvalue {
background-color: #eee;
border: 1px solid red;
padding: 10px;
margin: 0px;
}
div.paddedInput {
padding: 5px;
border: 1px solid black;
background-color: white;
}
div.paddedInput input {
border: 0px;
width: 100%;
}
HTML:
<div class="formvalue">
<div class="paddedInput"><input type="text" value="Padded!" /></div>
</div>
忘れられがちなcalc
は、ここで救助できます。
input {
width: calc(100% - 1em);
padding: 0.5em;
}
パディングは要素の幅に追加されることがわかっているので、単純に全体の幅からパディングを引きます。すべての主要なブラウザでサポートされており、応答性があり、面倒なラッパーdivは必要ありません。
私はこれに似たものでいくつかの問題を抱えています。 100%の入力と小さなパディングを持つtdsがあります。私がやったのは、次のようにtdのパディングを補正することでした:
.form td {
padding-right:8px;
}
.form input, .form textarea {
border: 1px solid black;
padding:3px;
width:100%;
}
input/textareaの境界線とパディングを含めるための8pxのパディング。お役に立てれば!
私が見つけた解決策の1つは、入力を相対的に配置された親タグで絶対的に配置することです。
<p class="full-width-input">
<input type="text" class="text />
</p>
スタイルを適用します:
p.full-width-input {
position: relative;
height: 35px;
}
p.full-width-input input.text {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 5px;
}
唯一の注意点は、絶対に配置された子は高さを拡張しないため、段落タグには高さの設定が必要であることです。これにより、width: 100%
を親要素の左右にロックすることで設定する必要がなくなります。
おそらく、input
からborder + backgroundを取り、代わりにborder + backgroundとwidth:100%でdiv
で囲み、input
?にマージンを設定します。
パディングにパーセンテージを使用してみてください。
.input {
// remove border completely
border: none;
// don't forget to use the browser prefixes
box-shadow: 0 0 0 1px silver;
// Use PERCENTAGES for at least the horizontal padding
padding: 5%;
// 100% - (2 * 5%)
width: 90%;
}
ボックスシャドウが見えない古いブラウザのユーザーが心配な場合は、バックアップとして入力に微妙な背景色を付けてください。この種のものにピクセルを使用している場合、他の場所でピクセルを使用している可能性があり、いくつかの余分な課題が発生する可能性があります。