私はWebサービスを書いていますが、データをXHTMLとして返したいです。マークアップではなくデータなので、非常にきれいに保ちたい-余分な<div>
sまたは<span>
s。ただし、開発者の便宜を図るため、返されたデータをブラウザで合理的に読みやすくしたいと思います。そのためには、CSSを使用することをお勧めします。
私が特にやりたいのは、特定の場所に改行を挿入することです。 display:blockは知っていますが、現在処理しようとしている状況(<input>フィールドがあるフォーム)では実際には機能しません。このようなもの:
<form>
Thingy 1: <input class="a" type="text" name="one" />
Thingy 2: <input class="a" type="text" name="two" />
Thingy 3: <input class="b" type="checkbox" name="three" />
Thingy 4: <input class="b" type="checkbox" name="four" />
</form>
各ラベルが対応する入力フィールドと同じ行に表示されるようにレンダリングしたいと思います。私はこれを試しました:
input.a:after { content: "\a" }
しかし、それは何もしないようでした。
すべての要素をラベル要素でラップしてから、CSSをラベルに適用するのが最善です。 :beforeおよび:after疑似クラスは、一貫した方法で完全にはサポートされていません。
ラベルタグには、(複数レベルでの)アクセシビリティの向上など、多くの利点があります。
<label>
Thingy one: <input type="text" name="one">;
</label>
次に、ラベル要素でCSSを使用します...
label {display:block;clear:both;}
フォームコントロールはブラウザによって特別に扱われるため、多くの機能が必ずしも正常に機能するとは限りません。これらの1つは生成されたコンテンツです-フォームコントロールでは機能しません。代わりに、ラベルを<label>
でラップし、label:before { content: '\a' ; white-space: pre; }
を使用します。また、すべてをフロートし、clear: left
を<label>
要素に追加することでもできます。
リストに表示したいフォームアイテムがたくさんあるようですね。うーん...それらのHTML仕様の連中だけがアイテムのリストを処理するためのマークアップを含めると考えていたら...
次のように設定することをお勧めします。
<form>
<ul>
<li><label>Thingy 1:</label><input class="a" type="text" name="one" /></li>
<li><label>Thingy 1:</label><input class="a" type="text" name="one" /></li>
</ul>
</form>
そうすると、CSSがはるかに簡単になります。
以下は改行を提供します。また、前に余分なスペースを配置します...タブを削除して、ソースのインデントを台無しにする必要があります。
form { white-space: pre }
<form>
<label>Thingy 1: <input class="a" type="text" name="one" /></label>
<label>Thingy 2: <input class="a" type="text" name="two" /></label>
<label>Thingy 3: <input class="b" type="checkbox" name="three" /></label>
<label>Thingy 4: <input class="b" type="checkbox" name="four" /></label>
</form>
そして、次のCSS
form label { display: block; }
<style type="text/css">
label, input { float: left; }
label { clear:left; }
</style>
<form>
<label>thing 1:</label><input />
<label>thing 2:</label><input />
</form>
1つのオプションは、(一部の)ブラウザーが処理するXML内のXSLTテンプレートを指定して、マークアップ、CSS、色などのプレゼンテーションをWebサービスのコンシューマーに影響を与えないようにすることです。
XHTMLでは、CSSを使用して要素の周囲にいくつかのパディングを追加できます。
フォームinput.a {margin-bottom:1em}
秘密は、ブロックとクリアを行うクラスのスパンで、モノ、ラベル、ウィジェット全体を囲むことです。
<style type="text/css">
.lb {
display:block;clear:both;
}
</style>
<form>
<span class="lb">Thingy 1: <input class="a" type="text" name="one" /></span>
<span class="lb">Thingy 2: <input class="a" type="text" name="two" /></span>
<span class="lb">Thingy 3: <input class="b" type="checkbox" name="three" /></span>
<span class="lb">Thingy 4: <input class="b" type="checkbox" name="four" /></span>
</form>
Javascriptオプションは、すべてが複雑です。 Jon Gallowayまたはdaniels0xffが示唆したとおりに行います。
私はジョン・ミリキンに同意します。 CSSクラスが定義された<span>
タグまたは各行の周囲に何かを追加し、必要に応じてdisplay:blockにすることができます。私がこれを行うと考えることができる他の唯一の方法は、<input>
をインラインブロックにし、インラインコンテンツをラップダウンさせる「非常に大きな」パディングを右に出すことです。
それでも、あなたの最善の策は、データを論理的に<span>
タグ(または同様のもの)にグループ化して、そのデータが一緒に属していることを示すことです(そして、CSSに配置させます)。
CSSのclear要素は、おそらくgetの改行を探しているものです。何かに沿って:
#login form input {clear:both; }
入力フィールドの両側に他のフローティング要素が残らないようにします。