CSS3-Transformation Schräglage auf einer Seite

Lesezeit: 6 Minuten

CSS3 Transformation Schraglage auf einer Seite
Syd

Ist es möglich, “CSS3 Transform Skew One Side” zu erstellen?

Ich habe eine Lösung gefunden, aber sie ist für mich nicht nützlich, da ich ein Bild für den Hintergrund verwenden muss (nicht für Farbe).

#skewOneSide {
    border-bottom: 40px solid #FF0000;
    border-left: 50px solid rgba(0, 0, 0, 0);
    height: 0;
    line-height: 40px;
    width: 100px;
}

Sogar das JsFiddle ist auch nicht sinnvoll (verzerrter Bereich sollte transparent sein)

1645916527 592 CSS3 Transformation Schraglage auf einer Seite
Diego

Versuche dies:

Zu aufdrehen Verwenden Sie für das Bild ein verschachteltes div für das Bild und geben Sie ihm den entgegengesetzten Skew-Wert. Wenn Sie also 20 Grad auf dem übergeordneten Element hatten, können Sie dem verschachtelten (Bild-) Div einen Skew-Wert von -20 Grad geben.

.container {
  overflow: hidden;
}

#parallelogram {
  width: 150px;
  height: 100px;
  margin: 0 0 0 -20px;
  -webkit-transform: skew(20deg);
  -moz-transform: skew(20deg);
  -o-transform: skew(20deg);
  background: red;
  overflow: hidden;
  position: relative;
}

