Ik heb de volgende HTML:
<div class="outer">
<div class="inner rotate">Centered?</div>
</div>
div.outer
is een smalle verticale strook. div.inner
is 90 graden gedraaid. Ik wil graag de tekst “Gecentreerd?” gecentreerd verschijnen in de container div. Ik weet van tevoren niet hoe groot beide div’s zijn.
Dit komt in de buurt: http://jsfiddle.net/CCMyf/2/. Je kunt aan de jsfiddle zien dat de tekst verticaal gecentreerd is voordat de stijl transform: rotate(-90deg)
wordt toegepast, maar daarna enigszins wordt verschoven. Dit is vooral merkbaar wanneer div.outer
kort is.
Is het mogelijk om deze tekst verticaal te centreren zonder vooraf de afmetingen te kennen? Ik heb geen waarden gevonden van transform-origin
die dit probleem oplossen.
Antwoord 1, autoriteit 100%
De sleutel is om de positie boven en links in te stellen op 50% en vervolgens transformX en transformY naar -50%.
.inner {
position: absolute;
top: 50%;
left: 50%;
}
.rotate {
transform: translateX(-50%) translateY(-50%) rotate(-90deg);
}
zie: http://jsfiddle.net/CCMyf/79/
Antwoord 2, autoriteit 4%
Het is misschien een beetje laat om die vraag te beantwoorden, maar ik stuitte op hetzelfde probleem en vond een manier om dit te bereiken, door nog een div toe te voegen.
<div class="outer">
<div class='middle'><span class="inner rotate">Centered?</span></div>
</div>
en een text-align: center
toepassen op dat middelste element, samen met wat positioneringsdingen:
.middle {
margin-left: -200px;
width: 400px;
text-align: center;
position: relative;
left: 7px;
top: 50%;
line-height: 37px;
}
De .inner
krijgt ook een display: inline-block;
om zowel rotate
als text-align
eigenschappen.
Hier is de bijbehorende viool: http://jsfiddle.net/CCMyf/47/
Antwoord 3
Kun je margin: 0 auto;
toevoegen aan je “rotate” class om de tekst te centreren.
.rotate {
-webkit-transform: rotate(-90deg);
-ff-transform: rotate(-90deg);
transform: rotate(-90deg);
width: 16px; /* transform: rotate() does not rotate the bounding box. */
margin: 0 auto;
}
Antwoord 4
Het antwoord van ‘bjnsn’ is goed, maar niet perfect omdat het faalt wanneer de tekst ruimte bevat. Hij gebruikte bijvoorbeeld ‘Centered?’ als tekst, maar als we de tekst zouden wijzigen om ‘Gecentreerd? of niet’, dan zal het niet goed werken en zal het de volgende regel na spatie innemen. Er is geen breedte of hoogte gedefinieerd voor het binnenste div-blok.
.inner {
font-size: 13px;
font-color: #878787;
position: absolute;
top: 50%;
left: 50%;
background: #DDD;
}
https://jsfiddle.net/touqeer_shakeel/f1gfy1yy/
Maar we kunnen de hele tekst goed gecentreerd uitlijnen, door de breedte van de binnenste div gelijk te stellen aan de hoogte van de buitenste div, de regelhoogte van de binnenste div gelijk aan de breedte van de buitenste div en de eigenschap display flex in te stellen voor de binnenste div met align -items:center en rechtvaardigen-content:center eigenschappen.
.inner {
font-size: 13px;
font-color: #878787;
position: absolute;
top: 50%;
left: 50%;
display: flex;
justify-content:center;
align-items:center;
line-height:40px;
}
$('#height').on('change', function(e) {
$('.outer').css('height', $('#height').val() + 'px');
$('.inner').css('width', $('#height').val() + 'px');
});
viool bijgewerkt https://jsfiddle.net/touqeer_shakeel/cjL21of5/
Antwoord 5
De andere optie om tekst 90 graden te roteren en te centreren op as Y is:
.rotate-centered {
top: 50%;
right: 50%;
position: absolute;
transform: scale(-1) translate(-50%, 50%);
writing-mode: vertical-lr;
}
<span class="rotate-centered">Text<span>
Voorbeeld: https://codepen.io/wwwebman/pen/KKwqErL
Maar vanwege slechte ondersteuning in IE/EDGE werkt de writing-mode
daar NIET:
https://developer.mozilla.org/en-US/ docs/Web/CSS/schrijfmodus
Antwoord 6
Verwijderen: margin-top: -7px;
van .inner
maakte de verticaal geroteerde tekst voor mij gecentreerd. Het maakte ook de horizontale tekst niet gecentreerd.
Alleen de bovenstaande code verwijderen?
Antwoord 7
Je zou dit kunnen toevoegen:
$('.inner').css('margin-top', $(this).parent().height() - 2*$(this).height());
Naar uw functie .on('change')
, zoals u hier kunt zien: http://jsfiddle.net/darkajax/hVhbp/