Text um -90 Grad drehen und vertikal mit div ausrichten

Lesezeit: 5 Minuten

Benutzer-Avatar
Schrecken

Ich versuche, Text vertikal auszurichten, der um -90 Grad gedreht wurde, und habe nicht viel Glück. Code unten

HTML:

<section class="page_block" style="background: <?php echo $background; ?>;">
    <div class="row">
        <div class="col-md-1">
            <div id="header">
                <h1 class="verticaltext">
                    <?php echo $page->post_title; ?>
                </h1>
            </div>
        </div>
        <div class="col-md-11">
            <p><?php echo $page->post_content; ?></p>
        </div>
    </div>
</section>

CSS:

.page_block {
    margin:0px;
    padding:10px;
}
#header { 
    position: relative; 
}
.verticaltext {
    transform: rotate(-90deg);
    transform-origin: right, top;
    -ms-transform: rotate(-90deg);
    -ms-transform-origin:right, top;
    -webkit-transform: rotate(-90deg);
    -webkit-transform-origin:right, top;

    position: absolute; bottom: 0%; left: 0%;
    color: #ed217c;
}

Das Ergebnis ist wie. Dies ist ein WordPress-Theme mit implementiertem Twitter Bootstrap sowie einem Schieberegler in voller Breite. Ich habe bestätigt, dass sowohl Bootstrap als auch der Slider kein widersprüchliches CSS enthalten.

  • Wie soll der Text ausgerichtet werden? Center?

    – matewka

    2. Januar 2014 um 10:00 Uhr

  • Ja bitte, das wäre toll

    – Schrecken

    2. Januar 2014 um 10:03 Uhr

Nicht sicher, warum Sie hatten bottom: 0%; left: 0%; an erster Stelle, aber das Entfernen führt zu Ihrem gewünschten Ziel, glaube ich.

Hier ist ein Beispiel.

CSS:

.page_block {
    margin:0px;
    padding:10px;
}
#header { 
    position: relative; 
}
.verticaltext {
    transform: rotate(-90deg);
    transform-origin: right, top;
    -ms-transform: rotate(-90deg);
    -ms-transform-origin:right, top;
    -webkit-transform: rotate(-90deg);
    -webkit-transform-origin:right, top;
    position: absolute; 
    color: #ed217c;
}

  • Leider steht der Text nicht in der Mitte des div. Siehe Screenshot hier i.imgur.com/ufHBsIw.jpg

    – Schrecken

    2. Januar 2014 um 10:09 Uhr


  • Ich musste Ihren HTML- und CSS-Code geringfügig/erheblich ändern, also achten Sie genau darauf

    – Deryck

    2. Januar 2014 um 10:21 Uhr

  • Hilft nicht, da Sie das gesamte Layout ändern, die Überschrift in 1 Spalte links sitzt und der Inhalt die anderen 11 Spalten einnimmt. Ihre Lösung zerstört jegliche Reaktionsfähigkeit, die durch Bootstrap implementiert wurde.

    – Schrecken

    2. Januar 2014 um 10:29 Uhr

  • Könnten Sie bitte genau erklären, was das Problem war? Ich bin mir nicht wirklich sicher und habe die Lösung nur durch Versuch und Irrtum erreicht, daher wäre eine Erklärung wünschenswert.

    – Edward G-Jones

    7. Januar 2014 um 11:28 Uhr

Geben Sie hier die Bildbeschreibung ein

HTML

<div class="container">
    <div class="vertical">Vertical Text Here</div>
    <div>
        <div>Horizontal Text Here</div>
        ...
        <div>Horizontal Text Here</div>
    </div>
</div>

CSS

.container{
     display: grid;
     grid-auto-rows: minmax(min-content, max-content);
     grid-template-columns: auto 1fr;
}

.vertical{
     transform: rotate(180deg);
     writing-mode: vertical-lr;
     text-align: center;
}

Erläuterung

-90-Grad-Text erreichen

writing-mode: vertical-lr schreibt Text vertikal, ist aber im Grunde gleichbedeutend mit einer Drehung des Textes um 90 Grad. Mit transform: rotate(180deg) Am Ende haben wir den gewünschten -90-Grad-Look.

So richten Sie gedrehten Text vertikal aus

ich benutzte grid und grid-template-columns um den gedrehten Text neben dem div zu platzieren. Auf diese Weise kann das div mehrere Zeilen oder andere Dinge enthalten. Verwenden text-align um den gedrehten Text wie gewünscht auszurichten. In diesem Fall ist es center.

Hinweis: Sie benötigen möglicherweise nicht: grid-auto-rows: minmax(min-content, max-content). Wenn die Höhe des gedrehten Textes seltsame Dinge bewirkt, kann dies verwendet werden, um den gedrehten Text an seinen Inhalt anzupassen.

