2017-11-28 32 views
1

Ich habe ein einfaches Layout wie folgt aus:Ist es möglich, einen Text immer perfekt zentriert zu haben, während Padding verwendet wird?

<div class="centered"> 
<p class="msg">This is an important message</p> 
</div> 

mit diesem Blatt Stil auf sie angewendet: noch

.centered { 
text-align: center; 
} 

.msg { 
border: 1px solid red; 
color: red; 
display: inline-block; 
padding: 200px; 
} 

ich nach einer Möglichkeit, eine Polsterung auf der .msg Klasse anzuwenden unter Beibehaltung der Text .msg perfekt im Körper zentriert.

Wie Sie in diesem fiddle sehen:

Mit einem padding von 0, wird der Text immer perfekt zentriert.

padding-0

Wenn ich eine padding von d.h 200px verwenden, ist die Zentrierung nicht mehr perfekt.

padding-200

Was soll ich tun, perfekte Zentrierung zu halten, während Polsterung mit?

Vielen Dank für jede Hilfe.

+1

Ihr Padding macht das Element größer als die Seite, die nach rechts überläuft, weil Sie nicht zu negativen Offsets scrollen können. –

+0

Dieses Verhalten wird erwartet, wenn Ihre 'padding' -Eigenschaftswerte mit expliziten Werten deklariert sind (' px' statt '%'). Aber selbst mit dynamischeren Werten wird sich dieses Problem irgendwann wieder zeigen. Vielleicht möchten Sie den Grund für die Verwendung von 'padding' neu bewerten und überlegen, ob es eine bessere Eigenschaft oder eine Kombination von Eigenschaften gibt, die Sie stattdessen verwenden könnten, um das gleiche Ergebnis zu erzielen. – UncaughtTypeError

Antwort

0

eine Kombination von Position einsetzen und sich auf diese Weise:

* { 
 
    margin: 0; 
 
    padding: 0; 
 
    line-height: 1; 
 
    -webkit-box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    box-sizing: border-box; 
 
} 
 
html, body, .centered { 
 
    height: 100%; 
 
} 
 
.centered { 
 
    position: relative; 
 
} 
 
.msg { 
 
    position: absolute; 
 
    text-align: center; 
 
    top: 50%; 
 
    left: 50%; 
 
    transform: translate(-50%, -50%); 
 
    background: #f90; 
 
}
<div class="centered"> 
 
    <p class="msg">This is an important message</p> 
 
</div>

Added Hintergrund ist es zu zeigen, ist perfekt zentriert. Es funktioniert auch mit jeder Menge Text:

window.onload = function() { 
 
    setTimeout(function() { 
 
    message.innerHTML = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."; 
 
    }, 1000); 
 
};
* { 
 
    margin: 0; 
 
    padding: 0; 
 
    line-height: 1; 
 
    -webkit-box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    box-sizing: border-box; 
 
} 
 
html, body, .centered { 
 
    height: 100%; 
 
} 
 
.centered { 
 
    position: relative; 
 
} 
 
.msg { 
 
    position: absolute; 
 
    text-align: center; 
 
    top: 50%; 
 
    left: 50%; 
 
    transform: translate(-50%, -50%); 
 
    background: #f90; 
 
}
<div class="centered"> 
 
    <p class="msg" id="message">This is an important message</p> 
 
</div>

Added ein Timer zu zeigen.

+1

Sieht nicht vollständig vertikal zu mir zentriert. – ProEvilz

+0

@ProEvil Hinzugefügt 'box-sizing' und Hintergrund für einen visuellen Hinweis. Jetzt prüfen. – Soolie

+1

@ProEvil das ist nur der * useragent * 'margin', der auf dem' p'-Tag deklariert ist, leicht behoben, indem man ihn mit dem benutzerdefinierten Stil normalisiert. – UncaughtTypeError

Verwandte Themen