Domanda

Vorrei fare una scatola pop-up position: fixed; centrato sullo schermo con una larghezza dinamica e l'altezza. Ho usato margin: 5% auto; per questo. Senza position: fixed; centra bene orizzontalmente, ma non verticalmente. Dopo aver aggiunto position: fixed;, è ancora non centratura orizzontale.

Ecco il set completo:

.jqbox_innerhtml {
    position: fixed;
    width: 500px;
    height: 200px;
    margin: 5% auto;
    padding: 10px;
    border: 5px solid #ccc;
    background-color: #fff;
}
<div class="jqbox_innerhtml">
    This should be inside a horizontally
    and vertically centered box.
</div>

Come faccio CENTRO scatola a schermo con i CSS?

È stato utile?

Soluzione

È praticamente necessario impostare top e left a 50% per centrare l'angolo superiore sinistro del div. È inoltre necessario impostare il margin-top e margin-left alla metà negativa di altezza e la larghezza del div di spostare il centro verso la metà del div.

In questo modo, ha fornito un <!DOCTYPE html> (modalità standard), questo dovrebbe fare:

position: fixed;
width: 500px;
height: 200px;
top: 50%;
left: 50%;
margin-top: -100px; /* Negative half of height. */
margin-left: -250px; /* Negative half of width. */

In alternativa, se non si cura di centrare verticalmente e vecchi browser come IE6 / 7, allora si può anche aggiungere invece left: 0 e right: 0 all'elemento avere un margin-left e margin-right di auto, in modo che l'elemento posizionato fisso avendo una larghezza fissa sa dove iniziano le sue offset sinistro e destro. Nel tuo caso quindi:

position: fixed;
width: 500px;
height: 200px;
margin: 5% auto; /* Will not center vertically and won't work in IE6/7. */
left: 0;
right: 0;

Ancora una volta, questo funziona solo in IE8 + se vi preoccupate per IE, e questo centra solo orizzontalmente e non verticalmente.

Altri suggerimenti

  

Voglio fare una scatola pop-up centrato sullo schermo con la larghezza e l'altezza dinamica.

Ecco un approccio moderno per orizzontalmente centrare un elemento con una larghezza dinamica - funziona in tutti i browser moderni; Supporto può essere visto qui .

Aggiornamento Esempio

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    transform: translateX(-50%);
}

Per sia verticale che orizzontale centratura è possibile utilizzare il seguente:

Aggiornamento Esempio

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}

Si potrebbe desiderare di aggiungere in più vendor prefisso proprietà troppo (vedi gli esempi).

O semplicemente aggiungere left: 0 e right: 0 al vostro CSS originale, che lo rende si comportano in modo simile ad un elemento non fissa regolare e la tecnica di auto-margine di solito funziona:

.jqbox_innerhtml
{
  position: fixed;
  width:500px;
  height:200px;
  background-color:#FFF;
  padding:10px;
  border:5px solid #CCC;
  z-index:200;
  margin: 5% auto;
  left: 0;
  right: 0;
}

Nota è necessario utilizzare un valido (X) HTML DOCTYPE per questo comportarsi correttamente in IE (che si dovrebbe ovviamente avere comunque ..!)

Aggiungi un contenitore come:

div {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  text-align: center;
}

Poi, mettete la vostra scatola in questo div farà il lavoro.

Basta aggiungere:

left: calc(-50vw + 50%);
right: calc(-50vw + 50%);
margin-left: auto;
margin-right: auto;

Questa soluzione non richiede di voi per definire una larghezza e l'altezza al div popup.

http://jsfiddle.net/4Ly4B/33/

E invece di calcolare le dimensioni del popup, e meno della metà verso l'alto, javascript è resizeing il popupContainer di compilare l'intero schermo ...

(100 altezza%, non funziona quando useing display: table-cell; (goduto è necessario per centrare qualcosa in verticale)) ...

In ogni caso funziona:)

left: 0;
right: 0;

non funzionava in IE7.

Cambiato

left:auto;
right:auto;

lavoro avviato ma nel resto I browser che smettere di lavorare! Così usato in questo modo per IE7 seguente

