2016-05-29 12 views
0

Ich weiß nicht, ob diese Frage eine einfache oder harte Antwort hat.Erhöhen Sie den negativen Wert der Eigenschaft basierend auf der Fenstergröße

Die Situation ist, dass ich ein Element auf der Seite mit einem negativen Marge habe:

.element { 
margin-left: -195px; 
} 

Es funktioniert gut mit einer 1440x532 Bildschirmgröße (Kontrolle mit Chrome Elemente Inspektoren).

Was ich will, ist irgendwie einfach zu erklären.

Ich möchte einen Anstieg von 1 Pixel (zum Beispiel) in der margin-left des Elements jederzeit das Fenster größer durch ein Pixel ist:

Also, wenn die Fenstergröße 1441 ist die margin-left des Element sein -194px. Wenn die Fenstergröße 1451 ist, ist der Rand links des Elements -184px.

In der gleichen Weise möchte ich das von 1440px aufwärts arbeiten.

WICHTIGER HINWEIS: Was ich möchte, ist ein dynamischer Wert für den linken Rand, der auf der Grundlage der Bildschirmgröße zunimmt und nicht eine Art von Medienabfrage, die den Wert zwischen einem Bildschirmgrößenintervall immer gleich bleiben lässt. Was ich will, würde mich zwingen, eine massive Anzahl von Medienanfragen hinzuzufügen.

Ist dies mit javaScript oder jQuery möglich? (Oder sogar CSS?)

Antwort

1

Die JQuery-Lösungen, die anderen Nutzer geben Sie funktionieren perfekt für diesen Einsatz, aber wenn Sie prefere Sie können auch eine CSS-only Alternative verwenden (es funktioniert auch, wenn der Benutzer Skripts deaktiviert hat!).

Es hat eine auch gute support among browsers

Sie Ihre CSS auf diese Weise implementieren können:

#element{ 
     margin-left: -195px; 
    } 
    @media screen and (min-width: 1440px){ 
     #element{ 
      margin-left: calc(-195px + 100vw - 1440px); //100vw is the width of the screen 

     } 
    } 

Es fügt ein Pixel für jedes Pixel über 1440 Sag mir, wenn das, was Sie

meine ist,
+0

Danke :) Das ist fast perfekt, weil voll CSS ist. Es ist fast da. Nur zwei Dinge: Ich musste in der Medienabfrage die maximale Breite auf die minimale Breite ändern und eine Sache passiert seltsam: Wenn die Bildschirmgröße 1440px erreicht, reicht der Rand links von -195px bis -235px, aber dann funktioniert es gut von da an erhöht sich die Größe jedes Mal um einen Pixel, wenn der Bildschirm 1 Pixel größer ist. Ich werde die Zahlen optimieren, um zu sehen, was passiert. Vielleicht habe ich etwas falsch mit Spezifität oder so. Dann werde ich Ihnen Feedback geben. – viery365

+1

Ok, was ich getan habe, war die Min-Breite auf 1440 zu ändern. der Unterschied zwischen -195px und -235px (40px) hatte damit zu tun. Ich werde deine Antwort leicht bearbeiten, wenn du willst, und sie als die richtige Antwort markieren. Ich danke dir sehr!!! – viery365

+0

Ops, ich habe es verpasst. Danke für die Bearbeitung. Schön, Ihnen zu helfen –

0

Ja ist es möglich, mit JQuery mit resize()

$(window).resize(function() { 
    if (($(window).width() <= 1441)) { 
    $('.element').css('margin-left', "-194px") 
    }else if($(window).width() <= 1451){ 
    $('.element').css('margin-left', "-184px") 
    } 

}); 

Aber ich schlage vor, Sie Medienanfragen mit CSS zu verwenden:

@media screen and (max-width: 1441px) { 
    .element { 
    margin-left: -194px; 
    } 
} 

@media screen and (max-width: 1451px) { 
    .element { 
    margin-left: -184px; 
    } 
} 
+0

Vielen Dank für Ihre schnelle Antwort! Ich werde versuchen und dann gebe ich Ihnen Feedback – viery365

+0

Das Problem mit CSS in diesem Fall ist, dass ich "unendliche" Media-Abfragen machen musste, wenn ich einen anderen Wert für eine andere Bildschirmgröße wollte. Ab dieser Bildschirmgröße bleibt der Wert von margin-left gleich. Aber ich verstehe deinen Standpunkt. – viery365

+0

so ist das Problem gelöst? oder nicht ? – Gintoki

1

Dies ist nicht möglich mit CSS da es keine Eigenschaft oder Methode zum Erfassen der Fenstergröße gibt. Wenn dies der Fall wäre, könnte dies unter Verwendung von calc() durchgeführt werden.

Dies ist jedoch mit JavaScript möglich.

function resizeScreen() { 
    var windowWidth = $(window).width(); 
    var $element = $('.element'); 

    if (windowWidth > 1440) { 
     // Calculate the new (negative) margin by subtracting the windows width by 1440 (e.g. 1500-1440 = 60). The new margin would be: -195 + 60 = -135. 
     var newMargin = $element.css('margin-left') + (windowWidth - 1440); 

     $('.element').css('margin-left', newMargin) 
    } 
} 

$(window).resize('resizeScreen'); 
+0

Vielen Dank für Ihre Antwort. Ich werde es ausprobieren :) – viery365

+0

Das funktioniert perfekt. Ich wählte die andere Antwort wegen der CSS-Angelegenheit, aber diese funktioniert auch gut. Ich nehme jedoch Ihre Kommentare in Betracht und werde es in verschiedenen Browsern versuchen. Jedenfalls hat sich aus diesem eine andere Frage ergeben. Nach dem Testen ist die Erhöhung des Margin-Wertes um 1px zu viel für das, was ich brauche. Was mein Layout benötigt, ist ein kleinerer Anstieg, wie zum Beispiel 0,1 Pixel pro Pixel Pixelschritt. Ich werde hier noch eine Frage hinzufügen und ich werde es euch wissen lassen. Vielen Dank für Ihre Hilfe! – viery365

+0

Die andere Frage ist hier :) http://stackoverflow.com/q/37510459/4551792 – viery365

Verwandte Themen