क्या आप CSS में / और शर्तों का उपयोग कर सकते हैं?


120

मैं अपने सीएसएस में शर्तों का उपयोग करना चाहूंगा।

विचार यह है कि मेरे पास एक चर है जिसे मैं सही स्टाइल-शीट बनाने के लिए साइट चलाने पर प्रतिस्थापित करता हूं।

मैं यह चाहता हूं ताकि इस चर के अनुसार शैली-पत्रक में परिवर्तन हो!

ऐसा लग रहा है:

[if {var} eq 2 ]
    background-position : 150px 8px;
[else]
    background-position : 4px 8px; 

क्या यह किया जा सकता है? आप यह कैसे करते हैं?


आप क्या करने की कोशिश कर रहे हैं जो सीएसएस सशर्त की आवश्यकता होगी?
Sapphire_Brick

जवाबों:


138

पारंपरिक अर्थों में नहीं, लेकिन आप इसके लिए कक्षाओं का उपयोग कर सकते हैं, यदि आपके पास HTML तक पहुंच है। इस पर विचार करो:

<p class="normal">Text</p>

<p class="active">Text</p>

और अपनी सीएसएस फ़ाइल में:

p.normal {
  background-position : 150px 8px;
}
p.active {
  background-position : 4px 8px;
}

यह करने के लिए सीएसएस तरीका है।


फिर Sass जैसे CSS प्रीप्रोसेसर हैं । आप वहां सशर्त का उपयोग कर सकते हैं , जो इस तरह दिखेगा:

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

नुकसान यह है, कि आप अपनी स्टाइलशीट को प्री-प्रोसेस करने के लिए बाध्य हैं, और यह कि संकलित समय पर मूल्यांकन किया जाता है, रन टाइम नहीं।


सीएसएस उचित की एक नई विशेषता कस्टम गुण (उर्फ सीएसएस चर) हैं। उनका मूल्यांकन रन टाइम पर (उनका समर्थन करने वाले ब्राउज़र में) किया जाता है।

उनके साथ आप रेखा के साथ कुछ कर सकते हैं:

:root {
  --main-bg-color: brown;
}

.one {
  background-color: var(--main-bg-color);
}

.two {
  background-color: black;
}

अंत में, आप अपनी स्टाइलशीट को अपनी पसंदीदा सर्वर-साइड भाषा के साथ प्रीप्रोसेस कर सकते हैं। यदि आप PHP का उपयोग कर रहे हैं, तो style.css.phpफ़ाइल की सेवा करें , जो कुछ इस तरह दिखती है:

p {
  background-position: <?php echo (@$_GET['foo'] == 'bar')? "150" : "4"; ?>px 8px;
}

इस मामले में, आपके पास हालांकि प्रदर्शन प्रभाव होगा, क्योंकि इस तरह की स्टाइलशीट को कैशिंग करना मुश्किल होगा।


11
अच्छा जवाब, मैं बस कैशिंग के संबंध में एक बिंदु जोड़ना चाहता हूं: चूंकि ब्राउज़र कैशे स्टाइलशीट करते हैं और आमतौर पर उन्हें हर उस पेज के लिए दोबारा डाउनलोड नहीं करते हैं, जो PHP / [प्रोग्रामिंग-भाषा-की-पसंद] द्वारा उत्पन्न "गतिशील" स्टाइलशीट पर भरोसा करना मुश्किल है। । यह काम करने का तरीका नहीं है। यदि आपको CSS बदलने की आवश्यकता है, तो आप इसे पाठ्यक्रम के पृष्ठ में एम्बेड कर सकते हैं, लेकिन यह सामग्री / प्रस्तुति पृथक्करण के विरुद्ध जाना शुरू करता है।

3
धोखेबाज ने जो कहा उसके संबंध में, इसका मतलब यह नहीं है कि आपके पास गतिशील रूप से बदलती वेबसाइट नहीं हो सकती है। शैलियों की चादरें स्थिर रह सकती हैं, और आप जावास्क्रिप्ट या पीएचपी के बिना जावास्क्रिप्ट का उपयोग करके तत्व वर्गों को बदल सकते हैं जिस तरह से तत्व स्टाइल बदल सकते हैं।
csga5000

और, क्या होगा अगर आप स्क्रॉलबार को स्टाइल करना चाहते हैं? (आप नहीं पा सकते हैं :: - html में वेबकिट-स्क्रॉलबार-बटन)
जेरी