if ($.browser.msie && parseInt($.browser.version, 10) <= 7) {                                
  strAlertWrapper.css({position:'fixed', bottom:'0', height:'auto', left:'auto', right:'auto'});
}
#modal {
    display: flex;
    justify-content: space-around;
    align-items: center;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

interno può essere qualsiasi elemento con diffenet larghezza, altezza o senza. tutti sono centrati.

Si può sostanzialmente avvolgerlo in un altro div e impostare il suo position a fixed.

.bg {
  position: fixed;
  width: 100%;
}

.jqbox_innerhtml {
  width: 500px;
  height: 200px;
  margin: 5% auto;
  padding: 10px;
  border: 5px solid #ccc;
  background-color: #fff;
}
<div class="bg">
  <div class="jqbox_innerhtml">
    This should be inside a horizontally and vertically centered box.
  </div>
</div>

Per fissare l'uso posizione di questo: -

div {
    position: fixed;
    left: 68%;
    transform: translateX(-8%);
}

Ho usato vw (larghezza finestra) e vh (altezza finestra). viewport è l'intero schermo. 100vw è vostri schermi larghezza totale e 100vh è altezza totale.

.class_name{
    width: 50vw;
    height: 50vh;
    border: 1px solid red;
    position: fixed;
    left: 25vw;top: 25vh;   
}

Una possibile rispondere :

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>CSS Center Background Demo</title>
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
        }

        div.centred_background_stage_1 {
            position: fixed;
            z-index:(-1 );
            top: 45%;
            left: 50%;
        }

        div.centred_background_stage_2 {
            position: relative;
            left: -50%;

            top: -208px;
            /* % does not work.
               According to the
               http://reeddesign.co.uk/test/points-pixels.html
               6pt is about 8px

               In the case of this demo the background
               text consists of three lines with
               font size 80pt.

               3 lines (with space between the lines)
               times 80pt is about
               ~3*(1.3)*80pt*(8px/6pt)~ 416px

               50% from the 416px = 208px
             */

            text-align: left;
            vertical-align: top;
        }

        #bells_and_wistles_for_the_demo {
            font-family: monospace;
            font-size: 80pt;
            font-weight: bold;
            color: #E0E0E0;
        }

        div.centred_background_foreground {
            z-index: 1;
            position: relative;
        }
    </style>
</head>
<body>
<div class="centred_background_stage_1">
    <div class="centred_background_stage_2">
        <div id="bells_and_wistles_for_the_demo">
            World<br/>
            Wide<br/>
            Web
        </div>
    </div>
</div>
<div class="centred_background_foreground">
    This is a demo for <br/>
    <a href="http://stackoverflow.com/questions/2005954/center-element-with-positionfixed">
        http://stackoverflow.com/questions/2005954/center-element-with-positionfixed
    </a>
    <br/><br/>
    <a href="http://www.starwreck.com/" style="border: 0px;">
        <img src="./star_wreck_in_the_perkinnintg.jpg"
             style="opacity:0.1;"/>
    </a>
    <br/>
</div>
</body>
</html>

Provare a utilizzare questo per elementi orizzontali, che non centrerà correttamente.

larghezza: calc (larghezza: 100% - larghezza qualsiasi altra cosa è spento centrandola )

Per esempio, se la vostra barra di navigazione laterale è 200px:

width: calc(100% - 200px);

L'unica soluzione infallibile consiste nell'utilizzare tavolo align = center come in:

<table align=center><tr><td>
<div>
...
</div>
</td></tr></table>

Non posso credere che la gente di tutto il mondo che sprecano questi abbondante in tanto stupido per risolvere un problema fondamentale come centrare un div. soluzione css non funziona per tutti i browser, la soluzione jQuery è una soluzione software di calcolo e non è un'opzione per altri motivi.

Ho perso troppo tempo ripetutamente per evitare l'uso di tavolo, ma l'esperienza mi dirà di smettere di combatterlo. Utilizzare tavolo per div centraggio. Funziona tutto il tempo in tutti i browser! Non preoccuparsi più.

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