2016-05-23 13 views
0

Ich versuche, den aktiven Link anzuzeigen, mit einem dreieckigen CSS "Ausschnitt" (das Dreieck ist aus dem weißen Header ausgeschnitten.Layer div mit css Form Ausschnitt über ein div mit bg Farbe

http://codepen.io/Goatsy/pen/xVvRmZ

/* 
.container { 
    width: 1200px; 
} 
*/ 

Wie kann ich „ausgeschnitten“ das rote Dreieck sowohl aus dem enthaltenen Header und voller Breite Hintergrund (rot) blockieren? ich brauche das Dreieck ausgeschnitten zu belichten zugrunde liegenden Foto:

Die Kopfzeile funktioniert gut, aber sobald der rote Block voller Breite auf die Hintergrundebene Kopfzeile angewendet wird, wird der Dreiecksausschnitt "ausgefüllt".

The triangle cut out is not possible when there's a full-width colored background block.

UPDATE:

habe ich eine Flexbox innerhalb eines Flexbox. Leider ist der enthaltene Header nicht exakt 1200px, und dies wird schwierig auf das gesamte Layout anzuwenden sein.

http://codepen.io/Goatsy/pen/xVvRmZ

.wrapper-whole { 
    display: flex; 
    flex-direction: row; 
    height: 134px; 
    margin: auto; 
} 
.flexy { 
    background: #f00; 
    flex: 2; 
    height: 134px; 
} 
.wrapper { /* wraps contained header navbar */ 
    display: flex; 
    flex-direction: row; 
    height: 134px; 
    border-left: 15px solid #fff; 
    border-right: 15px solid #fff; 
    max-width: 1200px; 
    margin: auto; 
    flex: 6; 
} 

Antwort

0

Anstatt es aus einem Hintergrund zu schneiden, y Sie können die Illusion eines Hintergrunds erzeugen, indem Sie rote Elemente auf jeder Seite des weißen Headers mit: before und: after pseudo-elements erstellen.

In http://codepen.io/anon/pen/MyNpdX, habe ich die folgende CSS:

.wrapper { 
    /* the stuff that was already here */ 
    position: relative; 
} 

.wrapper:after, .wrapper:before{ 
    content: ""; 
    background-color: #f00; 
    width: 4000px; 
    position: absolute; 
    height: 134px; 
    top: 0; 
} 
.wrapper:before{ 
    margin-right: 15px; 
    right: 100%; 
} 
.wrapper:after{ 
    left: 100%; 
    margin-left: 15px; 
} 
+0

ja - du hast es! Danke. Genau das möchte ich erreichen. – Goatsy

0

Zu viele Fragen:
lassen Sie mich versuchen, diejenigen zu beantworten, die ich verstanden habe. Ich werde diese Antwort Bearbeitung behalten, wie ich gehen:

  1. zu enthalten etwas: Sie folgende Mutter div
.parent { 
    max-width: 1200px; 
    overflow: hidden; 
} 

auf diese Weise ein Kind rot div haben kann, würde nicht außerhalb der Eltern-Constraint erscheinen.

  1. Sie CSS- Dreiecke wie erreichen können:
.arrow-up { 
    width: 0; 
    height: 0; 
    border-left: 15px solid transparent; 
    border-right: 15px solid transparent; 

    border-bottom: 15px solid black; 
} 
<div class="arrow-up"></div> 

ps: du bist so weit hinter dem Layout codepen ist in Frage, dass es schwierig ist, das Problem hands-on zu beheben

+0

hallo - ich einfach auf das Dreieck ausgeschnitten versuchen. Ich habe es schon ausgeschnitten, aber wenn ich das "rote" bg anwende, bedeckt es das Dreieck. siehe aktualisierter CodePen. – Goatsy

+0

meinst du ein transparentes Dreieck zu haben? Verwende 'background: transparent;' oder 'opacity: 0;'. Auch über den roten Block. Warum nicht 2, 1 auf jeder Seite und frei in der Mitte (so dass es nicht das Dreieck abdecken). Eine Arbeit um (nicht sicher, ob es auf Windows ie7- funktioniert), wäre die Verwendung von linearen Gradienten. hart Übergang von Rot zu Transparent zu Rot. Sie können transparent mit rgba erreichen (255,255,255,0); // letzter Wert = Opazität. – warkentien2

+0

Warten. Sie haben eine solide weiße Navigationsleiste und möchten ein Dreieck ausschneiden? Nicht möglich. Sie können eine bereits ausgeschnittene (mehrere Dreiecke fehlen) Navigationsleiste erstellen und 3/4 mit Weiß und 1/4 mit Rot abdecken. Oder: Sie können das Hintergrundbild zweimal laden (einmal innerhalb des Dreiecks, un schiefe/drehen oder was auch immer Sie für das Dreieck getan haben) und das Bild mit einer komplexen $ (window) .offset Berechnung auf JavaScript positionieren. – warkentien2

0

Platz die enthaltene Flexbox Header, innerhalb eines anderen Flexbox.

Platzieren Sie einen (roten) Block links vom Header und einen (roten) Block rechts.

erstellen max-width für Weißkopf:

@media screen and (min-width: 480px) { 
    .wrapper { /* wraps contained header navbar */ 
    min-width: 1200px; 
    } 
} 

http://codepen.io/Goatsy/pen/xVvdKN

+0

Froh, dass du jetzt zwei Möglichkeiten hast, es zu tun. :) Nur FYI, ich sehe derzeit eine unerwartete Lücke in FF, falls Sie nicht bewusst waren http://i.imgur.com/uTeZxnR.png –

+0

Ja - ich sehe es auch, wenn ich Zoom auf 110%. Hmm ...: \ – Goatsy

+0

Ich denke ich habe es herausgefunden. Die Browser berechnen die Texthöhe unterschiedlich. Wenn Sie explizit '.box {line-height: 23px; } ', scheinen sie gleich zu funktionieren (oder Sie können es mit der Schriftgröße (20px) abgleichen und Ihren #test anpassen: vor und: nach oberen Werten). (Obwohl das das Zoom-Problem anscheinend nicht vollständig behebt, wahrscheinlich, da die px-Werte mit Prozentsätzen in Konflikt stehen, aber ich lasse Sie von hier aus spielen.) –