0

私はいくつかの HTML ページを自動生成するアプリケーションを使用しており、これらのページにいくつかの CSS ファイルを記述する必要があります。複数のクラス (jquery-ui テーマで生成) を再利用したいのですが、HTML 要素を変更できません

それで、クラスの同じ仕様をidに割り当てることは可能ですか?

これが可能であれば、クラスと ID 間のマッピングを簡単に作成できます。

例:

<html>
<head><style>
#charlieID {
    /* I want #charlie to be identical to .alphaClass */
    /* Assume that I can not change the HTML (it will be auto generated by another application)*/
}

.alphaClass {
    font-size: small; 
    color: lime;
}

.betaClass {
    font-size: medium;
    color: blue;
}
</style></head>
<body>
    <p class="alphaClass">Alpha</p>
    <p class="betaClass">Beta</p>
    <p id="charlieID" class="charlieClass">Charlie</p>
<body></html>

必ずしも 1 つのページではなく、アプリケーション全体で数百 (おそらく数千) の ID を管理する必要があります。したがって、CSS に関しては完全に自由です。そのため、複数の CSS ファイル (ページごとに 1 つのファイル) に分割して、ID と別のメイン CSS をクラスで制御できます。

4

4 に答える 4

2

あなたの質問に: いいえ、スタイルを継承することはできません。@slebetmanが示唆するように複数のセレクターを使用すると、効果を得ることができますが、(おそらく縮小された) jquery ui cssファイルを変更する必要があり、面倒な場合があります。

ruby をインストールできる (または ruby​​ を利用できる) 場合は、「ハイレベル CSS」である sass をインストールできます (すべてをまとめると、もっと本質的なことになります)。

これは、violagem install sassを使用してファイルをコンパイルするだけで実行できます。sass filename.scss:filename.css

cannotedit.css最後に、これを行う利点は、これらのスタイルを簡単に継承できるようにすることです.2つのファイルがあると仮定しましょうmycss.scss. まず最初に、名前を に変更cannotedit.cssします_cannotedit.scss(すべての CSS が有効な SCSS であるため、追加の変更は必要ありません)。追加されたアンダースコアにより、個別にコンパイルされるのを防ぎます。これにより、最終的にすべてが単一の CSS ファイルに含まれるという利点が得られます。

_cannotedit.scss

.center {
  margin: 0 auto;
}

そして、これらのスタイルを ID に適用したいが、それらを再利用したい (過度に単純化された例を許してください):

mycss.scss

@import "cannotedit";

#someId {
  @extend .center;
  color: red;
}

そして、コンパイルされたファイルには と の両方の内容が含ま_cannotedit.scssmycss.scss、拡張 ID はスタイルからスタイルを「継承」します。これはあなたのプロジェクトにとってやり過ぎかもしれません (またはそうでないかもしれません) が、オプションのリストに追加したかったのです。

ファイナルノート

ruby が利用できない場合は、LESS や Stylus などの他のオプションがあります。Stylus が Node.js で実行されることは知っていますが、どの LESS が実行されるかはわかりません (おそらく Node.js も覚えていません)。ほぼ同じアクションですが、簡単なので Sass をお勧めします (主にコンパス アドオンのおかげです)。

資力

  1. サス
  2. 以下
  3. スタイラス
于 2013-04-09T02:02:41.227 に答える
2

はい、確かに。CSS 仕様には、複数のターゲットが含まれる場合があります。class と id の両方に同じルールを適用するには、次のようにします。

#charlieID, .alphaClass {
    font-size: small; 
    color: lime;
}

ターゲットを区切るコンマに注意してください。


追加の回答:

一致させる ID が何十万もある場合、この標準的な方法 (追加のスクリプトやライブラリは必要なく、通常の CSS のみ) は実際には、考えられるどの代替方法よりも小さくなります。検討:

/* Standard CSS */
#charlieID1, #charlieID2, #charlieID3, #charlieID4, #charlieID5,
#charlieID6, #charlieID7, #charlieID8, #charlieID9, #charlieID10,
#charlieID11, #charlieID12, #charlieID13, #charlieID14, #charlieID15,
#charlieID16, #charlieID17, #charlieID18, #charlieID19, .alphaClass {
    font-size: small; 
    color: lime;
}

