Domanda

Così ho un div nel mio corpo che è una larghezza percentuale, e al suo interno che un div con stile in linea come segue:

text-align: center; margin-left: -15px; margin-right: -15px; overflow: hidden;

Come potete vedere, ho text-align: center; su, che, se l'immagine era abbastanza piccolo per il div, centrare l'immagine. Ma la div larghezza percentuale è sicuramente non sarà abbastanza grande sul mio schermo 1280x800.

I margini negativi sono da superare alcuni imbottitura è div genitore. Il overflow:hidden fa sembrare le cose come voglio, non disordinato. Quindi, è una specie di lavorare come voglio che, come l'immagine di intestazione a onenaught.com . Diventerà più visibile sulla destra come si effettua il browser più ampia, ma non espandere da entrambi i lati, perché non è centrato.

Quindi, mi chiedo se c'è un modo per centrare l'immagine. Sa di qualsiasi?

Modifica: qui .

È stato utile?

Soluzione

Una possibilità sarebbe quella di posizionare assolutamente l'immagine con left: 50% e quindi utilizzare un negativo margine sinistro sull'immagine pari alla metà della larghezza dell'immagine. Naturalmente, questo richiede l'div contenente avere il suo posizionamento impostato relativo o assoluto per fornire il tipo di contenitore appropriato per l'immagine da assolutamente posizionato all'interno.

L'altra opzione (e probabilmente meglio) è invece di utilizzare un tag di immagine, è sufficiente impostare l'immagine come sfondo per il div genitore, e utilizzare il sfondo posizionamento CSS attributi per centrarla. Questo non solo assicurarsi che sia centrato senza forzare posizionamento assoluto, ma anche automaticamente ritagliare troppopieno, quindi l'attributo di overflow non è necessaria.

Altri suggerimenti

Si può effettivamente fare questo impostando il margin-left e margin-right sull'immagine per -100%.

Ecco un jsFiddle dimostrare questo. (utilizzare quella qui sotto, invece, è meglio)

È un'idea ancora migliore per impostare il margin-left e margin-right sull'immagine per un numero negativo molto più grande, ad esempio -9999%, come con il valore -100%, l'immagine inizia a muoversi fuori centro non appena elemento contenitore del div diventa meno largo 3 volte la larghezza del div:

margin-left: -100% + the div's width: 100% + margin-right: -100% = 3x div width

È possibile controllare la differenza di comportamento tra questo jsFiddle e quello precedente portando l'overflow visibile e ridimensionando la finestra risultato a meno 300% della larghezza del div.

Citando @MaxOriola sulla gamma dei browser supportati (dai commenti):

  

Ho riprovato secondo violino ... in Firefox, Chrome, Safari (ultime versioni) e Explorer 8, 9, 10. funziona bene in tutti loro.

Nota: elemento immagine deve essere visualizzato o inline inline-block e centrato orizzontalmente con text-align: center (sull'elemento involucro)

.

// ALL of the JS below is for demonstration purposes only

$(document).ready(function() {
  $('a').click(function() {
    $('body > div').toggleClass('overflow');
  });
})
img {
  margin: 0 -9999% 0 -9999%;
}


/* ALL of the CSS below is for demonstration purposes only */

body {
  text-align: center;
  font-family: verdana;
  font-size: 10pt;
  line-height: 20pt;
}

body>div {
  margin: 0px auto;
  width: 40%;
  background-color: lightblue;
  overflow: hidden;
}

img {
  vertical-align: top;
}

.overflow {
  overflow: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>40% wide div [<a href="#">toggle overflow</a>]
  <div>
    <img src="http://via.placeholder.com/400x200" />
  </div>
  400px wide image
</div>

Utilizzando css transform, un'immagine all'interno di un contenitore con overflow: hidden e una larghezza serie:

img {
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    display: block; /* optional */
}

jsFiddle qui (ho preso in prestito parte del jsFiddle di Mathijs Flietstra, quindi grazie).

è consigliabile utilizzare l'immagine come sfondo;)

utilizzo background-position per ottenere ciò che si desidera.

potrebbe essere bisogno di una soluzione di javascript per ottenere risultati costanti cross-browser

Ho trovato un'altra soluzione

<style type="text/css">
    .container {
        width:600px; //set how much you want
        overflow: hidden; 
        position: relative;
     }
     .containerSecond{
        position: absolute; 
        top:0px; 
        left:-100%; 
        width:300%;
     }
     .image{
        width: 800px; //your image size 
     }           
</style>

e nel corpo

<div class="container">
   <div class="containerSecond">
       <image src="..." class="" />
   </div>
</div>

In questo modo centrare l'immagine ogni volta che il contenitore è più grande o più piccolo. In questo caso, l'immagine deve essere più grande di 300% dei container di non essere centrato, ma in questo caso si può fare con dei containerSecond più grande, e funzionerà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top