2015-02-25 10 views
5

Wir haben jetzt begonnen, calc() in CSS zu verwenden, um Breiten auf ein Ergebnis der Berechnung festzulegen. Zum Beispiel:Was ist das Ergebnis von calc() In CSS

<div id='parent'> 
<div id='calcWidth'></div> 
</div> 


    #parent{ 
      width:100px; 
      } 
    #calcWidth{ 
      width:calc(100% - 3px); 
      height:100px; 
      background:red; 
      } 

Ich weiß, wie calc() funktioniert, aber ich möchte nur wissen, was in CSS zurückgegeben wird, an der Stelle der calc(100% - 3px); in dem oben angegebenen Beispiel.

Was ist meine Verwirrung?

  • Im obigen Beispiel width:calc(100% - 3px);

  • sagen, dass die Breite 100% tatsächlich 100px ist, die zur Laufzeit durch CSS bestimmt wird.

  • Also die berechnete Breite wird 100px-3px=97px 97px sein und wenn Sie es umwandeln in %97% richtig?

Aber jetzt gibt es zwei Möglichkeiten

  • 97px zurückgeführt wird, die als eine Breite eingestellt ist.

  • 97% zurückgegeben wird, die als Breite festgelegt ist.

Meine Frage ist:

In beiden Fällen nun die Breite ist auf 97px eingestellt werden, aber was ist zurück als Ergebnis width:calc(100% - 3px);, 97px OR 97%?

Sie auch diese Geige sehen: http://jsfiddle.net/8yspnuuw/1/

EDIT: Bitte lesen Sie

Freunde Siehe: Nehmen Sie ein einfaches Beispiel:

<div class='parent'> 
    <div class='child'> 
    </div> 
    </div> 

.parent{ 
width:200px; 
} 
.child{ 
    width:20% 
    } 

weiß, dass ich die Breite von Kind wird 160 px, wenn es gerendert wird. okay! aber das ist nicht was in CSS gesetzt ist richtig? css setzt es in%, es wird nur in Pixeln gerendert.

So ähnlich, Calc verwenden, es % oder pixel zurückkehrt

Oder meine Frage zu erklären, lesen BoltClocks answer, was der berechnete Wert ist, (und nicht der verwendete Wert, ich weiß, dass das in Pixeln ist)

+0

Sie können FireBug verwenden, um den berechneten Stil zu sehen, oder getComputedStyle selbst über die Konsole ausführen: https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle und einfach testen :) – Gerino

+2

interessante Frage +1 – Persijn

+0

Angesichts der Tatsache, dass das Endergebnis immer in Pixeln gerendert wird, warum ist das spezifische Format von 'calc()' 's Rückgabewert wichtig? Ich nehme an, dass es immer in Pixeln sein wird, da schließlich jeder berechnete Wert der Längen zugewiesen/gerendert wird, aber ich weiß es nicht genau. –

Antwort

7

Die spec definiert nicht sehr streng, was der berechnete Wert eines calc() Ausdruck ist jedoch sagt es, dass Prozentsätze werden nie berechnet als Teil des berechneten Wertes. Wie genau dieser Wert repräsentiert ist, bleibt als Implementierungsdetail übrig. Wenn Sie statt eines Prozentwerts eine Pixellänge sehen, ist diese Länge der verwendete Wert und nicht der berechnete Wert, da der Pixelwert nur nach nach berechnet werden kann.

Beachten Sie, dass getComputedStyle() Ergebnisse zurückgeben kann, die nicht mit der CSS-Definition von "berechneten Wert" übereinstimmen. Dies ist eine der vielen unglücklichen Folgen, wenn Browser ihr eigenes Ding in den 90er Jahren machen.

+0

so heißt das Pixel ist was durch calc gesetzt? –

+0

@Naeem Shaikh: Der Pixelwert wird beim Rendern verwendet (daher "benutzter Wert"). – BoltClock

+0

Also ich denke, es gibt keine klare Antwort irgendwo, oder irgendwelche Dokumente –

5

Die gerenderten Breiten sind in Pixeln. from your example

+1

ich weiß, dass es in Pixel gerendert wird: Sie lesen meine Frage ** In beiden Fällen soll jetzt die Breite auf 97px ** gesetzt werden, aber was als Ergebnis von cals zurückgegeben wird, ist meine Frage –

+4

Es gibt zurück eine Funktion, wird der Wert in Pixel gerendert. Warum ist das wichtig? – johanthuresson

0

Unabhängig davon, wie groß die Pixelgröße des calcWidth div ist, wird der Wert 3 davon reduziert. Wenn beispielsweise die Breite des übergeordneten Elements 200 ist, beträgt die Breite des calcWidth div 197px. so ist es px und nicht%

Demo

document.getElementById('calcWidth').offsetWidth; 

image style in pixel jsdemo

+1

ich stimme nicht wirklich das ist falsch igigess .. versuchen, Eigenschaft wo, Breite sollte nur in px, zum Beispiel Box-Schatten –

+1

Ich verstehe, was Sie sagen .. aber meine Frage ist etwas schwer zu begreifen, ich denke .. Bitte lesen Sie meine bearbeitete Frage –

+0

@NaeemShaikh die Berechnung() verwendet% aber die berechnete Stil in Chrom zeigt, dass der gerenderte Wert in Pixel ist .. so denke ich, das ist die Antwort wie BoltClock in seiner Antwort erwähnt .. berechen – Lucky