उम, हाँ? इसके बारे में क्या है? Sass, CSS वैरिएबल और सर्वरसाइड प्रोसेसिंग HTML पर निर्भर नहीं करते हैं। या मुझसे यहां कुछ छूट रहा है?
बोल्डवेयन

15

नीचे मेरा पुराना उत्तर है जो अभी भी मान्य है लेकिन मेरे पास आज अधिक राय है:

सीएसएस इतना क्यों चूसता है इसका एक कारण यह है कि इसमें सशर्त सिंटैक्स नहीं है। आधुनिक वेब स्टैक में सीएसएस पूरी तरह से अनुपयोगी है। थोड़ी देर के लिए SASS का प्रयोग करें और आपको पता चल जाएगा कि मैं ऐसा क्यों कहता हूं। SASS में सशर्त सिंटैक्स है ... और आदिम सीएसएस पर अन्य लाभों का एक बहुत।


पुराना उत्तर (अभी भी मान्य):

यह सामान्य रूप से CSS में नहीं किया जा सकता है!

आपके पास ब्राउज़र की स्थिति है जैसे:

/*[if IE]*/ 
body {height:100%;} 
/*[endif]*/

लेकिन कोई भी आपको अपने संबंधित प्रोग्रामिंग भाषा में DOM या असाइन करने की कक्षाओं को गतिशील रूप से या यहां तक ​​कि समवर्ती शैलियों को बदलने के लिए जावास्क्रिप्ट का उपयोग करने से रोकता है।

मैं कभी-कभी सीएसएस कक्षाओं को देखने के लिए स्ट्रिंग के रूप में भेजता हूं और उन्हें उस तरह से (php) कोड में गूँजता हूं:

<div id="myid" class="<?php echo $this->cssClass; ?>">content</div>

14
हैरान किसी ने संकेत नहीं दिया कि सीएसएस में सशर्त सिंटैक्स मौजूद नहीं है। सशर्त टिप्पणियाँ केवल HTML में मौजूद हैं।
BoltClock

12

आप माईमिक कंडीशंस के प्रकार के calc()साथ संयोजन में उपयोग कर सकते var()हैं:

:root {
--var-eq-two: 0;
}

.var-eq-two {
    --var-eq-two: 1;
}

.block {
    background-position: calc(
        150px * var(--var-eq-two) +
        4px * (1 - var(--var-eq-two))
    ) 8px;
}

संकल्पना


8

आप दो अलग-अलग स्टाइलशीट बना सकते हैं और उनमें से एक को तुलना परिणाम के आधार पर शामिल कर सकते हैं

आप में से एक में डाल सकते हैं

background-position : 150px 8px;

दूसरे में

background-position : 4px 8px;

मुझे लगता है कि आप सीएसएस में प्रदर्शन कर सकते हैं एक ही जाँच ब्राउज़र मान्यता है:

सशर्त-सीएसएस


8

मुझे आश्चर्य है कि किसी ने सीएसएस छद्म वर्गों का उल्लेख नहीं किया है, जो सीएसएस में भी एक प्रकार की सशर्त हैं। आप जावास्क्रिप्ट के एक लाइन के बिना, इसके साथ कुछ सुंदर उन्नत चीजें कर सकते हैं।

कुछ छद्म वर्ग:

  • : सक्रिय - क्या तत्व पर क्लिक किया जा रहा है?
  • जाँच की गई - क्या रेडियो / चेकबॉक्स / विकल्प की जाँच की गई है? (यह एक चेकबॉक्स के उपयोग के माध्यम से सशर्त स्टाइल के लिए अनुमति देता है!)
  • : खाली - तत्व खाली है?
  • : फुलस्क्रीन - क्या दस्तावेज़ फुल-स्क्रीन मोड में है?
  • : फोकस - क्या तत्व में कीबोर्ड फोकस है?
  • : फोकस-भीतर - क्या तत्व, या उसके किसी भी बच्चे को कीबोर्ड फोकस है?
  • : है ([चयनकर्ता]) - क्या तत्व में एक बच्चा शामिल है जो [चयनकर्ता] से मेल खाता है? (दुख की बात है, किसी भी प्रमुख ब्राउज़र द्वारा समर्थित नहीं है।)
  • : होवर - क्या इस तत्व पर माउस मंडराता है?
  • : इन-रेंज /: आउट-ऑफ-रेंज - इनपुट मूल्य के बीच / बाहर न्यूनतम और अधिकतम सीमा है?
  • : अमान्य /: मान्य - क्या प्रपत्र तत्व में अमान्य / मान्य सामग्री है?
  • : लिंक - क्या यह एक परिकल्पित लिंक है?
  • : नहीं () - चयनकर्ता को उल्टा करें।
  • : लक्ष्य - क्या यह तत्व URL के टुकड़े का लक्ष्य है?
  • : दौरा किया - क्या उपयोगकर्ता इस लिंक पर पहले आया है?

