Bootstrap 3 Navbar con logo


376

Voglio usare la barra di navigazione predefinita di Bootstrap 3 con un logo immagine invece del testo. Qual è il modo corretto di farlo senza causare problemi con schermi di dimensioni diverse? Presumo che questo sia un requisito comune, ma non ho ancora visto un buon esempio di codice. Un requisito chiave oltre ad avere una visualizzazione accettabile su tutte le dimensioni dello schermo è la pieghevolezza del menu su schermi più piccoli.

Ho provato a inserire un tag IMG all'interno del tag A che ha la classe del marchio navbar, ma che ha fatto sì che il menu non funzionasse correttamente sul mio telefono Android. Ho anche provato ad aumentare l'altezza della classe navbar, ma questo ha rovinato ancora di più le cose.

A proposito, l'immagine del mio logo è più grande dell'altezza della barra di navigazione.


2
<img src="logo.png" width="27px" />: regolare
Uday Hiwarale

29
Con tutte le risposte inviate a questa domanda, perché una di queste non è stata contrassegnata come soluzione?
Chris22,

1
Penso che due motivi: 1. Se qualcuno ridisegna il sito, la dimensione viene fissata nell'HTML piuttosto che nel CSS, quindi crea un incubo di manutenzione. 2. Non dovrebbe essere comunque height = "27px"? È l'altezza, non la larghezza, questo è il vincolo.
Canuck,

Sia l'attributo larghezza che altezza assumono che il loro valore sia in pixel, quindi non dovresti aggiungere 'px' al valore. width="27"
jmmeijer,

Tutto considerato, questa è la risposta migliore e dovrebbe essere accettata stackoverflow.com/a/26333342/171456 . Soddisfa le esigenze della più ampia comunità SO che ha visitato questa domanda dal 2013.
Zim,

Risposte:


420

Perché tutti cercano di farlo nel modo più duro? Certo, alcuni di questi approcci funzioneranno, ma sono più complicati del necessario.

OK, prima di tutto: hai bisogno di un'immagine che si adatti alla tua barra di navigazione. È possibile regolare l'immagine tramite l'attributo altezza css (che consente di ridimensionare la larghezza) oppure è sufficiente utilizzare un'immagine di dimensioni appropriate. Qualunque cosa tu decida di fare, il modo in cui questo aspetto dipenderà da quanto bene ridimensionerai la tua immagine.

