392 Stimmen

Bootstrap 3 Navbar mit Logo

Ich möchte die Bootstrap 3 Standard-Navigationsleiste mit einem Bildlogo anstelle einer Textmarke verwenden. Wie mache ich das richtig, ohne Probleme mit verschiedenen Bildschirmgrößen zu verursachen? Ich gehe davon aus, dass dies eine häufige Anforderung ist, aber ich habe noch kein gutes Codebeispiel gesehen. Eine wichtige Anforderung neben der akzeptablen Anzeige auf allen Bildschirmgrößen ist die Menü-Zusammenklappbarkeit auf kleineren Bildschirmen.

Ich habe versucht, einfach ein IMG-Tag innerhalb des A-Tags zu platzieren, der die Klasse navbar-brand hat, aber das hat dazu geführt, dass das Menü auf meinem Android-Telefon nicht ordnungsgemäß funktioniert. Ich habe auch versucht, die Höhe der Navbar-Klasse zu erhöhen, aber das hat die Dinge noch mehr durcheinander gebracht.

Übrigens ist mein Logo-Bild höher als die Höhe der Navigationsleiste.

429voto

Michael Punkte 9153

Warum versucht jeder, es auf die harte Tour zu machen? Sicher, einige dieser Ansätze werden funktionieren, aber sie sind komplizierter als notwendig.

OK, zuerst - du brauchst ein Bild, das in deine Navigationsleiste passt. Du kannst die Größe deines Bildes über das CSS height Attribut anpassen (Breite skalieren zulassen) oder du kannst einfach ein passend dimensioniertes Bild verwenden. Wie auch immer du dich entscheidest - das Aussehen wird davon abhängen, wie gut du dein Bild dimensionierst.

Aus irgendeinem Grund möchte jeder das Bild in einem Anchor mit navbar-brand platzieren, aber das ist nicht notwendig. navbar-brand wendet Textstile an, die für ein Bild nicht notwendig sind, sowie die Klasse navbar-left (ähnlich wie pull-left, aber für die Verwendung in einer Navigationsleiste). Alles was du wirklich brauchst ist navbar-left hinzuzufügen.

Du kannst sogar dies mit einem navbar-brand Element fortsetzen, das rechts neben dem Bild erscheinen wird.

152voto

Vicky Punkte 9369
        Navigation umschalten

75voto

Bryan Willis Punkte 3472

Bootstrap 3 Logo in der Navbar ändern

VOLLSTÄNDIGE DEMO MIT VIELEN BEISPIELEN

WICHTIGES UPDATE: 12/21/15

Es gibt derzeit einen Bug in Mozilla, den ich entdeckt habe, der die Navbar bei bestimmten Browserbreiten mit VIELEN DEMOS AUF DIESER SEITE zum Absturz bringt. Grundsätzlich beinhaltet der Bug in Mozilla das linke und rechte Padding des Navbar-Branding-Links als Teil der Bildbreite. Dies kann jedoch leicht behoben werden und ich habe dies getestet und bin ziemlich sicher, dass es das stabilste Beispiel auf dieser Seite ist. Es wird automatisch skaliert und funktioniert in allen Browsern.

Fügen Sie einfach dies zu Ihrem CSS hinzu und verwenden Sie navbar-brand genauso wie Sie .img-responsive verwenden würden. Ihr Logo passt automatisch

.navbar-brand {
  padding: 0px; /* Firefox-Bugbehebung */
}
.navbar-brand>img {
  height: 100%;
  padding: 15px; /* Firefox-Bugbehebung */
  width: auto;
}

Eine weitere Option ist die Verwendung eines Hintergrundbilds. Verwenden Sie ein Bild beliebiger Größe und legen Sie dann die gewünschte Breite fest:

.navbar-brand {
  background: url(http://disputebills.com/site/uploads/2015/10/dispute.png) center / contain no-repeat;
  width: 200px;
}

URSPRÜNGLICHE ANTWORT UNTEN (nur zur Referenz)

Viele Leute vergessen oft das object-fit. Persönlich denke ich, dass es das einfachste ist, damit zu arbeiten, weil das Bild automatisch an die Menügröße angepasst wird. Wenn Sie object fit einfach auf das Bild anwenden, wird es automatisch auf die Höhe des Menüs skaliert.

    .navbar-brand > img {
      max-height: 100%;
      height: 100%;
      -o-object-fit: contain;
      object-fit: contain;
    }

Es wurde darauf hingewiesen, dass dies in IE "noch" nicht funktioniert. Es gibt ein Polyfill, aber das könnte übertrieben sein, wenn Sie es nicht für etwas anderes verwenden möchten. Es sieht so aus, als ob object-fit für eine zukünftige Version von IE geplant ist, also wird dies in allen Browsern funktionieren, sobald dies geschieht.

Wenn Sie jedoch die .img-responsive-Klasse in Bootstrap beachten, nimmt das maximale Breite davon an, dass Sie diese Bilder in Spalten oder ähnlichem anordnen, die eine explizite Breite haben. Das würde bedeuten, dass 100% speziell 100% der Breite des übergeordneten Elements bedeutet.

    .img-responsive
        max-width: 100%;
        height: auto;
    }