उदाहरण:

div { color: white; background: red }
input:checked + div { background: green }
<input type=checkbox>Click me!
<div>Red or green?</div>


6

सर्वर को PHP के रूप में सीएसएस फ़ाइलों को पार्स करने के लिए सेट करें और फिर एक साधारण PHP स्टेटमेंट के साथ चर चर को परिभाषित करें।

बेशक यह मानता है कि आप PHP का उपयोग कर रहे हैं ...


2
आप "PHP" को "अपनी प्रोग्रामिंग या पसंद की भाषा को गति देने वाली भाषा" से बदल सकते हैं
क्वेंटिन

1
समस्या यह है, यदि आपका CSS 50kb है, और आप केवल कुछ मान बदल रहे हैं, तो क्या यह स्थिर और कैश्ड होना बेहतर नहीं होगा?
एलेक्स

2
हाँ, लेकिन आप गतिशीलता की आवश्यकता के लिए अंश निकाल सकते हैं और उन्हें फिर से शामिल कर सकते हैं @import url('dynamic.css.php')
बोल्ड्यूविन

यह इस पर निर्भर करता है कि स्थितियां क्या हैं। यदि वे प्रति उपयोगकर्ता आधार पर स्थिर हैं, तो आप सामान्य कैश कंट्रोल हेडर का उत्पादन कर सकते हैं।
क्वेंटिन

5

आप का उपयोग कर सकते हैं के बजाय अगर पसंद है

.Container *:not(a)
{
    color: #fff;
}

3

जहाँ तक मुझे पता है, css में if / if / अन्यथा नहीं है। वैकल्पिक रूप से, आप किसी तत्व की पृष्ठभूमि-स्थिति संपत्ति को बदलने के लिए जावास्क्रिप्ट फ़ंक्शन का उपयोग कर सकते हैं।


3

फिर भी एक अन्य विकल्प (इस पर आधारित है कि आप चाहते हैं कि यदि स्टेटमेंट का डायनामिकली मूल्यांकन किया जाए या नहीं) सी प्रीप्रोसेसर का उपयोग करना है, जैसा कि यहां वर्णित है


3

(हां, पुराना धागा। लेकिन यह Google-खोज के शीर्ष पर बदल गया है ताकि दूसरों को भी रूचि हो सके)

मुझे लगता है कि अगर / और-तर्क जावास्क्रिप्ट के साथ किया जा सकता है, जो बदले में स्टाइलशीट को गतिशील रूप से लोड / अनलोड कर सकता है। मैंने इसे ब्राउज़रों आदि में नहीं देखा है, लेकिन यह काम करना चाहिए। यह आपको आरंभ कर देगा:

http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml


3

यह ऊपर दिए गए Boldewyn जवाब के लिए एक छोटी सी अतिरिक्त जानकारी है।

अगर / वरना करने के लिए कुछ php कोड जोड़ें

if($x==1){
  print "<p class=\"normal\">Text</p>\n";
} else {
  print "<p class=\"active\">Text</p>\n";
}

3

आप अपने सभी कंडीशन स्कोप के लिए कंटेनर div जोड़ सकते हैं।

कंटेनर डिव के वर्ग के रूप में शर्त मान जोड़ें। (आप इसे सर्वर साइड प्रोग्रामिंग द्वारा सेट कर सकते हैं - php / asp ...)

<!--container div-->
<div class="true-value">
   <!-- your content -->
   <p>my content</p>
   <p>my content</p>
   <p>my content</p>
</div>

अब आप कंटेनर में प्रत्येक तत्व के लिए वर्ग को जोड़े बिना, नेस्टेड चयनकर्ता का उपयोग करते हुए div में सभी तत्वों के लिए एक वैश्विक चर के रूप में उपयोग कर सकते हैं।

