सास में, मैं एक मिश्रण के साथ @include
का उपयोग करने और प्लेसहोल्डर वर्ग के साथ @extend
का उपयोग करने के बीच अंतर को बिल्कुल समझ नहीं सकता। क्या वे एक ही चीज़ की मात्रा नहीं है?सास में @include बनाम @extend का उपयोग कर?
उत्तर
विस्तारित करने की अनुमति नहीं देता है, लेकिन वे बहुत ही कुशल सीएसएस उत्पन्न करते हैं।
%button
background-color: lightgrey
&:hover, &:active
background-color: white
a
@extend %button
button
@extend %button
परिणाम:
a, button {
background-color: lightgrey;
}
a:hover, button:hover, a:active, button:active {
background-color: white;
}
mixins के साथ, आप सीएसएस दोहराया गया हो, लेकिन आप प्रत्येक उपयोग के लिए परिणाम संशोधित करने के लिए तर्कों का उपयोग कर सकते हैं।
=button($main-color: lightgrey, $active-color: white)
background-color: $main-color
border: 1px solid black
border-radius: 0.2em
&:hover, &:active
background-color: $active-color
a
+button
button
+button(pink, red)
परिणाम में:
a {
background-color: lightgrey;
border: 1px solid black;
border-radius: 0.2em;
}
a:hover, a:active {
background-color: white;
}
button {
background-color: pink;
border: 1px solid black;
border-radius: 0.2em;
}
button:hover, button:active {
background-color: red;
}
कोड उदाहरण के इस लगातार सेट का पालन करें देखने के लिए का उपयोग करके कैसे आप अपने कोड क्लीनर और अधिक maintainable कर सकते हैं प्रदान करता है और mixins प्रभावी ढंग से: http://thecodingdesigner.com/journal/balancing-ideal-sass-and-ideal-css
नोट दुर्भाग्यवश SASS मीडिया क्वेरी के अंदर विस्तार का उपयोग करने की अनुमति नहीं देता है (और उपरोक्त लिंक से संबंधित उदाहरण गलत है)। स्थिति है जहाँ आप मीडिया पर आधारित प्रश्नों का विस्तार करने की जरूरत है, एक mixin का उपयोग करें:
=active
display: block
background-color: pink
%active
+active
#main-menu
@extend %active // Active by default
#secondary-menu
@media (min-width: 20em)
+active // Active only on wide screens
परिणाम:
#main-menu {
display: block;
background-color: pink;
}
@media (min-width: 20em) {
#secondary-menu {
display: block;
background-color: pink;
}
}
दोहराव इस मामले में अपरिहार्य है, लेकिन आप इसके बारे में बहुत ज्यादा परवाह नहीं करना चाहिए क्योंकि वेब सर्वर का gzip संपीड़न इसका ख्याल रखेगा।
पीएस ध्यान दें कि आप मीडिया प्रश्नों के भीतर प्लेसहोल्डर कक्षाएं घोषित कर सकते हैं।
अद्यतन 2014-12-28: का विस्तार अधिक कॉम्पैक्ट सीएसएस से mixins कर उत्पादन है, लेकिन जब सीएसएस gzipped है इस लाभ कम है। यदि आपका सर्वर gzipped सीएसएस परोसता है (यह वास्तव में चाहिए!), तो बढ़ाता है आपको लगभग कोई लाभ नहीं देता है। तो आप हमेशा मिक्सिन का उपयोग कर सकते हैं! यहां पर अधिक: http://www.sitepoint.com/sass-extend-nobody-told-you/
मुझे नहीं लगता कि यह * बिल्कुल * सटीक है ... आप विस्तार माता-पिता को ओवरराइड करके '@ विस्तार' को कस्टमाइज़ कर सकते हैं। बेशक आप तर्कों में गुजर नहीं सकते हैं, लेकिन फिर यह केवल अंतर है? उस स्थिति में, बिना तर्क के '@ विस्तार 'सिर्फ' @ mixin' है? मुझे अभी भी लाभ या अंतर नहीं दिख रहा है। – Aerovistae
अंतर यह है कि संकलित कोड कैसे व्यवस्थित किया जाता है। –
यहां कुछ अन्य quirks हैं ... http://stackoverflow.com/questions/30744625/sass-and-bootstrap-mixins-vs-extends/30744854#30744854 –
एक अच्छा दृष्टिकोण दोनों का उपयोग करना है - एक मिश्रण बनाएं जो आपको बहुत अनुकूलन की अनुमति देगा और फिर उस मिश्रण के सामान्य कॉन्फ़िगरेशन के लिए विस्तारित करेगा। उदाहरण (एससीएसएस सिंटेक्स) के लिए:
@mixin my-button($size: 15, $color: red) {
@include inline-block;
@include border-radius(5px);
font-size: $size + px;
background-color: $color;
}
%button {
@include my-button;
}
%alt-button {
@include my-button(15, green);
}
%big-button {
@include my-button(25);
}
यह अधिक से अधिक मेरे बटन mixin बुला से बचाता है। इसका मतलब यह भी है कि आपको सामान्य बटनों के लिए सेटिंग्स को याद रखने की आवश्यकता नहीं है, लेकिन आपके पास अभी भी एक सुपर अनन्य, एक-ऑफ बटन चुनने की क्षमता है जिसे आप चुनना चाहिए।
मैं इस उदाहरण को a blog post I wrote से बहुत पहले नहीं लेता हूं। उम्मीद है की यह मदद करेगा।
मिश्रणों का उपयोग करें यदि यह पैरामीटर स्वीकार करता है, जहां संकलित आउटपुट आपके द्वारा पारित होने के आधार पर बदल जाएगा।
@include opacity(0.1);
उपयोग शैलियों में से किसी स्थिर repeatable ब्लॉकों के लिए (प्लेसहोल्डर के साथ) का विस्तार।
color: blue;
font-weight: bold;
font-size: 2em;
मेरी राय में शुद्ध बुराई है और इससे बचा जाना चाहिए। यहाँ कारण है कि:
एससीएसएस दिया:
%mystyle {color: blue;}
.mystyle-class {@extend %mystyle}
//basically anything not understood by target browser (such as :last-child in IE8):
::-webkit-input-placeholder {@extend %mystyle}
निम्नलिखित सीएसएस उत्पन्न हो जाएगा:
.mystyle-class, ::-webkit-input-placeholder { //invalid in non-webkit browsers
color: blue;
}
एक ब्राउज़र एक चयनकर्ता को नहीं समझता है, यह चयनकर्ताओं की पूरी लाइन को अमान्य कर । इसका मतलब है कि आपकी बहुमूल्य रहस्य-शैली अब नीली नहीं है (कई ब्राउज़रों के लिए)। इसका वास्तव में क्या अर्थ है? यदि आप किसी भी समय विस्तार का उपयोग करते हैं जहां ब्राउज़र चयनकर्ता को समझ नहीं सकता है तो विस्तार के हर दूसरे उपयोग को अमान्य कर दिया जाएगा। यह व्यवहार भी बुराई घोंसले के लिए अनुमति देता है:
%mystyle {color: blue;}
@mixin mystyle-mixin {@extend %mystyle; height: 0;}
::-webkit-input-placeholder {@include mystyle-mixin}
//you thought nesting in a mixin would make it safe?
.mystyle-class {@extend %mystyle;}
परिणाम:
::-webkit-input-placeholder, .mystyle-class { //invalid in non-webkit browsers
color: blue;
}
::-webkit-input-placeholder {
height: 0;
}
Tl, डॉ: @extend जब तक आप किसी भी ब्राउज़र spesific चयनकर्ताओं के साथ इसका इस्तेमाल कभी नहीं के रूप में के लिए पूरी तरह ठीक है। यदि आप करते हैं, तो अचानक आप शैलियों को फाड़ देंगे जहां आपने इसका इस्तेमाल किया है। इसके बजाय mixins पर भरोसा करने की कोशिश करो!
दिलचस्प नोट – simhumileco
- 1. $ .extend ({...}) का उपयोग कब करें?
- 2. उल्का सास गहरी फाइलों से आधार सास का उपयोग कर
- 3. $ .extend
- 4. जावा बनाम '#include' में सी/सी ++
- 5. बूटस्ट्रैप-सास जेम बनाम। सीडीएन
- 6. _.extend/_ का उद्देश्य। असाइन करें?
- 7. $ .extend() फ़ंक्शंस
- 8. लैरवेल ब्लेड - @ स्लॉट/@ घटक बनाम @include का लाभ?
- 9. angular2 - बूटस्ट्रैप-सास संकलन का उपयोग कर त्रुटि कोणीय CLI
- 10. एससीएसएस वैरिएबल @extend क्लास
- 11. उपयोग <include /> ButterKnife
- 12. सास का उपयोग क्यों करें (एससीएसएस नहीं)?
- 13. सास
- 14. सास
- 15. सास
- 16. $ .extend और मॉड्यूल पैटर्न
- 17. सास
- 18. सास
- 19. निर्देश सी में घोषणा की अदला-बदली का उपयोग कर बनाम का उपयोग कर ++
- 20. // @include में C++ टिप्पणी
- 21. विस्तार() अंडरस्कोर बनाम रीढ़ की हड्डी का उपयोग कर
- 22. सास
- 23. सास
- 24. सास त्रुटि: चयनकर्ता समूह को
- 25. उपयोग नोड सास डोकर-रचना
- 26. सास-ब्रेकपॉइंट
- 27. OfType() के बाद Include() का उपयोग कैसे करें?
- 28. इंडेक्स बनाते समय INCLUDE क्लॉज का उपयोग क्यों करें?
- 29. एनजी-आवश्यक का उपयोग कर बनाम आवश्यक
- 30. बहु-किरायेदार सास
में आपको बेस क्लास का विस्तार नहीं करना है, यह केवल विकल्प जोड़ता है। बस आपको http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#including_a_mixin और http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#extend पढ़ने की सलाह देते हैं – CodeGroover
इसके अलावा, @CodeGroover, एक उपयोगी टिप्पणी नहीं है, शायद आप सवाल को गलत समझा। इसे पढ़ने से अधिक उपयोगी जानकारी मिलती है: https://gist.github.com/antsa/970172 – Aerovistae
** जब भी आप किसी पैरामीटर के साथ मिश्रित का उपयोग नहीं करेंगे, तो एक विस्तार अधिक कुशल होगा। ** [सौजन्य क्रिस] (https : //css-tricks.com/the-extend-concept/) – Abhijeet