Foros del Web » Creando para Internet » CSS »

Hacer un div con forma

Estas en el tema de Hacer un div con forma en el foro de CSS en Foros del Web. Hola, Necesito crear un div con una forma determinada para poder poner contenido en su interior pero en todas partes lo que veo es que ...
  #1 (permalink)  
Antiguo 19/11/2017, 05:35
 
Fecha de Ingreso: abril-2003
Ubicación: Valencia
Mensajes: 223
Antigüedad: 21 años
Puntos: 7
Hacer un div con forma

Hola,

Necesito crear un div con una forma determinada para poder poner contenido en su interior pero en todas partes lo que veo es que utilizan bordes para hacer toda la forma...
Código:
<style>
#box {
	border-left: 200px solid black;
	border-bottom: 50px solid transparent;
	width: 0;
	height: 100px;
</style>
<div id="box"></div>
}
¿Hay alguna forma para que obtener lo mismo pero con un div "hueco" y borde de 2px?

La forma basicamente sería:
- Partiendo de un rectangulo de 200px de ancho y 100 de alto, hacer que la esquina izquierda-bajo baje 50px.

Gracias y un saludo
  #2 (permalink)  
Antiguo 19/11/2017, 13:16
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Hacer un div con forma

No entiendo que figura buscas? puedes poner link a una foto que muestre el resultado deseado?
  #3 (permalink)  
Antiguo 19/11/2017, 16:11
 
Fecha de Ingreso: abril-2003
Ubicación: Valencia
Mensajes: 223
Antigüedad: 21 años
Puntos: 7
Respuesta: Hacer un div con forma

Hola,

Estoy buscando como hacer divs con esa forma...

Con un borde de 2px y un fondo que pueda ser verde o una imagen cualquiera...

Gracias
  #4 (permalink)  
Antiguo 19/11/2017, 16:32
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Hacer un div con forma

Solo debes jugar un poco con los estilos y propiedades, no siempre se puede solo con bordes, para tu caso mira este ejemplo que te pongo.



Ignora la pestaña de JS, no se como quitarla

Última edición por ArturoGallegos; 19/11/2017 a las 16:39
  #5 (permalink)  
Antiguo 20/11/2017, 17:31
Avatar de 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
  #6 (permalink)  
Antiguo 20/11/2017, 17:33
Avatar de 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

Etiquetas: forma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:01.