2016-05-04 11 views
1

Ich probiere w3.css für Styling, zusammen mit Knockout, und wenn ich eine Fußzeile verwende, deckt es den Inhalt am unteren Rand der Seite.Fußzeile deckt meine Inhalte bei der Verwendung von w3.css

Ich habe eine Schaltfläche am unteren Rand meines Inhalts. Wenn die Größe der Seite geändert oder klein genug ist, bedeckt die Fußzeile die Schaltfläche.

Siehe codepen oder den Code unten

function setting(color) { 
 
    this.color = ko.observable(color); 
 
    this.colorClassName = ko.computed(function() { 
 
    return "w3-hover-" + this.color(); 
 
    }, this); 
 
} 
 

 
function myInput() { 
 
    this.data = ko.observable(""); 
 
    this.nameValid = ko.computed(function() { 
 
    return !(this.data() == null || this.data().length == 0); 
 
    }, this); 
 
    this.error = ko.computed(function() { 
 
    //if (this.data() == null || this.data().length == 0) 
 
    if (this.nameValid() == false) { 
 
     return "Enter name"; 
 
    } else { 
 
     return ""; 
 
    } 
 
    }, this); 
 

 
    this.display = ko.computed(function() { 
 
    if (this.nameValid() == false) { 
 
     return "block"; 
 
    } else { 
 
     return "none"; 
 
    } 
 
    }, this); 
 

 
    this.ageData = ko.observable(); 
 
    this.ageValid = ko.computed(function() { 
 
    var age = this.ageData() + ""; 
 

 
    var patt = new RegExp(/^[0-9]+$/g); /// ^-from start, $-to end, [0-9] - 0 to 9 numbers only 
 
    var res = patt.test(age); 
 
    if (isNaN(age) == true || res == false) { 
 
     return false; 
 
    } else { 
 
     return true; 
 
    } 
 
    }, this); 
 
    this.ageError = ko.computed(function() { 
 
    if (this.ageValid() == false) { 
 
     return "Enter a valid age"; 
 
    } else { 
 
     return ""; 
 
    } 
 

 
    }, this); 
 
    this.ageDisplay = ko.computed(function() { 
 
    if (this.ageValid() == true) { 
 
     return "none"; 
 
    } else { 
 
     return "block"; 
 
    } 
 
    }, this); 
 

 
    this.phone = ko.observable('http://digitalbush.com/projects/masked-input-plugin/'); 
 

 
    this.allValid = ko.computed(function() { 
 
    return this.ageValid() && this.nameValid(); 
 
    }, this); 
 
} 
 

 
function myModel() { 
 
    this.name = "Ice-Cream"; 
 
    this.items = [{ 
 
    name: "Chocolate", 
 
    price: 10 
 
    }, { 
 
    name: "Vanilla", 
 
    price: 12 
 
    }]; 
 
    this.style = new setting('pale-green'); 
 
    this.input = new myInput(); 
 

 
    this.changeColor = function() { 
 
    if (this.style.color().indexOf('blue') == -1) { 
 
     this.style.color('pale-blue'); 
 
    } else { 
 
     this.style.color('pale-green'); 
 
    } 
 
    }; 
 
} 
 
ko.applyBindings(new myModel());
<script type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js'></script> 
 
<link href="http://www.w3schools.com/lib/w3.css" rel="stylesheet" type="text/css"> 
 

 
<body class="w3-content w3-pale-blue" style="max-width:100%"> 
 
    <header class="w3-container w3-pale-green w3-border"> 
 
    <h1>Hello</h1> 
 
    </header> 
 
    <div class="w3-container w3-pale-yellow w3-border w3-padding-hor-16 w3-content" style="max-width:100%"> 
 
    <a href="http://www.w3schools.com/w3css">W3.CSS</a> 
 
    <p> 
 
     The item is <span data-bind="text: name"></span> today. 
 
     <br />Available flavours are: 
 
    </p> 
 
    <div class="w3-container"> 
 
     <ul data-bind="foreach: items" class="w3-ul w3-left w3-border w3-border-red"> 
 
     <li class="w3-ul w3-hoverable w3-border-red " data-bind="css: $parent.style.colorClassName()"> 
 
      <span data-bind="text: name"></span> is $<span data-bind="text:price" /> 
 
     </li> 
 
     </ul> 
 
    </div> 
 

 
    <label class="w3-label w3-text-blue w3-xlarge">Name</label> 
 
    <input class="w3-input w3-border" type="text" data-bind="textInput: input.data"> 
 
    <label class="w3-label w3-text-red w3-large" data-bind="text: input.error(), style: { display: input.display()}"></label> 
 
    <br /> 
 
    <label class="w3-label w3-text-blue w3-xlarge">Age</label> 
 
    <input class="w3-input w3-border" type="text" data-bind="textInput: input.ageData"> 
 
    <label class="w3-label w3-text-red w3-large" data-bind="text: input.ageError(), style: { display: input.ageDisplay()}"></label> 
 
    <br /> 
 
    <label class="w3-label w3-text-blue w3-xlarge">Phone</label> 
 
    <input class="w3-input w3-border" type="text" data-bind="textInput: input.phone"> 
 
    <!--<label class="w3-label w3-text-red w3-large" data-bind="text: input.phoneError(), style: { display: input.phoneDisplay()}"></label>--> 
 
    <br /> 
 
    <button class="w3-btn w3-border w3-border-teal w3-round w3-teal" data-bind="click: changeColor, enable: input.allValid()">Test</button> 
 
    </div> 
 

 
    <footer class="w3-light-grey w3-bottom"> 
 
    <div class="w3-container"> 
 
     <p>This is my footer</p> 
 
    </div> 
 
    </footer>

