Comment centrer un fond div?

neeh

Ce que je veux

deux div: un corps de page (1) et un bloc d'arrière - plan (2)

  • le bloc d'arrière-plan est toujours (2560 x 780) px
  • La largeur du corps de la page est de 820 pixels tandis que la hauteur est variable
  • le bloc d'arrière-plan doit être derrière le corps de la page
  • le bloc d'arrière-plan et le corps de la page doivent tous deux être centrés
  • Le bloc d'arrière-plan ne doit pas se déplacer par rapport au corps de la page lors du redimensionnement de la fenêtre (même de 1 pixel!)
  • aucune barre de défilement horizontale ne doit apparaître pour le bloc d'arrière-plan
  • la position du bloc d'arrière-plan n'est pas fixe

Disposition souhaitée

Contraintes

  • pas de JS
  • CSS2 preferred

What I tried

Page body CSS:

#pageBody {
    width: 820px;
    margin: 0 auto;
}

Background block CSS:

1. A full-page div which displays a CSS centered background

<div id="backgroundBlock"></div>
<div id="pageBody">
</div>
#backgroundBlock {
    background: no-repeat center 0 url(bg.png);
    width: 100%;
    height: 100%;
    position: absolute;
}

But when the window's size is odd:

  • the CSS background is shifted by 1 pixel on the left
  • background image appears blurry on Internet Explorer

2. A repositioned child div

  • make background block a child of page body (which is centered)
  • make background block positioned absolute (to put it behind page body)
  • use negative margins to reposition the background block
  • make background block overflow: hidden to prevent the scroll bar from appear for that div
<div id="pageBody">
    <div id="backgroundBlock"></div>
</div>
#backgroundBlock {
    background: no-repeat url(bg.png);
    width: 2560px;
    height: 780px;
    position: absolute;
    margin: 0 0 0 -870px;
    overflow: hidden;
}

But problem: the scroll bar appears for the background block...

Bali Balo

Here are a few ideas I could think of, with their issues. However, I could not reproduce the "blurry in IE" issue, so I don't know which solution have it or not.
I did put "Extra markup" as an issue for solutions including a div (#backgroundBlock) only used to display the background image, as it is not semantic.


Solution 1 (jsfiddle)

  • Description : Your first solution
  • Issues :
    • Extra markup
    • On Chrome, depending on the page size, pixels can be aligned differently. You can see it on jsfiddle near the right border : problème de pixel

Solution 2 (jsfiddle)

  • Description : Multiple-backgrounds on body. #backgroundBlock div not needed.

    body {
        background: no-repeat center top url(bg.png), url(bodybg.png);
    }
    
  • Issues :

    • Not compatible with old browsers (IE8, FF3.5, ... ; source)
    • On Chrome, same alignment problem as in solution 1

Solution 3 (jsfiddle)

  • Description : Use of translate. No more pixel alignment errors.

    #backgroundBlock
    {
        background: url(bg.png);
        width: 2560px;
        height: 780px;
        position: absolute;
        top: 0;
        left: 50%;
        transform: translate(-50%, 0);
    }
    
  • Issues :

    • Extra markup
    • You have to use overflow-x: hidden on body to avoid horizontal scrollbar
    • Not compatible with old browsers (IE8, FF3, ... ; source). You should also use prefixes for compatibility (-webkit-, -moz-, ...). I did not add them to keep the example simple

Solution 4 (jsfiddle)

  • Description : Use of translate and ::before. Alternative version of solution 3. Pseudo-elements compatibility are not an issue here since every browser supporting 2D-tranforms supports ::before (source).

    #backgroundBlock
    {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        overflow: hidden;
    }
    #backgroundBlock:before
    {
        content: '';
        background: url(bg.png);
        width: 2560px;
        height: 780px;
        position: absolute;
        top: 0;
        left: 50%;
        transform: translate(-50%, 0);
    }
    
  • Issues :

    • Extra markup
    • Not compatible with old browsers (IE8, FF3, ... ; source). You should also use prefixes for compatibility (-webkit-, -moz-, ...). I did not add them to keep the example simple

Il existe d'autres possibilités, mais je pense que la plupart d'entre elles auraient l'un des problèmes ci-dessus.
Par exemple, vous pouvez définir la #pageBodylargeur de 2560px, régler le fond sur elle, ajouter le remplissage d'avoir une taille de contenu 820px et translatedans le but de le centrer sur la page (et empêcher les barres de défilement horizontales à l' aide overflow-xsur body). Cela serait possible car l'image d'arrière-plan et le corps de la page ont tous deux une largeur fixe.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Centrer un paragraphe avec <div> sans étalement du fond

Ionic: Comment centrer un div?

Comment centrer un SVG dans un div?

Comment centrer un bouton dans un div?

Comment centrer un div (chargeur CSS)

Comment centrer un élément div ?

Comment centrer <input> horizontalement dans un <div> ?

Comment centrer l'image dans FloatingActionButton derrière un fond transparent?

Comment centrer également un div dans un autre div?

Comment centrer trois div horizontalement dans un div parent?

comment centrer horizontalement plusieurs div dans un div parent

Comment centrer div verticalement dans un autre div

Comment centrer un groupe d'entrée dans un div?

Comment centrer horizontalement un div dans un li en CSS

Comment centrer horizontalement un ul dans un div

Comment centrer horizontalement un bouton absolu dans un div ?

Comment centrer un élément de table dans un div ?

Comment centrer parfaitement un div dans un conteneur

Comment centrer un élément div qui superpose un curseur

Comment redimensionner proportionnellement l'image de fond d'un 'div' ?

Comment trouver le vrai fond d'un div?

Comment utiliser une image de fond dans un div ?

Comment faire flotter un div au fond de son conteneur?

Comment vérifier si un div a des valeurs de fond ?

Comment puis-je centrer verticalement un div dans bootstrap?

Comment centrer verticalement un div par rapport à la hauteur restante

Comment centrer un div avec des grilles css?

Comment centrer verticalement une image dans un div fixe

Comment centrer verticalement un div à défilement horizontal

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive