2012-06-04 21 views

Respuesta

10

Aquí está mi solución, usando las formas de CSS de Chris Coyier.

http://jsfiddle.net/dDejan/XSs9L/

4 divs adicionales se insertan a través de JavaScript (bueno, en realidad jQuery) para cada uno de los contenedores que se desea en forma de esta manera. Estos divs están posicionados absolutamente en las esquinas de su padre, y están decoradas en consecuencia como se describe en el enlace publicado por Sven Bieder

+0

Se puede hacer con un solo elemento adicional –

+1

Es bueno saber @VladimirStarkov, gracias por ese comentario perspicaz :) – dDejan

3

Puede componer esta usando con posición absoluta :before y :after elementos usando la técnica de CSS triangles.

<div class="box"></div> 

css:

.box { 
    background-color:#2020ff; 
    height:50px; 
    width:50px; 
    position:relative 
} 

.box:after { 
    content:" "; 
    width: 0; 
    height: 0; 
    border-top: 10px solid #ffffff; 
    border-bottom: 10px solid transparent; 
    border-right:10px solid #ffffff; 
    position:absolute; 
    top:-9px; 
    right:0px; 

} 
+0

Esto suena como un buen punto de partida, se preocupan de compartir código de ejemplo ? – zehelvion

+0

Esto se ve bien, pero ¿podría explicar el código? No entiendo completamente cómo funciona? – zehelvion

+1

Es un viejo truco de hacer un triángulo en la esquina de un borde. En este caso, es un triángulo blanco que cubre una parte de la caja azul. Puede editar la configuración en: después para ver cómo funciona. Use otro con: antes para cubrir la esquina superior izquierda. Así es como funciona: http://stackoverflow.com/questions/7073484/how-does-this-css-triangle-shape-work –

21

vistazo aquí. Allí encontrará todo lo que necesita:

http://css-tricks.com/examples/ShapesOfCSS/

Editar En caso de que el enlace se perdieron:

CSS

#octagon { 
    width: 100px; 
    height: 100px; 
    background: red; 
    position: relative; 
} 

#octagon:before { 
    content: ""; 
    position: absolute; 
    top: 0; left: 0; 
    border-bottom: 29px solid red; 
    border-left: 29px solid #eee; 
    border-right: 29px solid #eee; 
    width: 42px; height: 0; 
} 

#octagon:after { 
    content: ""; 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    border-top: 29px solid red; 
    border-left: 29px solid #eee; 
    border-right: 29px solid #eee; 
    width: 42px; 
    height: 0; 
} 
+0

Sí, tienes razón, lo he cambiado –

+0

Pero no has sido aceptado responde ahora. Vergüenza. La suya es mejor. –

+0

No hay problema. Cuando la otra respuesta funciona mejor para él, está bien. Al final se trata de ayudar a las personas y no de quién es aceptado. –

1

box { 
 
    background-color: transparent; 
 
    position: fixed; 
 
    width: 300px; 
 
    height: 300px; 
 
} 
 
svg { 
 
    width: 300px; 
 
    height: 300px; 
 
} 
 
polygon { 
 
    visibility: visible; 
 
    background: black; 
 
    stroke: white; 
 
}
<box> 
 
    <svg> 
 
    <polygon points="0 250, 50 300, 300 300, 300 50, 250 0, 0 0" /> 
 
    </svg> 
 
</box>

Cuestiones relacionadas