2012-04-30 3 views
31

私はjquery accorion id #accordionと、ヘッダクラス名.simpleColorのコンテンツの一部を持っています。今度は、計算された余白を.simpleColorに渡したいと思います。擬似では...それはこのような何か、CSSの中で数学をすることは可能ですか?

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

私はそれが可能である場合は、これを達成するためにJavaScriptなどの他の技術を使用して開いているように見えます。

+1

あなたは何かを水平にセンタリングしたいと思うようです。あなたは 'margin:0 auto;'を試しましたか? – Ryan

+5

あなたは[calc()]のことを聞いたことがありますか?(http://www.w3.org/TR/css3-values/#calc0) – Musa

+0

いいえ決して...音が役に立たないようです – doNotCheckMyBlog

答えて

64

かなり良いサポートを得るために始めているcalcと呼ばれるCSS機能がありますでそれを行うだろう。構文は以下のように動作します:

width: calc(50% - 100px); 

これは、CSSでの真の動的な計算をサポートすることができます

(事業者の周りの空白が重要であることに注意してください)。プリプロセッサでは、静的な長さと静的な長さ、相対的な長さと相対的な長さを組み合わせることしかできません。

Calcは、Chrome 19、Firefox 4、およびIE 9以降でサポートされています。この機能は幅広く使用するには十分に広くサポートされていませんが、将来にはあまり遠く及ばないでしょう。これは覚えてお待ちしております。

+0

Win7と8で言及したように、Chrome、Firefox、IEで完全に動作します。ありがとうございます! パディングと100%幅のdivを取得することは非常に苦痛であり、何かのためにjavascriptを使用することは無駄に思えました。これははるかに優れています! –

+3

また、['box-sizing:border-box;'](http://www.paulirish.com/2012/box-sizing-border-box-ftw/)も参照してください。これにより、パディングは追加するのではなく、幅から減算され、IE8に戻ってcalcよりも優れたサポートが得られます。また、[polyfill for IE6/7](https://github.com/Schepp/box-sizing-ポリ充てん)。 IE8はまだかなりのシェアを持っているので、あなたのニーズに合わせて 'box-sizing'を使うことをお勧めします。 – TimE

+0

あなたはチックでした:) thanks –

1

あなたが他の技術を使用してに開放している場合は、以下を使用してみてください:http://lesscss.org/

+0

Spot on!ありがとうマイケル – doNotCheckMyBlog

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

あなたが欠けている何をすべき。しかし、あなたはjavascriptでこれを行う必要があります。#accordianと.simpleColorの幅があらかじめわかっていなければ(したがって事前に計算されていない限り)、純粋なCSSで行うことはできません。

8

CSS内で数学演算をネイティブに行うことはできません。 JavaScriptを使用してページの読み込み時にCSSのプロパティを変更することはできますが、これは苦痛であり、ページが読み込まれるたびにページを遅くする必要があります。

LESS,Stylus、またはSASSのようなCSSプリプロセッサを使用する必要があります。

これらの言語のいずれかを使用すると、実際のCSSスタイルシートを生成できるという利点があります。また、機能、ミックスイン、変数などのメリットも得られます。

+1

私は必要なものを得ましたが、私は彼が最初に指摘したようにMichaelの答えを受け入れたいと思います:) thanks btw – doNotCheckMyBlog

1

私はCSSが純粋なスタイル定義であると信じています。私はそれといくつかの計算を混在させたくない。私は私のjavascriptの

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" "px"、 ""))$( "#accordion")。width()を使って整数値を得ることができます。 –

1

この例を参照してください。彼はCSSで多くの数学を使用しています。

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

+0

[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)はお勧めできませんので、SOの回答は解決策を探すことです(これに対して、時間の経過とともに古くなる傾向がある参照の途中停止)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra

+0

ねえ!それがSCSSです! CSSではなくコンパイラは、仲間をcaculateします –

関連する問題