Per qualche ragione, tutti vogliono attaccare l'immagine all'interno di un'ancora navbar-brand, e questo non è necessario. navbar-brandapplica gli stili di testo non necessari a un'immagine, così come ilnavbar-left classe (proprio come pull-left, ma per l'uso in una barra di navigazione). Tutto ciò di cui hai veramente bisogno è aggiungere navbar-left.

<a href="#" class="navbar-left"><img src="/path/to/image.png"></a>

Puoi persino seguirlo con un oggetto di marca navbar, che apparirà a destra dell'immagine.


43
Immagino che il motivo per cui la gente metta l'immagine all'interno di un tag di ancoraggio è perché è così che fa il doc Boostrap
cafonso

9
cosa succede se si desidera utilizzare un'immagine più grande?
StevenP

5
@cafonso - Non sto dicendo che non appartiene a un'ancora - solo che l'ancora non ha bisogno della classe "marchio navbar". Quando questa classe è presente, fa davvero casino con il modo in cui le immagini vengono visualizzate.
Michael,

4
@cafonso ha fatto un grande punto. Credo che TWBS intendesse utilizzarlo per un'immagine o un testo. E considerando quante persone hanno avuto problemi con questo dovrebbe essere un'indicazione che è tempo di risolvere questo problema o chiarirlo nei loro documenti.
Bryan Willis,

3
@Michael, gli esempi ufficiali di documentazione Bootstrap mostrano l'ancora con la classe navbar-brand. Questa è la fonte di confusione.
Justin Skiles,

148
<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" 
            data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" rel="home" href="#" title="Buy Sell Rent Everyting">
        <img style="max-width:100px; margin-top: -7px;"
             src="/img/transparent-white-logo.png">
    </a>
</div>

5
a cosa serve il margine negativo?
Ayrad,

3
Il margine negativo mi ha aiutato a centrarlo verticalmente per me.
Words Like Jared,

3
A seguito del commento di Edward ... o almeno una demo funzionante
Matías Cánepa,

Non dovresti avere problemi con i margini negativi (a meno che l'immagine non sia stata ritagliata in modo divertente). In questo modo non è una soluzione valida, perché dipende completamente dalla dimensione del logo e dovrà essere regolata caso per caso. Ecco una demo funzionante di questo metodo .
Bryan Willis,

1
Un'opzione migliore che funzionerà in modo coerente, indipendentemente dalla dimensione / razione del logo, è fare ciò che .img-responsive fa tranne invertirlo. Poiché il marchio .navbar ha float: applicato a sinistra diventa un elemento a blocchi e poiché ha un'altezza di 50px possiamo impostare l'altezza massima dell'immagine al 100%; e NON traboverà MAI o causerà la crescita dell'intera barra di navigazione. Diventa vincolato per adattarsi all'altezza del marchio .navbar. Se sembra troppo piccolo nella barra di navigazione predefinita 50px, basta regolare il .navbar-brand> img imbottitura superiore e inferiore. Ecco la risposta completa con la demo funzionante
Bryan Willis,

73

Bootstrap 3 ridimensionamento del logo della barra di navigazione

DEMO COMPLETA DI MOLTI ESEMPI

AGGIORNAMENTO IMPORTANTE: 21/12/15

Attualmente c'è un bug in Mozilla che ho scoperto che rompe la barra di navigazione su determinate larghezze del browser con MOLTE DEMO IN QUESTA PAGINA . Fondamentalmente il bug di mozilla include l'imbottitura sinistra e destra sul collegamento del marchio della barra di navigazione come parte della larghezza dell'immagine. Tuttavia, questo può essere risolto facilmente e l'ho provato e sono abbastanza sicuro che sia l'esempio di lavoro più stabile in questa pagina. Si ridimensionerà automaticamente e funziona su tutti i browser.

Basta aggiungere questo al tuo CSS e utilizzare navbar-brand nello stesso modo in cui lo faresti .img-responsive. Il tuo logo si adatterà automaticamente

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

Un'altra opzione è quella di utilizzare un'immagine di sfondo. Usa un'immagine di qualsiasi dimensione e poi imposta la larghezza desiderata:

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


RISPOSTA ORIGINALE SOTTO (solo come riferimento)

Le persone sembrano dimenticare molto l'adattamento agli oggetti. Personalmente penso che sia il più semplice con cui lavorare perché l'immagine si adatta automaticamente alle dimensioni del menu. Se usi solo l'oggetto adattato sull'immagine, verrà ridimensionato automaticamente all'altezza del menu.

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

È stato sottolineato che questo non funziona in IE "ancora". C'è un polifill , ma potrebbe essere eccessivo se non prevedi di usarlo per qualcos'altro. Sembra che si stia pianificando un adattamento degli oggetti per una versione futura di IE, quindi una volta che ciò accadrà funzionerà in tutti i browser.

Tuttavia, se noti la classe .img-responsive in bootstrap, la larghezza massima presuppone che tu stia mettendo queste immagini in colonne o qualcosa che ha un esplicito con set. Ciò significherebbe che il 100% indica in modo specifico la larghezza del 100% dell'elemento principale.

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

Il motivo per cui non possiamo usarlo con la barra di navigazione è perché il genitore (.navbar-brand) ha un'altezza fissa di 50px, ma la larghezza non è impostata.

Se prendiamo quella logica e la invertiamo in modo da rispondere in base all'altezza, possiamo avere un'immagine reattiva che si ridimensiona all'altezza del marchio .navbar e aggiungendo e impostando automaticamente la larghezza, si adatterà alla proporzione.

max-height: 100%;
width: auto;

Di solito dovremmo aggiungere display:block;allo scenario, ma poiché il marchio navbar ha già float: left; applicato ad esso, agisce automaticamente come un elemento di blocco.


Potresti imbatterti nella rara situazione in cui il tuo logo è troppo piccolo. L'approccio img-responsive non ne tiene conto, ma lo faremo. Aggiungendo anche l'attributo "height" al .navbar-brand > imgsi può essere certi che si ridimensionerà e diminuirà.

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

Quindi, per completare questo, li metto entrambi insieme e sembra funzionare perfettamente in tutti i browser.

<style type="text/css">
.navbar-brand>img {
   max-height: 100%;
   height: 100%;
   width: auto;
   margin: 0 auto;


   /* probably not needed anymore, but doesn't hurt */
   -o-object-fit: contain;
   object-fit: contain; 

}
</style>

<nav class="navbar navbar-default">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="http://disputebills.com"><img src="http://disputebills.com/site/uploads/2015/10/dispute.png" alt="Dispute Bills"></a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
          </ul>
        </div>
      </div>
</nav>

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


Grazie Jose. Non funziona in IE che non avevo mai conosciuto fino ad ora. Ho modificato la risposta dal tuo commento. Inoltre, non sono sicuro se sia l'altezza sia l'altezza massima siano entrambe necessarie.
Bryan Willis,

Sicuro! Object-fit è stata una delle straordinarie aggiunte dal motore webkit / blink. Spero che altri browser li integrino presto! Nel frattempo useremo le immagini di sfondo per fare il duro lavoro!
Jose A

1
Ehi Jose, in realtà ho appena capito qualcosa. Controlla la nuova demo. In realtà sembra che la mia risposta originale funzionasse in tutti gli altri browser, non per adattamento degli oggetti ma per altezza e altezza massima. Penso che sia tutto ciò che è veramente necessario ... Riesci a trovare una situazione in cui quanto sopra non funzionerà ora?
Bryan Willis,

Non penso nemmeno che sia necessario adattarsi agli oggetti poiché l'altezza e l'altezza massime si ridimensionano all'altezza del contenitore proprio come farebbe .img-responsive.
Bryan Willis,

Jose, pensi che l'oggetto in forma stia anche facendo qualcosa? Sto pensando che probabilmente possiamo lasciarlo cadere in questo caso, ma non sono sicuro?
Bryan Willis,

23

Sebbene la tua domanda sia interessante, non mi aspetto che ci sarà una risposta. Forse la tua domanda è troppo ampia. La tua soluzione dovrebbe dipendere da: altri contenuti nella barra di navigazione (numero di elementi), dimensioni del tuo logo, se il tuo logo agisce in modo reattivo, ecc. L'aggiunta del logo in a (con marchio navbar) sembra un buon punto di partenza. Dovrei usare la classe del marchio navbar perché questo aggiungerà un'imbottitura (superiore / inferiore) di 15 pixel.

Ho testato questa impostazione su http://getbootstrap.com/examples/navbar/ con un logo di 300x150 pixel.

Schermo intero> 1200:

inserisci qui la descrizione dell'immagine

tra 768 e 992 pixel (menu non compresso):

inserisci qui la descrizione dell'immagine

<768 (menu compresso)

inserisci qui la descrizione dell'immagine

Oltre agli aspetti estetici non ho riscontrato alcun problema tecnico. Su schermi piccoli un grande logo si sovrapporrà o spezzerà forse il viewport. Le schermate tra 768 e 992 pixel hanno anche altri problemi quando il contenuto non rientra in una riga, vedi ad esempio: https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/18

La barra di navigazione predefinita ha L'esempio di barra di navigazione predefinito aggiunge un margine inferiore di 30 px, quindi il contenuto della barra di navigazione non deve mai sovrapporsi al contenuto della pagina. (le barre di navigazione fisse avranno problemi quando l'altezza della barra di navigazione varia).

Avrai bisogno di alcune query CSS e multimediali per adattare la barra di navigazione alle tue necessità su schermi di dimensioni diverse. Per favore, prova a restringere la tua domanda. descrivi il problema che hai riscontrato su Android.

aggiornamento vedere http://bootply.com/77512 per un esempio.

Su schermi più piccoli come un telefono, il menu compresso appare sopra il logo

scambia il pulsante e il logo nel tuo codice, prima il logo (imposta il float: a sinistra sul logo)

Non c'è modo di allineare le voci di menu a tutto tranne che in alto

impostare il margin-topper .navbar-collapse ul. Usa l'altezza del logo meno l'altezza della barra di navigazione, per allineare in basso o (altezza del logo - altezza della barra di navigazione) / 2 al centro


1
Ho provato questa opzione. I due problemi con esso sono: 1) Su schermi più piccoli come un telefono, il menu compresso appare sopra il logo (anche se aggiungo classe img-responsive al tag img logo) e 2) Non c'è modo di allineare il menu oggetti a tutto tranne che in alto. Qualsiasi altra regolazione impedirebbe il corretto funzionamento del menu compresso.
stepanian

23

Istruzioni su come creare una barra di avvio bootstrap con un logo più grande dell'altezza predefinita (50px):

Esempio con un logo 100px x 100px, CSS standard:

  1. Calcola l'altezza e (parte superiore dell'imbottitura + parte inferiore dell'imbottitura) del logo. Qui 120px (altezza 100px + parte superiore imbottitura (10px) + parte inferiore imbottitura (10px))

  2. Vai a bootstrap / personalizza . Imposta invece l' altezza della barra di navigazione 50px> 120px (50 + 70) e l' altezza di navigazione -bar -max-altezza da 340px a 410px (340 + 70). Scarica css.

  3. In questo esempio uso questa barra di navigazione . Nel marchio navbar :

      <div class="navbar-header">
        ...
        </button>
        <a class="navbar-brand myLogo" href="#">
          <img src="yourLogo.jpg" />
        </a>
      </div>...

    aggiungi una classe, ad esempio myLogo , e un img (il tuo logo)

    <a class="navbar-brand myLogo" href="#"><img src="yourLogo.jpg" /></a>.

  4. Aggiungi CSS

    .myLogo {imbottitura: 10px; }

  5. Adeguato ad altre dimensioni.

Esempio


1
La soluzione più sensata qui. pollice in alto
user3718908

1
Questa dovrebbe essere la risposta accettata. Risolve il problema del ridimensionamento della barra di navigazione per adattarla all'immagine.
Greg Gum,