.image {
  background: url(http://placekitten.com/301/301);
  position: absolute;
  top: -30px;
  left: -30px;
  right: -30px;
  bottom: -30px;
  -webkit-transform: skew(-20deg);
  -moz-transform: skew(-20deg);
  -o-transform: skew(-20deg);
}
<div class="container">
  <div id="parallelogram">
    <div class="image"></div>
  </div>
</div>

Das Beispiel:

http://jsfiddle.net/diegoh/mXLgF/1154/

  • Die Antwort von @ darthmaim (unten), ein Pseudo (vorher oder nachher) zu verwenden, um die innere Grenze zu verzerren, sollte die akzeptierte Antwort sein. Es sind keine zusätzlichen Wrapper-Elemente erforderlich.

    – Clifford Fajardo

    26. Juli 2018 um 16:02 Uhr

CSS3 Transformation Schraglage auf einer Seite
ÖzgurG

Vielleicht möchten Sie CSS “clip-path” verwenden (funktioniert mit Transparenz und Hintergrund)

“Clip-Pfad”-Referenz: https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path

Generator: https://bennettfeely.com/clippy/

Beispiel:

/* With percent */
.element-percent {
  background: red;
  width: 150px;
  height: 48px;
  display: inline-block;
  
  clip-path: polygon(0 0, 100% 0%, 75% 100%, 0% 100%);
}

/* With pixel */
.element-pixel {
  background: blue;
  width: 150px;
  height: 48px;
  display: inline-block;
  
  clip-path: polygon(0 0, 100% 0%, calc(100% - 32px) 100%, 0% 100%);
}

/* With background */
.element-background {
  background: url(https://images.pexels.com/photos/170811/pexels-photo-170811.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260) no-repeat center/cover;
  width: 150px;
  height: 48px;
  display: inline-block;
  
  clip-path: polygon(0 0, 100% 0%, calc(100% - 32px) 100%, 0% 100%);
}
<div class="element-percent"></div>

<br />

<div class="element-pixel"></div>

<br />

<div class="element-background"></div>

  • Das ist vorbei weit der beste Weg, dies zu tun. Ausgezeichnete Demo; hochgestimmt.

    – Obsidianalter

    20. September 2021 um 22:50 Uhr

1645916530 999 CSS3 Transformation Schraglage auf einer Seite
Max Payne

Sie können dies mit transform und transform origins machen.

Das Kombinieren verschiedener Transfromen ergibt ein ähnliches Ergebnis. Ich hoffe, Sie finden es hilfreich. 🙂 Siehe diese Beispiele für einfachere Transformationen. Dies hat einen linken Punkt:

div {    
    width: 300px;
    height:200px;
    background-image: url('data:image/gif;base64,R0lGODdhLAHIANUAAKqqqgAAAO7u7uXl5bKysru7u93d3czMzMPDw9TU1BUVFdDQ0B0dHaurqywsLHJyclVVVTc3N5SUlBkZGcHBwRYWFmpqasjIyDAwMJubm39/fyoqKhcXF4qKikJCQnd3d0ZGRhoaGoWFhV1dXVlZWZ+fn7m5uT8/Py4uLqWlpWFhYUlJSTMzM4+Pj25ubkxMTBgYGBwcHG9vbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAALAHIAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKlS3gBYsZUIESDggAKLBCxiVOn/hQNG2JCKMIz55CiPlUKWLqAQQMAEjg0ENAggAYhUadWvRoFhIsFC14kzUrVKlSpZbmydPCgAAAPbQEU+ABCCFy3c+tGSXCAAIEEMIbclUv3bdy8LSFEOCAkBIEhBEI0fiwkspETajWcSCIhxhDHkCWDrix5pYQJFIYEoAwgQwAhq4e4NpIAhQSoKBIkkTEUNuvZsYXMXukgQAWfryEnT16ZOZEUDiQ4SJ0EhgnVRAi8dq6dpQEBFzDoDHAbOwDyRJwPKdAhQAfWRiBAYI0ee33YLglQeM1AxBAJDAjR338BHqECCSskocEE1w0xIFYBPghVgS1lECAEIwxBQm8Y+WrYG1EsJGCBWkRkBV+HQmwIAIoAqNiSBg48VYJZCzY441U1GhFVagfYZoQDLbhFxI0A5EhkjioFFQAHHeAV1ZINUFbAk1LBZ1cLlKXgQRFKyrQelVHKBaaVJn0nwAAIDIHAAGcKKcSabR6RQJpCFKAbEWYuJQARcA7gZp9uviTooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghhtPEAA7');
    -webkit-transform: perspective(300px) rotateX(-30deg);
    -o-transform: perspective(300px) rotateX(-30deg);
    -moz-transform: perspective(300px) rotateX(-30deg);
    -webkit-transform-origin: 100% 50%;
    -moz-transform-origin: 100% 50%;
    -o-transform-origin: 100% 50%;
    transform-origin: 100% 50%;
    margin: 10px 90px;
}
<div></div>

Dies hat den richtigen Skew-Punkt:

div {    
    width: 300px;
    height:200px;
    background-image: url('data:image/gif;base64,R0lGODdhLAHIANUAAKqqqgAAAO7u7uXl5bKysru7u93d3czMzMPDw9TU1BUVFdDQ0B0dHaurqywsLHJyclVVVTc3N5SUlBkZGcHBwRYWFmpqasjIyDAwMJubm39/fyoqKhcXF4qKikJCQnd3d0ZGRhoaGoWFhV1dXVlZWZ+fn7m5uT8/Py4uLqWlpWFhYUlJSTMzM4+Pj25ubkxMTBgYGBwcHG9vbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAALAHIAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKlS3gBYsZUIESDggAKLBCxiVOn/hQNG2JCKMIz55CiPlUKWLqAQQMAEjg0ENAggAYhUadWvRoFhIsFC14kzUrVKlSpZbmydPCgAAAPbQEU+ABCCFy3c+tGSXCAAIEEMIbclUv3bdy8LSFEOCAkBIEhBEI0fiwkspETajWcSCIhxhDHkCWDrix5pYQJFIYEoAwgQwAhq4e4NpIAhQSoKBIkkTEUNuvZsYXMXukgQAWfryEnT16ZOZEUDiQ4SJ0EhgnVRAi8dq6dpQEBFzDoDHAbOwDyRJwPKdAhQAfWRiBAYI0ee33YLglQeM1AxBAJDAjR338BHqECCSskocEE1w0xIFYBPghVgS1lECAEIwxBQm8Y+WrYG1EsJGCBWkRkBV+HQmwIAIoAqNiSBg48VYJZCzY441U1GhFVagfYZoQDLbhFxI0A5EhkjioFFQAHHeAV1ZINUFbAk1LBZ1cLlKXgQRFKyrQelVHKBaaVJn0nwAAIDIHAAGcKKcSabR6RQJpCFKAbEWYuJQARcA7gZp9uviTooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghhtPEAA7');
    -webkit-transform: perspective(300px) rotateX(-30deg);
    -o-transform: perspective(300px) rotateX(-30deg);
    -moz-transform: perspective(300px) rotateX(-30deg);
    -webkit-transform-origin: 0% 50%;
    -moz-transform-origin: 0% 50%;
    -o-transform-origin: 0% 50%;
    transform-origin: 0% 50%;
    margin: 10px 90px;
}
<div></div>

was transform: 0% 50%; tut, indem es den Ursprung auf die vertikale Mitte und die horizontale linke Seite des Elements setzt. Die Perspektive ist also im linken Teil des Bildes nicht sichtbar, sodass es flach aussieht. Der Perspektiveffekt ist am rechten Teil vorhanden, sodass er schräg aussieht.

  • Das verzerrt leider das Bild

    – Skyegill

    27. August 2021 um 16:04 Uhr

Ich weiß, dass dies alt ist, aber ich möchte vorschlagen, einen linearen Farbverlauf zu verwenden, um den gleichen Effekt anstelle eines Randversatzes zu erzielen. Dadurch werden alle Inhalte an ihrem ursprünglichen Platz beibehalten.

http://jsfiddle.net/zwXaf/2/

HTML

<ul>
    <li><a href="#">One</a></li>
    <li><a href="#">Two</a></li>
    <li><a href="#">Three</a></li>
</ul>

CSS

/* reset */
ul, li, a {
    margin: 0; padding: 0;
}
/* nav stuff */
ul, li, a {
    display: inline-block;
    text-align: center;
}
/* appearance styling */
ul {
    /* hacks to make one side slant only */
    overflow: hidden;
    background: linear-gradient(to right, red, white, white, red);
}
li {
    background-color: red;
     transform:skewX(-20deg);
    -ms-transform:skewX(-20deg);
    -webkit-transform:skewX(-20deg);
}
li a {
    padding: 3px 6px 3px 6px;
    color: #ffffff;
    text-decoration: none;
    width: 80px;
     transform:skewX(20deg);
    -ms-transform:skewX(20deg);
    -webkit-transform:skewX(20deg);
}

Du versuchst es mit der :before war ziemlich nah, das einzige, was Sie ändern mussten, war die Verwendung von Skew anstelle der Ränder: http://jsfiddle.net/Hfkk7/1101/

Bearbeiten: Ihr Grenzansatz würde auch funktionieren, das einzige, was Sie falsch gemacht haben, war, das Before-Element über Ihrem Div zu haben, sodass der transparente Rand nicht angezeigt wurde. Wenn Sie das Pseudo-Element links von Ihrem div positioniert hätten, hätte auch alles funktioniert: http://jsfiddle.net/Hfkk7/1102/

  • Das erledigt fast die Arbeit, die ich brauchte, aber hier verzerrt das Verzerren auch das Hintergrundbild, gibt es dafür eine Lösung. Trotzdem +1 hinzugefügt danke 🙂

    – Syd

    4. November 2013 um 16:54 Uhr


  • Das erledigt fast die Arbeit, die ich brauchte, aber hier verzerrt das Verzerren auch das Hintergrundbild, gibt es dafür eine Lösung. Trotzdem +1 hinzugefügt danke 🙂

    – Syd

    4. November 2013 um 16:54 Uhr


869210cookie-checkCSS3-Transformation Schräglage auf einer Seite

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

Privacy policy