それを次と比較します。

/* LESS CSS. Needs to be compiled with LESS */
.alphaClass {
    font-size: small; 
    color: lime;
}

#charlieID1 {
    .alphaClass
}
#charlieID2 {
    .alphaClass
}
#charlieID3 {
    .alphaClass
}
#charlieID4 {
    .alphaClass
}
#charlieID5 {
    .alphaClass
}
#charlieID6 {
    .alphaClass
}
#charlieID7 {
    .alphaClass
}
#charlieID8 {
    .alphaClass
}
#charlieID9 {
    .alphaClass
}
#charlieID10 {
    .alphaClass
}
#charlieID11 {
    .alphaClass
}
#charlieID12 {
    .alphaClass
}
#charlieID13 {
    .alphaClass
}
#charlieID14 {
    .alphaClass
}
#charlieID15 {
    .alphaClass
}
#charlieID16 {
    .alphaClass
}
#charlieID17 {
    .alphaClass
}
#charlieID18 {
    .alphaClass
}
#charlieID19 {
    .alphaClass
}

そして、それはたった19のIDです。

ただし、より良い回避策があります。実際に何十万もの ID がある場合、ID をターゲットにすることはおそらく間違っています。代わりに、ドキュメントの構造を実際に見て、ターゲットにしたいものが他の方法でターゲットにできるかどうかを確認する必要があります。

代替案の 1 つは、モノの親に基づいてターゲットを作成することです。たとえば、次のような構造があるとします。

<div class='foo'>
    <span id='charlieID'></span>
</div>

次に、代わりに次のようにターゲットにできます。

div.foo span, .alphaClass {
    font-size: small; 
    color: lime;
}

ターゲットにできる一般的な構造を創造的に見つけてください。子セレクターや兄弟セレクターを使用するなど、使用できる他のトリックがあります。少なくとも 1 つの高度な CSS チュートリアルを読むことを強くお勧めします。ただし、一部の古いブラウザーでは、より有用なルールの一部がサポートされていないことに注意してください。それでも、あなたが CSS3 に言及しているので、とにかく新しいブラウザーをターゲットにしている可能性があります。

他のすべてが失敗した場合、手で入力する代わりに CSS ファイルを生成できないということは何もありません。

#! /usr/bin/env tclsh

# Sample script to print rule with thousands of target.
# (note: I have no idea what thousands of targets do to various browsers)

set targets {}
foreach {name idx} {"#charlie" 1000 ".alphaClass" "" "#jane" 500} {
    if {$idx == ""} {
        lappend targets $name
    } else {
        for {set i 0} {$i < $idx} {incr i} {
            lappend targets "$name$i"
        }
    }
}
puts [join $targets ","]
puts "{font-size:small; color:lime;}"

# should print a rule with the following targets:
# #charlie0..#charlie999, .alphaClass and #jane0..#jane499
于 2013-04-09T01:48:06.010 に答える
2

私の知る限り、プレーンな CSS で既存のクラスのスタイルを「継承」する方法はありません。

クライアント側のスクリプトが受け入れられる場合は、クラスを動的に追加できます。jQuery の例:

$(document).ready(function() {$('#charlieID').addClass('alphaClass');});

既存の CSS を変更できる場合は、質問を誤解していることに注意してください。その場合、スタイルを明示的に書き直す必要はなく、カンマ区切りのリストを使用できます。

#charlieID, 
.alphaClass {
    font-size: small; 
    color: lime;
}

実際に CSS を編集できるのでLESSなどの高水準言語を調べることもできます。LESS では、次のことができます。

.alphaClass {
    font-size: small; 
    color: lime;
}

#charlieID {
    .alphaClass
}
于 2013-04-09T01:48:22.460 に答える
0

ID と CLASS をいつ使用するかについての適切な説明は次のとおりです

そして、あなたの質問に対して、要素は ID とクラスの両方を同時に持つことができます。

于 2013-04-09T01:45:09.243 に答える