Es gibt eine CSS-Eigenschaft, die Text dreht und die enthaltenen Blöcke ausrichtet: writing-mode

Hier ist ein JS Fiddle-Beispiel.

Benutzer-Avatar
Edward G-Jones

Ich habe es geschafft, den gleichen Effekt wie Deruck zu erzielen, aber ohne die Struktur des HTML-Codes zu ändern.

JSFiddle

body{
    margin:0;
}
p{
    margin: 0;
}
.page_block {
    margin:0px;
}
.row{
    position: relative;
}
.col-md-11{
    margin-left:50px;
}
.verticaltext {
    transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    -webkit-transform: rotate(-90deg);

    bottom: 45%;
    position: absolute;
    color: #ed217c;
}

Am Ende musste ich die CSS-Front aufgeben und die Titel als transparente PNGs mit GD generieren. Nicht ideal, aber gibt mir viel mehr Flexibilität in Bezug auf die Positionierung. Wenn jemand an dem Rotationsskript interessiert ist, das ich verwende, ist es unten

define("DEFAULT_FONT", "fonts/BebasNeue-webfont.ttf");
define("DEFAULT_COLOR", "ed217c");
define("DEFAULT_SIZE", 24);
define("DEFAULT_ANGLE", 0);
define("DEFAULT_PADDING", 10);
define("DEFAULT_SPACING", 0);

$text = $_GET['text'];
if(isset($_GET['transform'])):
    switch ($_GET['transform']){
        case 'uc':
            $text = strtoupper($_GET['text']);
            break;

        case 'lc':
            $text = strtolower($_GET['text']);
            break;

        case 'ucf':
            $text = ucfirst($_GET['text']);
            break;

        case 'ucw':
            $text = ucwords($_GET['text']);
            break;
    }
endif;

$font = $_GET['font'] ? $_GET['font'] : DEFAULT_FONT;
$color = (strlen($_GET['color']) == 6 && ctype_alnum($_GET['color']))  ? "0x" . $_GET['color'] : "0x" . DEFAULT_COLOR;
$size = (is_numeric($_GET['size'])) ? $_GET['size'] : DEFAULT_SIZE;
$angle = (is_numeric($_GET['angle'])) ? $_GET['angle'] : DEFAULT_ANGLE;
$padding = (is_numeric($_GET['padding'])) ? $_GET['padding']*4 : DEFAULT_PADDING*4;
$spacing = (is_numeric($_GET['spacing'])) ? $_GET['spacing'] : DEFAULT_SPACING;
$text_dimensions = calculateTextDimensions($text, $font, $size, $angle, $spacing);
$image_width = $text_dimensions["width"] + $padding;
$image_height = $text_dimensions["height"] + $padding;

$new_image = imagecreatetruecolor($image_width, $image_height);
ImageFill($new_image, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($new_image, true);
imagealphablending($new_image, false);
imagettftextSp($new_image, $size, $angle, $text_dimensions["left"] + ($image_width / 2) - ($text_dimensions["width"] / 2), $text_dimensions["top"] + ($image_height / 2) - ($text_dimensions["height"] / 2), $color, $font, $text, $spacing);
imagepng($new_image);
imagerotate($new_image, 90, 0);
imagedestroy($new_image);

function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0)
{
    if ($spacing == 0)
    {
        imagettftext($image, $size, $angle, $x, $y, $color, $font, $text);
    }
    else
    {
        $temp_x = $x;
        for ($i = 0; $i < strlen($text); $i++)
        {
            $bbox = imagettftext($image, $size, $angle, $temp_x, $y, $color, $font, $text[$i]);
            $temp_x += $spacing + ($bbox[2] - $bbox[0]);
        }
    }
}

function calculateTextDimensions($text, $font, $size, $angle, $spacing) {
    $rect = imagettfbbox($size, $angle, $font, $text);
    $minX = min(array($rect[0],$rect[2],$rect[4],$rect[6]));
    $maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6]));
    $minY = min(array($rect[1],$rect[3],$rect[5],$rect[7]));
    $maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7]));
    $spacing = ($spacing*(strlen($text)+2));
    return array(
        "left"   => abs($minX) - 1,
        "top"    => abs($minY) - 1,
        "width"  => ($maxX - $minX)+$spacing,
        "height" => $maxY - $minY,
        "box"    => $rect
    );
}
    header("content-type: image/png");

Modifiziert von Jason Laus großartigem Skript, das gefunden werden kann hier.

1384580cookie-checkText um -90 Grad drehen und vertikal mit div ausrichten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy