2009-08-12 19 views
1

私が持っているのは、1つのフィールドセットに複数の他のフィールドセットを含むフォームです。各フィールドセットについて、ユーザは凡例の横にあるボックスをチェックし、そのフィールドセットを展開することができます(少なくとも理論的には)。純粋なCSSを使って試してみるといいと思っていましたが、DOM内の2つの要素の位置に基づいてルールを書き込む方法が悩まされています。ここではHTMLです:最初のアイデアでDOMの属性+兄弟のCSSルール

<fieldset id="areasofinterest"> 
    <legend>Areas of Interest Survey</legend> 

<p>Please Check The Areas Applicable to you and Answer the Coorepsonding Questions.</p> 

<!--Area 1 Checkbox and Questions --> 
<fieldset class="area"> 
    <legend> 
     <input type="checkbox" value="area1" id="area1" /> 
     <label for="area1"> Area 1 :</label> 
    </legend> 
    <ul> 
     <li> 
      <label for="area1_q1">Q1</label> 
      <input type="text" name="area1_q1" id="area1_q1" /> 
     </li> 
     <li> 
      <label for="area1_q2">Q2</label> 
      <input type="text" name="area1_q2" id="area1_q2" /> 
     </li> 
    </ul> 
</fieldset> 

<!--Area 2 Checkbox and Questions --> 
<fieldset class="area"> 
    <legend> 
     <input type="checkbox" value="area2" id="area2" /> 
     <label for="other"> Area 2 :</label> 
    </legend> 

    <ul> 
     <li> 
      <label for="area2_q1">Q1</label> 
      <input type="text" name="area2_q1" id="area2_q1" /> 
     </li> 
     <li> 
      <label for="area2_q2">Q2</label> 
      <input type="text" name="area2_q2" id="area2_q2" /> 
     </li> 
    </ul> 
</fieldset> 

    </fieldset> 

は私には少しハックっぽいに見えたが、私は、W3Cのバリデータを通してそれを走った、そしてそれは伝説の中に埋め込まれた入力に渡さyipiee。だから私は私がjavascript/jqueryを使って得たものを得ることができると確信していますが、古いブラウザがそれをサポートしていなくても、CSSでそれを行うためのコンセプトを証明するのは嫌です。

私はこのルールを試してみました:

.area ul { 
    color: red; 
} 

.area input:checked + ul { 
    color: blue; 
} 

しかし、運に。はるかに簡単なテストで、私が働いている両方のブラウザ(Chrome、FF 3.5)は、入力が単にulである場合はinput:checked + ulを実行できることを確認しました。私は両方のルール(簡略版で)を持っていれば色を切り替えます。

しかし、チェックされた要素が凡例タグであり、したがってULの直接の兄弟でない場合、ULを参照する方法があるかどうかはわかりません。 「入力を含む伝説の兄弟...」と言ってもいいでしょうか?

ありがとうございます。

+0

パネルの表示を切り替えるためのチェックボックスを使用することは、従来とは異なります。ツリー状の矢印(下向きまたは横向き)、または凡例がクリック可能に見えるようにされている場合は、凡例をクリックするだけで表示を切り替えるのが一般的です。 –

答えて

3

いいえ。

「がチェックされている 入力が含まれている伝説の兄弟...」

あなたの問題はステップ「を含む」です。あなたはそのようなDOMを上に移動することはできません。子要素(または子要素の内容や属性)に基づいてCSSで要素を選択することはできません。

また、奇妙な視覚的なやりとり(および凡例)のフォーム要素も使用しています。私はあなたがjavascriptで良いと思う。私は他のCSSだけのソリューションを想像することができますが、フォームを隠して表示するのに十分なブラウザ互換性があるとは思っていません。

+0

私が本当に頑固で、CSS内の視覚的なやりとりを可能な限り維持したいのであれば、フィールドセット全体のクラスを「可視」または「チェック」(js経由)に変更し、拡張されたフィールドセットはCSSのそのクラスに見えるようになります。 – Anthony

+0

私は実際にこのアイデアについて人々を捨てているのは、チェック可能なフィールドセットだと思います。だからこそ私がやった最初のことがそれを検証したのです。家族の歴史の種類を選択する必要がある医療形式を想像してみてください。意味的には、単純にしてユーザーを圧倒する方法は、「Cancer」、「Mental Illness」、「Heart Failure」という基本的なグループのリストを持つことです。詳細については。だから、それは単なるインタラクティブなデバイスではなく、主要なグループはより大きな質問への実際の選択です... – Anthony

+0

これは、サブ質問を提起します。だから私のフォームを可能な限りレイアウトした状態にしたいのであれば(ボックスをチェックすると突然DOMのその選択肢がヘッダーに変わるわけではありません)、サブ質問を実際に子供として保持します(最初の質問の隣に浮かんでいる余分なフィールドセットを取り除くのではなく)主要な質問のうち、それぞれの選択肢を完全なフィールドセットに展開することと、それを開始するための最良の役割ポイントは、そのフィールドセットの伝説です。加えて、それが拡大すると視覚的に修正されます。少なくとも私はそう言っています。 – Anthony

0

私の最初の考えは、これはCSSだけでは機能しないということです。私はあなたがjavascriptなしでこれを行うことができるとは思わない。たとえば、セレクタをjQueryで使用して、Javascriptで親ノードを取得できます。

.area入力+ UL { が展開されていない//:

また、私は、チェックボックスを 'チェック' した後、CSSパターンは入力に一致し、場合のように... [= 'チェックする' にチェック]疑問に思いました }

.area入力は、[確認=「確認」] + UL { //が を拡大}

ので、あなただけの確認で変更を実装するためにJavaScriptを使用する必要があると思いますけれどもそれは動作しませんでした/チェックされていません。以前にも示唆されているように、チェックボックス以外のものを使用します。

+0

属性 '[checked =" checked "]'は機能しませんが、今日までわからなかった 'input:checked'を単に行うことができます。 – Anthony

+0

自分自身を知らなかった。それは面白い! – Lewis

0

隣接するセレクタ(+)は隣接する要素を選択します。親セレクタが必要ですが、残念ながら存在しません(過去にw3cに提案されていましたが)。

Javascript(parentNode)が唯一の選択肢です。