Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/11/2017, 17:31
Avatar de g3kdigital
g3kdigital
 
Fecha de Ingreso: noviembre-2013
Ubicación: En mi apartamento en bogotá
Mensajes: 208
Antigüedad: 10 años, 5 meses
Puntos: 39
Respuesta: Hacer un div con forma

Hola, buenas.

La solución de Arturo Gallegos es una de las tantas soluciones posibles, yo propongo otras 2, porque la solución anterior depende de que el color de fondo sea igual al del borde del pseudo-elemento y si por ejemplo tuvieras un gradiente o una imagen de fondo, no podrías usarla o no se vería igual.

Con esto no quiero decir, que no te funcione o que la de Arturo este mal, solo que puedas ver que con border, no es la única forma de lograr los "bordes-dentados".

Propuesta 1: Skew

Lo malo de esta propuesta es que necesitas que el texto, siempre este en otro elemento html, como un span, porque el seudoelemento al estar con posición absoluta cubre al texto, así que:

Código HTML:
Ver original
  1. <div id="box1" class="box">
  2.   <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugit cupiditate, autem a ipsam provident similique alias incidunt fugiat quidem sed non. Omnis voluptatibus neque in. Temporibus ut omnis illum consequuntur?</span>
  3. </div>

Y en el css para la caja:

Código CSS:
Ver original
  1. .box {
  2.   display: inline-block;
  3.   margin: 2px;
  4.   margin-bottom: 70px;
  5.   padding: 10px;
  6.     width: 200px;
  7.   background-color: #f1f1f1;
  8.   position: relative;
  9.   text-align: right;
  10.   /*La magia del borde es con drop-shadow
  11.   *ya que la "sombra" cubre todo el elemento
  12.   * incluyendo al seudoelemento*/
  13.   filter:
  14.     drop-shadow(0px 2px 0px blue)
  15.     drop-shadow(2px 0px 0px blue)
  16.     drop-shadow(-2px 0px 0px blue)
  17.     drop-shadow(0px -2px 0px blue) ;
  18. }

Y el css para el seudolemento:

Código CSS:
Ver original
  1. .box::after{
  2.   content: '';
  3.   display: block;
  4.   position: absolute;
  5.   /*con inherit, el bloque tendrá siempre el mismo fondo que el padre*/
  6.   background: inherit;
  7.   width: 100%;
  8.   left: 0;
  9.   top: 100%;
  10. }
  11.  
  12. /*Yo separe esta parte, para no tener que volver
  13. * a usarlo en el ejemplo 2, pero fácilmente
  14. *pueden ir en un solo estilo.*/
  15.  
  16. /*Este elemento queda encima del texto*/
  17. #box1::after{
  18.   height:55px;
  19.   /*con esto lo obligamos a estar una capa abajo*/
  20.   z-index: 1;
  21.   transform:
  22.     skewY(15deg)
  23.     translateY(-50%);
  24. }
  25.  
  26. #box1 span{ position: relative; z-index: 2;  }
  27. /*con esto al texto lo mandamos una capa arriba*/

Propuesta 2: Clip-Path

Clip-path crea una máscara de forma sobre el elemento y solo hace visible lo que se "conecte" mediante las coordenadas, esto nos sirve muy bien para el siguiente ejemplo, donde no necesitamos el span:

Código HTML:
Ver original
  1. <div id="box2" class="box">
  2.   Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugit cupiditate, autem a ipsam provident similique alias incidunt fugiat quidem sed non. Omnis voluptatibus neque in. Temporibus ut omnis illum consequuntur?
  3. </div>

Y en el css, podemos repetir el css de la caja y del seudoelemento con la clase "box" y solo necesitamos manipular el estilo del pseudo-elemento:

Código CSS:
Ver original
  1. /*.box y .box::after
  2. * los dejamos tal cual el css ejemplo de arriba
  3. * solo modificamos la caja 2 con el ID #box2
  4. */
  5.  
  6. #box2::after{
  7.   height: 50px;  
  8.   /*En esta solución el corte lo logramos con mascaras de clip*/
  9.   clip-path: polygon(
  10.     0 0,
  11.     100% 0,
  12.     100% 100%
  13.   );  
  14. }

Para ver una versión demo en vivo, te anexo el pen: https://codepen.io/g3kdigital/pen/JOpmYG

Prueba a cambiar el color de fondo del body.
__________________
Puedes ser el tipo de persona que se amarga por lo inevitable o aceptar el reto de superarse siempre e ir a la par con el progreso.

WEB: G3K.co | codepen.io/g3kdigital