14

Bene, finalmente ho riscontrato lo stesso problema, ecco la mia soluzione e l'ho testato sul mio sito in tutti e tre i principali browser: Chrome, Firefox e Internet Explorer.

Prima di tutto se non stai usando un logo basato su testo, rimuovi completamente il "marchio navbar" poiché ho trovato che questa particolare classe è la causa principale del doppio menu di navigazione compresso.

Grida all'utente3137032 per avermi guidato nella giusta direzione.

Devi creare un contenitore di immagini reattivo personalizzato, ho chiamato il mio "logo"

Ecco il markup HTML bootstrap:

<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="@Url.Action(" Index ", "Home ")" class="logo"><img src="~/resources/images/Logo_Concept.png" /></a>
    </div>
    <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <li>
          <a href="@Url.Action(" About ", "Home ")">
            <i class="glyphicon glyphicon-info-sign"></i> About
          </a>
        </li>
        <li>
          <a href="@Url.Action(" Contact ", "Home ")">
            <i class="glyphicon glyphicon-phone"></i> Contact
          </a>
        </li>
        <li>
          <a href="@Url.Action(" Index ", "Products ")">
            <i class="glyphicon glyphicon-tag"></i> Products
          </a>
        </li>
      </ul>
    </div>
  </div>
</div>

E il codice CSS:

.logo img {
width: 100% \9; /*Force IE10 and below to size SVG images correctly*/
max-width: 100%;
}

@media (max-width:480px) { 
.logo img {
    width: 70% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 70% !important;
}
}

@media (max-width:400px) { 
.logo img {
    width: 75% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 75%;
}
}

@media (max-width:385px) { 
.logo img {
    width: 70% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 70%;
}
}

@media (max-width:345px) { 
.logo img {
    width: 65% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 65%;
}
}

@media (max-width:335px) { 
.logo img {
    width: 60% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 60%;
}
}

@media (max-width:325px) { 
.logo img {
    width: 55% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 55%;
}
}

@media (max-width:315px) { 
.logo img {
    width: 50% \9; /*Force IE10 and below to size SVG images correctly*/
    max-width: 50%;
}
}

Il valore in @media (larghezza massima: x) può variare a seconda della larghezza delle immagini del tuo logo, la mia è 368px. Potrebbe essere necessario modificare anche le percentuali a seconda delle dimensioni del logo. La prima query @media dovrebbe essere la tua soglia e la mia era la larghezza dell'immagine (368px) + la dimensione del pulsante compresso (44px) + circa 60px ed è uscita a 480px che è dove inizio il ridimensionamento dell'immagine reattivo.

Assicurati di rimuovere la mia sintassi del rasoio dalle porzioni HTML. Fammi sapere se risolve il tuo problema, ha risolto il mio.

Modifica: mi dispiace, ho perso il problema relativo all'altezza della barra di navigazione. Ci sono un paio di modi per farlo, personalmente compilo il Bootstrap MENO con l'altezza della barra di navigazione appropriata, per i miei scopi uso 70px e la mia altezza dell'immagine è 68 px. Il secondo modo per farlo è nel file bootstrap.css stesso, cercare ".navbar" e modificare l'altezza min: all'altezza del logo.


Questa è la vera risposta
StevenP

1
La rimozione della classe navbar-brandlo ha fatto per me.
Kai Hartmann,

14

La mia soluzione è aggiungere css "display: inline-block" al tag img.

<img style="display: inline-block; height: 30px; margin-top: -5px">

DEMO: jsfiddle


13

Uso la classe img-responsive e quindi imposto una larghezza massima asull'elemento. Come questo:

<nav class="navbar">
    <div class="navbar-header">
        <a class="navbar-brand" href="#">
            <img class="img-responsive" src="mylogo.png">
        </a>
    </div>
</nav>

e il CSS:

.navbar-brand {
    max-width: 50%;
}

2
Credo che questo significhi che stai impostando la larghezza dell'immagine nel <a>tag anziché nel <img>tag, poiché img-responsiveimposta max-width="100%". Puoi spiegare come è utile?
Michael Scheper,

Michael solleva un buon punto. .image-responsiveè pensato per il ridimensionamento dell'immagine basato su un contenitore esplicito WIDTH dell'immagine e non sull'ALTEZZA che si ridimensiona in base alla larghezza. Quindi, nonostante quanti voti questo abbia ottenuto, NON funzionerà, vedi qui . Tuttavia, possiamo usare lo stesso metodo utilizzato per le immagini sensibili e applicarlo all'altezza. Quindi rimuovi .img-responsive dall'equazione e imposta semplicemente l'altezza massima sul marchio navbar . Vedi la mia risposta qui .
Bryan Willis,

5

È necessario utilizzare il codice come questo:

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" 
            data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="logo" rel="home" href="#" title="Buy Sell Rent Everyting">
        <img style=""
             src="/img/transparent-white-logo.png">
    </a>
</div>

La classe di tag A deve essere "logo" non di marca navbar.


4

Dipende da quanto vuoi che sia alto il tuo logo.

L' <a>altezza predefinita nella barra di navigazione è 20px, quindi se specifichi height: 20pxsul tuo logo, si allineerà bene.

Comunque è un po 'piccolo per un logo, quindi quello che ho optato per questo è stato questo:

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" 
            data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" rel="home" href="#" title="Brand">
        <img style="height: 30px; margin-top: -5px;"
             src="/img/brand.png">
    </a>
</div>

Questo rende l'immagine alta 30px e allinea l'immagine verticalmente aggiungendo un margine negativo nella parte superiore (5px è la metà della differenza tra l'imbottitura su una e la dimensione dell'immagine).

In alternativa, è possibile modificare l'imbottitura <a>sull'elemento, ad esempio:

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" 
            data-target=".navbar-ex1-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" rel="home" href="#" title="Brand" style="padding-top: 10px; padding-bottom: 10px">
        <img style="height: 30px;"
             src="/img/transparent-white-logo.png">
    </a>
</div>

4

Quick Fix : Creare una classe per il vostro logoe impostare il heighta 28px. Funziona bene con la barra di navigazione su tutti i dispositivi. Notate che ho detto che funziona "BENE".

.logo {
  display:block;
  height:28px;
}

3

Il mio approccio è quello di includere QUATTRO immagini diverse di dimensioni diverse per telefoni, tablet, desktop, desktop di grandi dimensioni ma mostrandone UNO utilizzando le classi di utilità responsive di bootstrap, come segue:

<!--<a class="navbar-brand" href="<?php echo home_url(); ?>/"><?php bloginfo('name'); ?></a>-->

        <a class="navbar-brand visible-xs" href="<?php echo home_url(); ?>/"><img src="/assets/logo-phone.png" alt="<?php bloginfo('name'); ?> Logo" /></a>
        <a class="navbar-brand visible-sm" href="<?php echo home_url(); ?>/"><img src="/assets/logo-tablet.png" alt="<?php bloginfo('name'); ?> Logo" /></a>
        <a class="navbar-brand visible-md" href="<?php echo home_url(); ?>/"><img src="/assets/logo-desktop.png" alt="<?php bloginfo('name'); ?> Logo" /></a>
        <a class="navbar-brand visible-lg" href="<?php echo home_url(); ?>/"><img src="/assets/logo-large.png" alt="<?php bloginfo('name'); ?> Logo" /></a>

Nota: è possibile sostituire la riga commentata con il codice fornito. Sostituisci il codice php se non stai usando wordpress.

Modifica nota 2: Sì, questo aggiunge richieste al tuo server durante il caricamento della pagina che potrebbero rallentare un po ', ma se usi una tecnica di css sprite in background, è probabile che il logo non venga stampato quando si stampa una pagina e il codice sopra dovrebbe ottenere SEO migliore.


Puoi usare un singolo <a> e avere solo 4 <img> diversi, uno per ogni dimensione.
Jonathan Vanasco,

@Jonathan Vanasco, sarei interessato a vedere come lo faresti
AdRock,

1
rimuovere il visible-SIZEdal atag e inserirlo nel tag img. <a class="navbar-brand"><img class="visible-xs"/><img class="visible-sm"/></a>
Jonathan Vanasco,

3

Non dovresti aver bisogno di aggiungere altri CSS, poiché Bootstrap3 lo fornisce. A meno che tu non voglia aggiungerlo. Questo è il mio codice per mettere il logo a sinistra e i collegamenti a destra. Questa navigazione è reattiva. Apporta le modifiche a tuo piacimento.

HTML:

<nav class="navbar navbar-expand-lg navbar-light fixed-top" style="background-color:white;">
        <div class="container">
        <a class="navbar-brand" href="#"><img style="   width: 150px;" src="image.jpg" alt="Image text"></a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
        </button>
            <div class="collapse navbar-collapse" id="navbarResponsive">
                <ul class="navbar-nav ml-auto">
                    <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Projects</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Blog</a></li>
                    <li class="nav-item"><a class="nav-link" href="#">Contact</a></li>
                </ul>
            </div>
        </div>
    </nav>

2

Lo implemento anche tramite la proprietà di sfondo CSS. Funziona sano in qualsiasi valore di larghezza.

.navbar-brand{
    float:left;
    height:50px;
    padding:15px 15px;
    font-size:18px;
    line-height:20px;
    background-image: url("../images/logo.png");
    background-repeat: no-repeat;
    background-position: left center
}

2

Un altro approccio è quello di implementare la .text-hideclasse integrata di Bootstrap insieme .navbar-branda sostituire il testo / contenuto del marchio con un'immagine di sfondo.

CSS:

.navbar-brand{ 
  background: url(http://example.com/your-logo-here.png) center / contain no-repeat;
  width: 200px;
}

HTML:

<a class="navbar-brand text-hide" href="#">Navbar Brand</a>

Questo è un metodo molto coerente e mantiene centrata l'immagine. Per regolare la dimensione dell'immagine è sufficiente regolare la .navbar-brandlarghezza poiché l'altezza è già impostata.

Ecco una demo dal vivo


2

Ho avuto lo stesso problema. L'ho risolto in questo modo:

<a href="#" class="btn btn-link navbar-btn">
  <img class="img-responsive" src="#">
</a>

Non esiste una classe con marchio navbar. Il risultato sembra un'immagine del logo che si adatta alla barra di navigazione e funziona come un collegamento. Inoltre consiglio di usare la classe navbar-right per le voci di menu in modo che non scendano sotto il logo.

<div class="collapse navbar-collapse navbar-right">
  <ul class="nav navbar-nav" role="navigation">
    <li><a href="#">Item1</a></li>
    <li><a href="#">Item2</a></li>
  </ul>
</div>

1

Forse è troppo semplice, ma ho appena copiato la linea del marchio della barra di navigazione, quindi ce ne sono due, l'immagine e poi il testo.

<a class="navbar-brand" href="index.php"><img class="img-responsive" src="images/my-icon.png" width="30" height="25" alt=" "></a>
<a class="navbar-brand" href="index.php">My Brand</a>

E ho creato un'immagine che si adatta alla barra di navigazione (circa 1/2 dell'altezza).


