2012-04-30 14 views
31

मेरे पास jquery accorion id #accordion है और हेडर क्लास नाम .simpleColor के अंदर की कुछ सामग्री है। अब मैं एक नमूना मार्जिन को .simpleColor देना चाहता हूं। छद्म में ... यह कुछ इस तरह लग रहा है,क्या सीएसएस के अंदर गणित करना संभव है?

.simpleClass { 
    margin-left: ((#accordion.width/2) - (.simpleColor.width/2)); 
} 

मैं ऐसे जावास्क्रिप्ट इस लक्ष्य को हासिल करने के लिए करता है, तो यह संभव है के रूप में किसी भी अन्य तकनीक का उपयोग करने के लिए खुला रहा हूँ।

+1

ऐसा लगता है कि आप कुछ क्षैतिज रूप से केंद्र बनाना चाहते हैं। क्या आपने 'मार्जिन: 0 ऑटो; 'की कोशिश की है? – Ryan

+5

क्या आपने सुना है [calc()] (http://www.w3.org/TR/css3-values/#calc0) – Musa

+0

नहीं कभी नहीं ... लगता है उपयोगी लगता है – doNotCheckMyBlog

उत्तर

64

वहाँ एक सीएसएस calc बुलाया समारोह है कि बहुत अच्छी समर्थन प्राप्त करने शुरू कर रहा है है में। वाक्य रचना का पालन के रूप में काम करता है:

width: calc(50% - 100px); 

(ध्यान दें कि ऑपरेटरों के आसपास खाली स्थान के महत्वपूर्ण है)

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

कैलक 1 9 क्रोम, फ़ायरफ़ॉक्स 4 और आईई 9 के बाद से समर्थित है। यह सुविधा व्यापक रूप से इसका व्यापक रूप से उपयोग करने के लिए पर्याप्त रूप से समर्थित नहीं है, लेकिन यह भविष्य में बहुत दूर नहीं होगी और यह याद रखने और इसके लिए तत्पर हैं।

+0

क्रोम, फ़ायरफ़ॉक्स और आईई में पूरी तरह से काम करता है जैसा कि आपने Win7 और 8 पर उल्लेख किया है। धन्यवाद! पैडिंग प्राप्त करना और 100% चौड़ाई div इस तरह का दर्द रहा है, और कुछ आसान के लिए जावास्क्रिप्ट का उपयोग करना एक कचरा जैसा लग रहा था। यह काफी बेहतर है! –

+3

आप ['बॉक्स-साइजिंग: सीमा-बॉक्स; '] (http://www.paulirish.com/2012/box-sizing-border-box-ftw/) में भी देखना चाहते हैं। इससे पैडिंग को चौड़ाई से जोड़ने की बजाय चौड़ाई से घटाया जाता है, और यह कैलक से बेहतर समर्थन करता है, आईई 8 पर वापस आता है, और इसमें [पॉलीफिल आईई 6/7 के लिए उपलब्ध है] (https://github.com/Schepp/box-sizing- पॉलीफिल) अगर समर्थन की आवश्यकता है। आईई 8 में अभी भी एक बड़ा बाजार हिस्सा है, इसलिए मैं आपकी आवश्यकताओं के लिए 'बॉक्स-साइजिंग' का उपयोग करने की सलाह देता हूं। – TimE

+0

आपने टिक किया :) धन्यवाद –

1

आप अन्य तकनीक का उपयोग करने के लिए खुला रहे हैं, कम उपयोग करने का प्रयास: http://lesscss.org/

+0

स्पॉट पर! धन्यवाद माइकल – doNotCheckMyBlog

3
jQuery('.simpleClass').css('margin-left', (jQuery('#accordian').width()/2) - (jQuery('.simpleColor').width()/2) + 'px'); 

चाहिए कि आप क्या चाहते रहे हैं। लेकिन आपको जावास्क्रिप्ट में ऐसा कुछ करने की ज़रूरत है, आप इसे शुद्ध सीएसएस में नहीं कर सकते हैं जब तक कि #accordian और .simpleColor की चौड़ाई अग्रिम में ज्ञात न हो (और इस प्रकार अग्रिम में गणना की जाती है)।

8

सीएसएस के अंदर गणितीय परिचालनों को मूल रूप से करना संभव नहीं है। आप पृष्ठ लोड पर सीएसएस गुणों को बदलने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन यह एक दर्द है और आपके पृष्ठ को धीमा करने के लिए प्रत्येक पेज लोड किया जाना चाहिए।

आपको LESS, Stylus, या SASS जैसे सीएसएस प्रीप्रोसेसर का उपयोग करने की आवश्यकता होगी।

इन भाषाओं में से किसी एक का उपयोग करने का बोनस यह है कि आप उनसे वास्तविक सीएसएस स्टाइलशीट उत्पन्न कर सकते हैं। आपको फ़ंक्शंस, मिक्सिन, वेरिएबल, आदि जैसे लाभ भी मिलते हैं।

+1

स्पॉट ऑन, मुझे जो चाहिए वह मिला लेकिन मैं माइकल के जवाब को स्वीकार करना चाहता हूं क्योंकि उसने पहले बताया था :) धन्यवाद btw – doNotCheckMyBlog

1

मेरा मानना ​​है कि सीएसएस शुद्ध शैली परिभाषा होना चाहिए। मैं इसके साथ कुछ गणना मिश्रण करना पसंद नहीं करता। मुझे क्या करना होता है कि मेरी जावास्क्रिप्ट

var accWidth=parseInt($("#accordion").css("width").replace("px","")); 
var simpWidth=parseInt($(".simpleColor").css("width").replace("px","")); 
var marginLeft=((accWidth/2)-(simpWidth/2));  
$(".simpleClass").css("margin-left",marginLeft); 

कार्य नमूना http://jsfiddle.net/mzTRw/19/

+1

parseInt ($ ("# accordion") के बजाय। css ("width")। प्रतिस्थापित करें ("पीएक्स", ""))) आप पूर्णांक मान प्राप्त करने के लिए केवल $ ("# accordion") चौड़ाई() का उपयोग कर सकते हैं। –

1

इस उदाहरण को देखें .. उन्होंने सीएसएस में बहुत गणित का उपयोग किया है।

http://codepen.io/schoenwaldnils/pen/DLiyr

+0

ध्यान दें कि [केवल-लिंक उत्तर] (http://meta.stackoverflow.com/tags/link-only-answers/info) निराश हैं, SO उत्तर अंत बिंदु होना चाहिए समाधान के लिए एक खोज (बनाम अभी तक संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra

+0

हे! वह एससीएसएस है! सीएसएस नहीं कंपाइलर साथी को शांत करेगा –

संबंधित मुद्दे

 संबंधित मुद्दे