Ich möchte die Bootstrap 3-Standardnavigationsleiste mit einem Bildlogo anstelle von Textbranding verwenden. Was ist der richtige Weg, um dies zu tun, ohne Probleme mit unterschiedlichen Bildschirmgrößen zu verursachen? Ich gehe davon aus, dass dies eine häufige Anforderung ist, habe aber noch kein gutes Codebeispiel gesehen. Eine andere wichtige Anforderung als eine akzeptable Anzeige auf allen Bildschirmgrößen ist die Zusammenlegbarkeit des Menüs auf kleineren Bildschirmen.
Ich habe versucht, nur ein IMG-Tag in das A-Tag einzufügen, das die Navbar-Markenklasse hat, aber das hat dazu geführt, dass das Menü auf meinem Android-Handy nicht richtig funktioniert. Ich habe auch versucht, die Höhe der Navbar-Klasse zu erhöhen, aber das hat die Dinge noch mehr durcheinander gebracht.
Mein Logo ist übrigens größer als die Höhe der Navigationsleiste.
quelle
<img src="logo.png" width="27px" />
: anpassenwidth="27"
Antworten:
Warum versuchen alle, es auf die harte Tour zu machen? Sicher, einige dieser Ansätze werden funktionieren, aber sie sind komplizierter als nötig.
OK, zuerst benötigen Sie ein Bild, das in Ihre Navigationsleiste passt. Sie können Ihr Bild über das Attribut "CSS-Höhe" anpassen (damit die Breite skaliert werden kann) oder einfach ein Bild mit geeigneter Größe verwenden. Was auch immer Sie sich entscheiden - wie es aussieht, hängt davon ab, wie gut Sie Ihr Bild dimensionieren.
Aus irgendeinem Grund möchte jeder das Bild in einen Anker stecken
navbar-brand
, und dies ist nicht erforderlich. Wendet Textstile an, die fürnavbar-brand
ein Bild und dienavbar-left
Klasse nicht erforderlich sind (genau wie nach links ziehen, jedoch zur Verwendung in einer Navigationsleiste). Alles was Sie wirklich brauchen, ist hinzuzufügennavbar-left
.Sie können dem sogar ein Navbar-Markenelement folgen, das rechts neben dem Bild angezeigt wird.
quelle
navbar-brand
. Dies ist die Quelle der Verwirrung.quelle
VOLLSTÄNDIGE DEMO MIT VIELEN BEISPIELEN
WICHTIGES UPDATE: 21.12.15
Derzeit ist in Mozilla ein Fehler aufgetreten, der die Navigationsleiste bei bestimmten Browserbreiten mit VIELEN DEMOS AUF DIESER SEITE beschädigt . Grundsätzlich umfasst der Mozilla-Fehler das Auffüllen der linken und rechten Seite des Navbar-Markenlinks als Teil der Bildbreite. Dies kann jedoch leicht behoben werden, und ich habe dies getestet und bin mir ziemlich sicher, dass es das stabilste Arbeitsbeispiel auf dieser Seite ist. Die Größe wird automatisch geändert und funktioniert in allen Browsern.
Fügen Sie dies einfach Ihrem CSS hinzu und verwenden Sie die Marke navbar auf die gleiche Weise wie Sie
.img-responsive
. Ihr Logo passt automatischEine andere Möglichkeit ist die Verwendung eines Hintergrundbildes. Verwenden Sie ein Bild beliebiger Größe und stellen Sie dann einfach die gewünschte Breite ein:
ORIGINAL ANTWORT UNTEN (nur als Referenz)
Die Leute scheinen die Objektanpassung oft zu vergessen. Persönlich denke ich, dass es am einfachsten ist, damit zu arbeiten, da sich das Bild automatisch an die Menügröße anpasst. Wenn Sie nur die Objektanpassung für das Bild verwenden, wird die Größe automatisch auf die Menühöhe angepasst.
Es wurde darauf hingewiesen, dass dies im IE "noch" nicht funktioniert. Es gibt eine Polyfüllung , die jedoch möglicherweise übermäßig ist, wenn Sie sie nicht für andere Zwecke verwenden möchten. Es sieht so aus, als ob für eine zukünftige Version von IE eine Objektanpassung geplant ist. Sobald dies geschieht, funktioniert dies in allen Browsern.
Wenn Sie jedoch die .img-responsive Klasse im Bootstrap bemerken, geht die maximale Breite davon aus, dass Sie diese Bilder in Spalten oder in etwas einfügen, das explizit mit set versehen ist. Dies würde bedeuten, dass 100% spezifisch 100% Breite des übergeordneten Elements bedeutet.
Der Grund, warum wir das mit der Navigationsleiste nicht verwenden können, ist, dass das übergeordnete Element (Marke .navbar) eine feste Höhe von 50 Pixel hat, die Breite jedoch nicht festgelegt ist.
Wenn wir diese Logik verwenden und sie umkehren , um basierend auf der Höhe zu reagieren, können wir ein ansprechendes Bild erhalten, das auf die Höhe der .navbar-Marke skaliert und durch Hinzufügen und automatisches Einstellen der Breite an die Proportionen angepasst wird.
Normalerweise müssten wir
display:block;
das Szenario ergänzen , aber da die Marke navbar bereits float hat: left; Wenn es darauf angewendet wird, fungiert es automatisch als Blockelement.Es kann vorkommen, dass Ihr Logo zu klein ist. Der img-responsive Ansatz berücksichtigt dies nicht, aber wir werden es tun. Wenn Sie dem Attribut "height" hinzufügen
.navbar-brand > img
, können Sie sicher sein, dass es sowohl vergrößert als auch verkleinert wird.Um dies zu vervollständigen, habe ich beide zusammengestellt und es scheint in allen Browsern perfekt zu funktionieren.
DEMO http://codepen.io/bootstrapped/pen/KwYGwq
quelle
Obwohl Ihre Frage interessant ist, erwarte ich nicht, dass es eine Antwort darauf geben wird. Vielleicht ist Ihre Frage zu weit gefasst. Ihre Lösung sollte abhängen von: anderem Inhalt in der Navigationsleiste (Anzahl der Elemente), Größe Ihres Logos, Reaktion Ihres Logos usw. Das Hinzufügen des Logos in a (mit der Navigationsleiste) scheint ein guter Ausgangspunkt zu sein. Ich sollte die Navbar-Markenklasse verwenden, da dadurch eine Auffüllung (oben / unten) von 15 Pixel hinzugefügt wird.
Ich teste diese Einstellung auf http://getbootstrap.com/examples/navbar/ mit einem Logo von 300 x 150 Pixel.
Vollbild> 1200:
zwischen 768 und 992 Pixel (Menü nicht reduziert):
<768 (Menü reduziert)
Neben den ästhetischen Aspekten habe ich kein technisches Problem gefunden. Auf kleinen Bildschirmen überlappt sich ein großes Logo oder bricht möglicherweise das Ansichtsfenster aus. Bildschirme zwischen 768 und 992 Pixel haben auch andere Probleme, wenn der Inhalt nicht in eine Zeile passt. Siehe beispielsweise: https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/18
Die Standard-Navigationsleiste hatDas Standard-Navigationsleisten-Beispiel fügt einen unteren Rand von 30 Pixel hinzu, sodass der Inhalt Ihrer Navigationsleiste niemals den Inhalt Ihrer Seite überlappen sollte. (Feste Navigationsleisten haben Probleme, wenn die Höhe der Navigationsleiste variiert.)Sie benötigen einige CSS- und Medienabfragen, um die Navigationsleiste auf verschiedenen Bildschirmgrößen an Ihre Bedürfnisse anzupassen. Bitte versuchen Sie Ihre Frage einzugrenzen. Beschreibe das Problem, das du auf Android gefunden hast.
Update siehe http://bootply.com/77512 für ein Beispiel.
Vertauschen Sie die Schaltfläche und das Logo in Ihrem Code, zuerst das Logo (setzen Sie float: links auf dem Logo)
Stellen Sie das
margin-top
für ein.navbar-collapse ul
. Verwenden Sie die Logo-Höhe minus Navbar-Höhe, um sie nach unten auszurichten, oder (Logo-Höhe - Navbar-Höhe) / 2, um sie zu zentrierenquelle
Anleitung zum Erstellen einer Bootstrap-Navigationsleiste mit einem Logo, das größer als die Standardhöhe (50 Pixel) ist:
Beispiel mit einem Logo 100px x 100px, Standard-CSS:
Berechnen Sie die Höhe und (Polsterung oben + Polsterung unten) des Logos. Hier 120px (100px Höhe + Polsterung oben (10px) + Polsterung unten (10px))
Gehe zu Bootstrap / Anpassen . Stellen Sie anstelle der Navbar-Höhe 50px> 120px (50 + 70) und der Navbar-Collapse-Max-Höhe von 340px auf 410px (340 + 70) ein. CSS herunterladen .
In diesem Beispiel verwende ich diese Navigationsleiste . In der Navbar-Marke :
füge eine Klasse hinzu, zum Beispiel myLogo , und ein img (dein Logo)
<a class="navbar-brand myLogo" href="#"><img src="yourLogo.jpg" /></a>
.In CSS
.myLogo {Polsterung: 10px; }}
Geeignet für andere Größen.
Beispiel
quelle
Nun, ich habe endlich das gleiche Problem gelöst. Hier ist meine Lösung und ich habe sie auf meiner Website in allen drei Hauptbrowsern getestet: Chrome, Firefox und Internet Explorer.
Wenn Sie kein textbasiertes Logo verwenden, entfernen Sie zunächst "navbar-brand" vollständig, da ich festgestellt habe, dass diese bestimmte Klasse die Hauptursache für die Verdoppelung meines reduzierten Navigationsmenüs ist.
Wenden Sie sich an user3137032, um mich in die richtige Richtung zu führen.
Sie müssen einen benutzerdefinierten reaktionsschnellen Bildcontainer erstellen. Ich habe mein "Logo" genannt.
Hier ist das Bootstrap-HTML-Markup:
Und der CSS-Code:
Der Wert in @media (max-width: x) kann abhängig von der Breite Ihrer Logo-Bilder variieren. Mein Wert beträgt 368px. Abhängig von der Größe Ihres Logos müssen möglicherweise auch die Prozentsätze geändert werden. Die erste @ media-Abfrage sollte Ihr Schwellenwert sein, und meine war die Bildbreite (368 Pixel) + die Größe der reduzierten Schaltflächen (44 Pixel) + etwa 60 Pixel. Sie ergab 480 Pixel. Hier starte ich die reaktionsfähige Bildskalierung.
Bitte entfernen Sie unbedingt meine Rasierersyntax aus den HTML-Abschnitten. Lassen Sie mich wissen, wenn es Ihr Problem behebt, es hat mein Problem behoben.
Bearbeiten: Entschuldigung, ich habe Ihr Problem mit der Höhe der Navigationsleiste verpasst. Es gibt ein paar Möglichkeiten, dies zu tun. Ich persönlich kompiliere den Bootstrap WENIGER mit der entsprechenden Navigationsleistenhöhe. Für meine Zwecke verwende ich 70 Pixel und meine Bildhöhe beträgt 68 Pixel. Die zweite Möglichkeit besteht darin, in der Datei bootstrap.css selbst nach ".navbar" zu suchen und die Mindesthöhe zu ändern: auf die Höhe Ihres Logos.
quelle
navbar-brand
hat es für mich getan.Meine Lösung ist das Hinzufügen von CSS "display: inline-block" zum img-Tag.
DEMO: jsfiddle
quelle
Ich verwende die img-responsive Klasse und setze dann eine maximale Breite für das
a
Element. So was:und das CSS:
quelle
<a>
Tag statt des<img>
Tages, daimg-responsive
Sätzemax-width="100%"
. Können Sie erklären, wie hilfreich dies ist?.image-responsive
ist für die Größenänderung von Bildern basierend auf einer expliziten Containerbreite des Bildes und nicht für die Höhe gedacht, die die Größe basierend auf der Breite ändert. Also trotz wie viele upvotes dies hat es nicht bekommen wird die Arbeit hier zu sehen . Wir können jedoch dieselbe Methode wie bei der Bildbearbeitung verwenden und sie auf die Höhe anwenden. Entfernen Sie also .img-responsive aus der Gleichung und setzen Sie einfach max-height auf navbar-brand . Siehe meine Antwort hier .Sie müssen Code wie folgt verwenden:
Class of A-Tags müssen "Logo" und keine Navbar-Marke sein.
quelle
Dies hängt davon ab, wie groß Ihr Logo sein soll.
Die Standardhöhe
<a>
in der Navigationsleiste beträgt 20 Pixel. Wenn Sie alsoheight: 20px
auf Ihrem Logo angeben , wird es gut ausgerichtet.Für ein Logo ist das allerdings etwas klein. Ich habe mich also für Folgendes entschieden:
Dadurch wird das Bild 30 Pixel groß und das Bild wird vertikal ausgerichtet, indem oben ein negativer Rand hinzugefügt wird (5 Pixel sind die Hälfte des Unterschieds zwischen dem Auffüllen von a und der Größe des Bildes).
Alternativ können Sie die Polsterung des
<a>
Elements ändern , z.quelle
Schnellkorrektur : Erstellen Sie eine Klasse für Ihre
logo
und setzen Sie dieheight
auf28px
. Dies funktioniert gut mit der Navigationsleiste auf allen Geräten. Beachten Sie, dass ich sagte, funktioniert "GUT".quelle
Mein Ansatz ist es, VIER verschiedene Bilder unterschiedlicher Größe für Telefone, Tablets, Desktops und große Desktops einzuschließen, aber nur EINEN mit den reaktionsfähigen Dienstprogrammklassen von bootstrap wie folgt anzuzeigen:
Hinweis: Sie können die kommentierte Zeile durch den angegebenen Code ersetzen. Ersetzen Sie den PHP-Code, wenn Sie kein WordPress verwenden.
Anmerkung 2 bearbeiten: Ja, dies fügt Ihrem Server beim Laden der Seite Anforderungen hinzu, die sich möglicherweise etwas verlangsamen. Wenn Sie jedoch eine CSS-Sprite-Hintergrundtechnik verwenden, wird das Logo beim Drucken einer Seite möglicherweise nicht gedruckt, und der obige Code sollte erhalten werden bessere SEO.
quelle
visible-SIZE
aus dema
Tag und setzen Sie es auf das img-Tag.<a class="navbar-brand"><img class="visible-xs"/><img class="visible-sm"/></a>
Sie sollten kein zusätzliches CSS hinzufügen müssen, da Bootstrap3 es bereitstellt. Es sei denn, Sie möchten es hinzufügen. Dies ist mein Code zum Platzieren des Logos links und Links nach rechts. Diese Navigation reagiert. Nehmen Sie nach Belieben Änderungen vor.
HTML:
quelle
Ich implementiere es auch über die CSS-Hintergrundeigenschaft. Es funktioniert gesund in jedem Breitenwert.
quelle
Ein anderer Ansatz besteht darin, die integrierte Bootstrap-
.text-hide
Klasse neben zu implementieren.navbar-brand
, um den Markentext / -inhalt durch ein Hintergrundbild zu ersetzen.CSS:
HTML:
Dies ist eine sehr konsistente Methode und hält Ihr Bild zentriert. Um die Größe des Bildes anzupassen, müssen Sie lediglich die
.navbar-brand
Breite anpassen, da die Höhe bereits eingestellt ist.Hier ist eine Live-Demo
quelle
Ich hatte das gleiche Problem. Ich habe es so gelöst:
Es gibt keine Navbar-Markenklasse. Das Ergebnis sieht aus wie ein Logo, das in die Navigationsleiste passt und wie ein Link funktioniert. Außerdem empfehle ich, für die Menüelemente die Klasse navbar-right zu verwenden, damit sie nicht unter das Logo fallen.
quelle
Vielleicht ist das zu einfach, aber ich habe gerade die Navbar-Markenzeile kopiert, sodass es zwei davon gibt, das Bild und dann den Text.
Und ich habe ein Bild erstellt, das in die Navigationsleiste passt (ungefähr die Hälfte der Höhe).
quelle
Wenn Sie WENIGER verwenden, funktioniert dies:
quelle
Dieser Code funktioniert perfekt, wenn Sie die Marke zentriert und mit automatischer Breite in der Symbolleiste sehen möchten. Es enthält die Wordpress-Funktion, um die Bilddatei vom richtigen Pfad abzurufen:
quelle
Fügen Sie der
.navbar-brand
Klasse Folgendes hinzuquelle
Mein Arbeitscode - Bootstrap 3.0.3. Wenn Sie die Navigationsleiste umschalten, wird das ursprüngliche Logo des versteckten xs angezeigt.
quelle
Sie können versuchen, die @ media-Abfrage wie unten zu verwenden.
Fügen Sie zuerst eine Logo-Klasse hinzu und geben Sie dann mit @media die Höhe und Breite Ihres Logos pro Gerätegröße an. Im folgenden Beispiel ziele ich auf Geräte mit einer maximalen Breite von 320 Pixel (iPhone). Sie können damit herumspielen, bis Sie die beste Passform gefunden haben. Einfache Möglichkeit zum Testen: Verwenden Sie Chrom oder Firefox mit Inspect-Element. Verkleinern Sie Ihren Browser so weit wie möglich. Beachten Sie die Änderung der Logo-Größe basierend auf der von Ihnen angegebenen @ media-Maximalbreite. Testen Sie auf iPhone, Android-Geräten, iPad usw., um die gewünschten Ergebnisse zu erzielen.
quelle
Bitte versuchen Sie folgenden Code:
quelle
In meinem Fall funktioniert keine der anderen Antworten (ich habe den Intelligenztest wahrscheinlich nicht bestanden), und nach einigen Experimenten verwende ich Folgendes (was meiner Meinung nach sehr nahe an der Bootstrap-Standardeinstellung liegt):
Und in der CSS-Datei habe ich Folgendes hinzugefügt:
Beachten Sie, dass dies
@Html.ActionLink()
die Razor-Syntax für ein<a>
Tag ist. Wo es heißt,@Html.ActionLink(...)
ersetzen Sie es einfach durch ein entsprechendes<a>
Tag. Ebenso dort, wo es heißt,@Url.Action(...)
ersetzen Sie es durch eine entsprechende URL (<a>
in diesem Fall kein Tag).quelle
Dies ist keine Semantik, aber ich benutze nur das Vorhandene
a
Element, setze ein Hintergrundbild und erstelle dann mehrere Variationen für eine Auflösung von 2x, kleinere Bildschirmgrößen usw.Dann können Sie die verwenden
.text-hide
Klasse verwenden, um Text auf die alte Art und Weise auf die Seite zu bringen. Einfach und effektiv, wenn auch nicht richtig verwendet.Hier ist ein Link zur Hilfsklasse zum Ersetzen von Text:
http://getbootstrap.com/css/#helper-classes
quelle
Die einfachste und beste Antwort auf diese Frage besteht darin, abhängig von Ihrem Logo eine maximale Breite und Höhe festzulegen. Das Bild ist maximal 50 Pixel hoch, jedoch nicht länger als 200 Pixel.
Dies hängt von Ihrer Logo-Größe und den Elementen der Navigationsleiste ab.
quelle
Bitte verstehen Sie den Code auf eigene Faust: D Dies ist mein Code-Entwurf und er funktioniert bereits :) Hier ist der Screenshot.
quelle
Anstatt das Textbranding zu ersetzen, habe ich mich wie im folgenden Code in zwei Zeilen unterteilt und
img-responsive
dem Bild eine Klasse gegeben ......und zusätzlich habe ich die folgenden CSS-Codes hinzugefügt .......
Wenn mein Code Ihr Problem löst, ist es mir ein Vergnügen ...
quelle
// Vergiss nicht, Bootstrap im Kopf deines Codes hinzuzufügen.
quelle