+0

ich die Lösung denke die anderen Container-Elemente liegt, wird über die Fußzeile nicht gehen zu sagen aber scrollen Sie stattdessen. Ich muss möglicherweise eine Art von Zeilenlayout verwenden. – Quintonn

Antwort

1

war meine Lösung ein weiteres div-Element mit dem gleichen Inhalt wie meine Fußzeile hinzuzufügen, aber unsichtbar zu machen. Auf diese Weise füllt es den Raum hinter der realen Fußzeile.

Im Code i oben i wird die folgende

<div class="w3-container" style="opacity:0"> 
    <p>This is my footer</p> 
</div> 

Die aktualisierte codepen zeigt die Lösung hinzufügen.

+0

Ich habe es für mich genagelt. –

0

Die Elemente .w3-top, .w3-bottom eine Position :fixed haben, so dass sie immer auf die Seite bleiben würde.

Entfernen Sie dies aus ihrem Stylesheet oder fügen Sie eine Alternative zu Ihrem eigenen hinzu.

z.

.w3-bottom { 
position: static; 
} 
+0

Das bedeutet, dass meine Fußzeile nicht auf den unteren Rand der Seite gehen, sondern nur als das letzte Element auf der Seite. In meinem Code ist es das gleiche als nicht spe cifying w3-bottom. – Quintonn

0

Die Klasse der Fußzeile ist w3-Boden, und durch defaut, wird seine Position fixiert, so dass Sie es zu relativ ändern müssen:

.w3-bottom { 
    position: relative !important;   
} 
+0

Das bedeutet, dass meine Fußzeile nicht an den unteren Rand der Seite gelangt, sondern stattdessen als letztes Element auf der Seite angezeigt wird. In meinem Code ist es das gleiche wie w3-bottom nicht anzugeben. – Quintonn

0

Ein anderer Weg zu platzieren könnte die " button "in einem eigenen" div "um seine Attribute besser zu kontrollieren, entfernen Sie das" div "aus der Fußzeile und der unteren Klasse. Etwas wie:

<div class="w3-container w3-padding-bottom-32"> 
    <button class="w3-btn w3-border w3-border-teal w3-round w3-teal" data-bind="click: changeColor, enable: input.allValid()">Test</button> 
    </div> 

    <footer class="w3-container w3-light-grey"> 
     <p>This is my footer</p> 
    </footer> 

Bitte lassen Sie mich wissen, wenn es für Sie arbeitet.

freundlicher, Edwin

0

Versuchen Sie, die Stile von Sticky footer example from the bootstrap zu verwenden. Aber diese Methode hat einen Nachteil: Fußzeilenhöhe behoben hat :(

Beispiel:

/* Sticky footer styles 
 
-------------------------------------------------- */ 
 
html { 
 
    position: relative; 
 
    min-height: 100%; 
 
} 
 
body { 
 
    /* Margin bottom by footer height */ 
 
    margin-bottom: 80px; 
 
} 
 
.footer { 
 
    position: absolute; 
 
    bottom: 0; 
 
    width: 100%; 
 
    overflow: hidden; 
 
    /* Set the fixed height of the footer here */ 
 
    height: 80px; 
 
    background-color: #f5f5f5; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<title>W3.CSS</title> 
 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
 
<link rel="stylesheet" href="http://www.w3schools.com/lib/w3.css"> 
 
<body> 
 

 
<div class="w3-container w3-teal"> 
 
    <h1>Header</h1> 
 
</div> 
 

 
<div class="w3-container"> 
 
    <p>The w3-container class can be used to display headers.</p> 
 
</div> 
 

 
<div class="footer w3-container w3-teal"> 
 
    <h5>Footer</h5> 
 
    <p>Footer information goes here</p> 
 
</div> 
 

 
</body> 
 
</html>