1

Se si utilizza MENO, funziona:

@navbar-height: 150px;
@navbar-brand-vpadding: 10px;

.navbar-brand img {
  height: @navbar-height - @navbar-brand-vpadding * 2;
  position: absolute;
  top: @navbar-brand-vpadding;
}

1

Questo codice funziona perfettamente se hai bisogno di vedere il marchio centrato e con la larghezza automatica nella barra degli strumenti. Contiene la funzione Wordpress per ottenere il file immagine dal percorso giusto:

<a class="navbar-brand page-scroll" rel="home" 
    href="#page-top"  title="Title">
    <img style="height: 100%; width: auto;" 
          src="<?php echo get_template_directory_uri();?>/img/logo.png">


1

Aggiungi quanto segue alla .navbar-brandclasse

.navbar-brand
{
  padding: 0px; // this allows the image to occupy all the padding space of the navbar--brand
}

.navbar-brand > img
{
   height: 100%; // set height to occupy full height space on the navbar-brand
   width: auto; // width should be auto to allow img to scale accordingly
   max-height: 100%; // optional
   mrgin: 0 auto; // optional
}

0

il mio codice di lavoro - bootstrap 3.0.3. quando navbar-toggle, immagine logo nascosta-xs originale.

    <a class="navbar-brand hidden-xs" href="<?=$g4['path']?>/">
    <img src="<?=$g4[path]?>/images/logo_opencode.gif" align=absmiddle alt="brand logo">
    </a>

    <a class="navbar-brand navbar-toggle" href="<?=$g4['path']?>/" style="border:0;margin-bottom:0;">
    <img src="<?=$g4[path]?>/images/logo_opencode.gif" alt="brand logo" style="width:120px;">
    </a>

0

Potresti provare a utilizzare la query @media come di seguito.

Aggiungi prima una classe di logo, quindi usa @media per specificare l'altezza e la larghezza del logo per dimensione del dispositivo. Nell'esempio seguente, sto prendendo di mira dispositivi con una larghezza massima di 320 px (iPhone). Puoi giocare con questo fino a trovare la soluzione migliore. Modo semplice per testare: utilizzare Chrome o Firefox con l'elemento inspect. Riduci il browser il più possibile. Osservare la modifica della dimensione del logo in base alla larghezza massima @media specificata. Test su iPhone, dispositivi Android, iPad ecc. Per ottenere i risultati desiderati.

.logo {
  height: 42px;
  width: 140px;
}

@media (max-width:320px) { 
.logo {
  height: 33px;
  width: 110px;
}
}

0

Si prega di provare il seguente codice:

<style>
   .navbar a.navbar-brand {padding: 9px 15px 8px; }
</style>
<a class="navbar-brand" href="#">
   <img src="http://placehold.it/140x34/000000/ffffff/&amp;text=LOGO" alt="">
</a>

0

Non riuscire a far funzionare nessuna delle altre risposte nel mio caso (probabilmente non ho superato il test di intelligence) e dopo un po 'di sperimentazione, questo è quello che sto usando (che credo sia molto vicino all'impostazione predefinita di Bootstrap):

   <div class="navbar navbar-default navbar-fixed-top" role="navigation">
      <div class="navbar-header">
         <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
         </button>
         <div class="navbar-logo">
            <a class="navbar-brand" rel="home" href="@Url.Action("Index", "Home")" title="Home">
               <img src="~/Images/logo.png" class="img-responsive">
            </a>
         </div>
         <div class="collapse navbar-collapse" id="navbar-collapse">
            <ul class="nav navbar-nav">
               <li>@Html.ActionLink("Home", "Index", "Home")</li>
               <li>@Html.ActionLink("Coaching", "Coaching", "Home")</li>
               <li>@Html.ActionLink("Resources", "Resources", "Home")</li>
               <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
               <li>@Html.ActionLink("Blog", "Blog", "Home")</li>
               <li>@Html.ActionLink("About", "About", "Home")</li>
            </ul>
         </div>
      </div>
   </div>