Der Grund, warum wir das mit der Navbar nicht verwenden können, liegt darin, dass das Elternelement (.navbar-brand) eine feste Höhe von 50px hat, aber die Breite nicht festgelegt ist.

Wenn wir diese Logik nehmen und umkehren, um responsiv basierend auf der Höhe zu sein, können wir ein responsives Bild haben, das sich an die Höhe von .navbar-brand anpasst, und durch Hinzufügen und automatisches Setzen der Breite wird es sich proportional anpassen.

max-height: 100%;
width: auto;

Normalerweise müssten wir display:block; zur Situation hinzufügen, aber da .navbar-brand bereits float:left; angewendet hat, wird es automatisch als Block-Element fungieren.


Sie könnten auf die seltene Situation stoßen, dass Ihr Logo zu klein ist. Der img-responsive-Ansatz berücksichtigt dies nicht, aber wir werden es tun. Indem Sie auch das "height"-Attribut zu .navbar-brand > img hinzufügen, können Sie sicher sein, dass es sowohl vergrößert als auch verkleinert wird.

max-height: 100%;
height: 100%;
width: auto;

Um dies abzuschließen, habe ich sie zusammengefügt und es scheint in allen Browsern perfekt zu funktionieren.

.navbar-brand>img {
   max-height: 100%;
   height: 100%;
   width: auto;
   margin: 0 auto;

   /* Wahrscheinlich nicht mehr erforderlich, schadet aber nicht */
   -o-object-fit: contain;
   object-fit: contain; 

}

            Navigation umschalten

            Home
            Über
            Kontakt

DEMO http://codepen.io/bootstrapped/pen/KwYGwq

23voto

Bass Jobsen Punkte 48470

Auch wenn deine Frage interessant ist, erwarte ich nicht, dass es eine einzige Antwort darauf geben wird. Vielleicht ist deine Frage zu allgemein. Deine Lösung sollte abhängig sein von: anderen Inhalten im Menü (Anzahl der Elemente), Größe deines Logos, ob dein Logo responsiv ist, etc. Das Einfügen des Logos in das a (mit navbar-brand) scheint ein guter Ausgangspunkt zu sein. Du solltest die navbar-brand Klasse verwenden, da dies ein Padding (oben / unten) von 15 Pixeln hinzufügt.

Ich habe diese Einstellung auf http://getbootstrap.com/examples/navbar/ mit einem Logo von 300x150 Pixel getestet.

Volle Bildschirmgröße > 1200:

Bildbeschreibung hier eingeben

Zwischen 768 und 992 Pixel (Menü nicht zusammengeklappt):

Bildbeschreibung hier eingeben

<768 (Menü zusammengeklappt)

Bildbeschreibung hier eingeben

Abgesehen von den ästhetischen Aspekten habe ich keine technischen Probleme gefunden. Auf kleinen Bildschirmen wird ein großes Logo möglicherweise überlappen oder den Viewport sprengen. Bildschirme zwischen 768 und 992 Pixel haben auch Probleme, wenn der Inhalt nicht in einer Zeile passt, siehe zum Beispiel: https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/18

Das Standard-Navigationsmenü hat Das Standard-Navigationsmenü-Beispiel fügt einen unteren Abstand von 30px hinzu, sodass der Inhalt Ihres Menüs niemals den Inhalt Ihrer Seite überlappen sollte. (feste Navigationsleisten haben Probleme, wenn sich die Höhe der Navigationsleiste ändert).

Du benötigst etwas CSS und Media Queries, um das Menü an verschiedene Bildschirmgrößen anzupassen. Bitte versuche, deine Frage genauer zu stellen, z.B. beschreibe das Problem, das du auf Android gefunden hast.

Update siehe http://bootply.com/77512 für ein Beispiel.

Auf kleineren Bildschirmen wie einem Telefon erscheint das zusammengeklappte Menü über dem Logo

Vertausche den Button und das Logo in deinem Code, zuerst das Logo (setze float:left auf das Logo)

Es gibt keine Möglichkeit, die Menüpunkte mit irgendetwas außer oben auszurichten

Setze den margin-top für .navbar-collapse ul. Verwende Logo-Höhe minus Navigationsleisten-Höhe, um es nach unten auszurichten oder (Logo-Höhe - Navigationsleisten-Höhe) / 2, um es zu zentrieren

23voto

Anleitung, wie man eine Bootstrap-Navigationsleiste mit einem Logo erstellt, das größer als die Standardhöhe (50px) ist:

Beispiel mit einem Logo von 100px x 100px, Standard-CSS:

  1. Berechne die Höhe und (Padding oben + Padding unten) des Logos. Hier 120px (100px Höhe + Padding oben (10px) + Padding unten (10px))

  2. Gehe zu Bootstrap / Anpassen. Setze anstelle der Navigationsleistenhöhe 50px > 120px (50 + 70) und ändere die navbar-collapse-max-height von 340px auf 410px (340 + 70). Lade das CSS herunter.

  3. In diesem Beispiel verwende ich diese Navigationsleiste. Im navbar-brand:

        ...
    
      ...

    füge eine Klasse, z.B. myLogo, und ein img (dein Logo) hinzu

    [![](yourLogo.jpg)](#).

  4. Füge CSS hinzu

    .myLogo { padding: 10px; }

  5. Passe es für andere Größen an.

Beispiel

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X