.true-value p{
   background-color:green;
}
.false-value p{
   background-color:red;
}

2

आप इस तरह से जावास्क्रिप्ट का उपयोग कर सकते हैं:

  1. पहले आपने 'सामान्य' वर्ग के लिए और 'सक्रिय' वर्ग के लिए सीएसएस सेट किया
  2. तो आप अपने तत्व को आईडी 'MyElement' दें
  3. और अब आप जावास्क्रिप्ट में अपनी स्थिति बनाते हैं, नीचे दिए गए उदाहरण की तरह ... (आप इसे चला सकते हैं, myVar का मान 5 में बदल सकते हैं और आप देखेंगे कि यह कैसे काम करता है)

var myVar = 4;

if(myVar == 5){
  document.getElementById("MyElement").className = "active";
}
else{
  document.getElementById("MyElement").className = "normal";
}
.active{
  background-position : 150px 8px;
  background-color: black;
}
.normal{
  background-position : 4px 8px; 
  background-color: green;
}
div{
  width: 100px;
  height: 100px;
  }
<div id="MyElement">
  
  </div>


2

CSS एक अच्छी तरह से डिज़ाइन किया गया प्रतिमान है, और इसकी कई विशेषताएं बहुत अधिक उपयोग नहीं की जाती हैं।

यदि किसी शर्त और चर से आपका मतलब है कि पूरे दस्तावेज़ में, या कुछ तत्व के दायरे में कुछ मूल्य का परिवर्तन वितरित करने के लिए एक तंत्र है, तो यह है कि यह कैसे करना है:

var myVar = 4;
document.body.className = (myVar == 5 ? "active" : "normal");
body.active .menuItem {
  background-position : 150px 8px;
  background-color: black;
}
body.normal .menuItem {
  background-position : 4px 8px; 
  background-color: green;
}
<body>
<div class="menuItem"></div>
</body>

इस तरह, आप सीएसएस शैलियों में चर के प्रभाव को वितरित करते हैं। यह @amichai और @SeReGa के प्रस्ताव के समान है, लेकिन अधिक बहुमुखी है।

इस तरह की एक और ट्रिक पूरे डॉक्यूमेंट में किसी सक्रिय आइटम की आईडी को वितरित करने के लिए है, जैसे कि मेन्यू को हाइलाइट करते समय:

var chosenCategory = 15;
document.body.className = "category" + chosenCategory;
<#list categories as cat >
    body.category${cat.id} .menuItem { font-weight: bold; }
</#list>
<body>
<div class="menuItem"></div>
</body>

निश्चित रूप से, यह केवल आइटमों के सीमित सेट के साथ व्यावहारिक है, जैसे श्रेणियां या राज्य, और ई-शॉप माल की तरह असीमित सेट नहीं, अन्यथा उत्पन्न सीएसएस बहुत बड़ा होगा। लेकिन स्थैतिक ऑफ़लाइन दस्तावेज़ बनाते समय यह विशेष रूप से सुविधाजनक है।

सीएसएस के साथ जेनरेटिंग प्लेटफॉर्म के साथ संयोजन में "शर्तें" करने के लिए एक और चाल है:

.myList {
   /* Default list formatting */
}
.myList.count0 {
   /* Hide the list when there is no item. */
   display: none;
}
.myList.count1 {
   /* Special treatment if there is just 1 item */
   color: gray;
}
<ul class="myList count${items.size()}">
<!-- Iterate list's items here -->
<li>Something...</div>
</ul>


1

यदि आप jquery का उपयोग करने के लिए खुले हैं, तो आप HTML के भीतर जावास्क्रिप्ट का उपयोग करके सशर्त विवरण सेट कर सकते हैं:

$('.class').css("color",((Variable > 0) ? "#009933":"#000"));

.classयदि चर का मान इससे अधिक है, तो यह हरे रंग के पाठ रंग को बदल देगा 0


-1

बस html में यह ternary ऑपरेटर का उपयोग कर अगर नहीं तो

class = "{{condition? 'class1': 'class2'}}"

या

[ngClass] = "स्थिति? 'class1': 'class2'"


-2

यदि आप टैग में css लिखते हैं तो आप php का उपयोग कर सकते हैं

<style>
    section {
        position: fixed;
        top: <?php if ($test == $tset) { echo '10px' }; ?>;
    }
</style
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.