E nel file CSS ho aggiunto quanto segue:

.navbar-brand {
   padding-top: 5px;
}

.navbar-collapse {
   float: left;
}

.navbar-logo {
   float: left;
}

Si noti che @Html.ActionLink()è la sintassi Razor per un <a>tag. Dove dice @Html.ActionLink(...)basta sostituirlo con un <a>tag appropriato . Allo stesso modo dove dice @Url.Action(...)sostituirlo con un URL appropriato (nessun <a>tag in quel caso).


0

Questo non è semantico ma uso solo quello esistente a elemento , imposto un'immagine di sfondo, quindi creo più varianti per una risoluzione @ 2x, dimensioni dello schermo più piccole, ecc.

Quindi, puoi usare la .text-hideclasse per ottenere del testo sulla pagina alla vecchia maniera. Uso semplice ed efficace anche se non corretto di un'immagine.

Ecco un link alla classe helper per la sostituzione del testo:

http://getbootstrap.com/css/#helper-classes


0

La risposta più semplice e migliore per questa domanda è quella di impostare una larghezza e un'altezza massima a seconda del logo, l'immagine avrà un'altezza massima di 50 px ma non più lunga di 200 px.

<a href="index.html">
<img src="imgs/brand-w.png" style="max-height:50px;max-width:200px;">
</a>

Questo varierà a seconda delle dimensioni del logo e degli elementi della barra di navigazione che hai.


0
<header class="navbar navbar-inverse header-outer" role="banner">
  <div class="container form-inline">
    <img src="@Url.Content(" ~/Content/img/Logo-Sample.png ")" alt="Image" id="logo" class="img-responsive pull-left" />

    <div class="pull-right padding-top">
      <form class="hidden-xs" role="form">

        <div class="form-group" style="padding-left:10px">
          <input type="email" class="form-control" id="exampleInputEmail2" placeholder="Username">
        </div>

        <div class="form-group">
          <input type="password" class="form-control" id="exampleInputPassword2" placeholder="Password">
        </div>
        <div class="form-group navbar-remember">
          <label class="white-font">
            <input type="checkbox" class="white-font"> Remember me
          </label>
        </div>
        <button type="button" class="btn btn-primary form-group" title="Sign In">Sign In</button>
      </form>
    </div>
  </div>

</header>

Ti preghiamo di comprendere il codice a tuo piacimento: D Questo è il mio codice bozza ed è già funzionante :) Ecco lo screenshot.

inserisci qui la descrizione dell'immagine


0

Invece di sostituire il marchio del testo, ho diviso in due righe come nel codice seguente e ho dato img-responsiveclasse all'immagine ......

<div class="collapse navbar-collapse navbar-ex1-collapse" style="background: #efefef; height:auto;">
  <div class="container" style="margin-bottom:-1px;">
    <div class="row">
      <div class="col-md-3">
        <div id="menubar-logo">
          <a href="index.html"><img src="img/tl_logo.png" class="img-responsive" alt="Triple Luck IT Service Logo"></a>
        </div>
      </div>
      <div class=" col-md-offset-3 col-md-6">

        <ul class="nav navbar-nav">
          <li><a href="index.php" class="active">Home</a></li>
          <li><a href="about_us.php">About Us</a></li>
          <li><a href="contact_us.php">Contact Us</a></li>
        </ul>
      </div>
    </div>
    <!-- end of "row" -->
  </div>
  <!-- end of "container" -->
</div>
<!-- end of "collapse" -->

e inoltre, ho aggiunto i seguenti codici css .......

#menubar-logo img {
  margin-top: 10px;
  margin-bottom: 20px;
  margin-right: 10px;
}

Se il mio codice risolve il tuo problema, è mio piacere .....


0
 <div class="navbar navbar-default navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header" >
               <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                   <span class="sr-only">Toggle navigation</span>
                   <span class="icon-bar"></span>
                   <span class="icon-bar"></span>
                   <span class="icon-bar"></span>

                   </button>
                <a class="navbar-brand" href="Default.aspx"> <span> <img alt="Logo" src="Images/shopify-bag.png"height="35" width="40"/></span> Shopping GO</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-right"></ul>

// Non dimenticare di aggiungere bootstrap in testa al tuo codice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.