Foros del Web » Creando para Internet » CSS »

Intentando hacer triángulos en CSS

Estas en el tema de Intentando hacer triángulos en CSS en el foro de CSS en Foros del Web. Buenas tardes amigos, resulta que estoy haciendo un form y en él hay un textarea (que imita a un input, es decir, sólo tiene una ...
  #1 (permalink)  
Antiguo 23/12/2011, 09:07
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Intentando hacer triángulos en CSS

Buenas tardes amigos, resulta que estoy haciendo un form y en él hay un textarea (que imita a un input, es decir, sólo tiene una línea). Lo que quiero hacer es esto.
Entonces el textarea se quedaría debajo (en términos de profundidad) y por encima un submit para enviar el form, con la flecha hacia la izquierda. Estoy siguiendo, o eso creo, el "tutorial" que pusieron, pero no resulta
Ellos tienen una estructura diferente de la mía, yo tengo esto:
Código HTML:
Ver original
  1. <form id="logicarama" action="" method="POST">
  2.     <textarea id="proposition" class="ninecol last" rows="1"></textarea>
  3.     <input type="submit" id="generate" value="Generar" />
  4. </form>
Así que la analogía sería h2 - form y a - #generate, y por tanto puse el CSS así:
Código CSS:
Ver original
  1. textarea#proposition {
  2.             font:20px monospace;
  3.             resize:none;
  4.         }
  5.        
  6.         input#generate {
  7.             position:relative;
  8.             border-left:5px solid white;
  9.             padding:0 10px;
  10.             background:#A2D6EB;
  11.             color:black;
  12.         }
  13.        
  14.         form#logicarama {
  15.             height:30px;
  16.             padding:0 0 0 10px;
  17.             line-height:2;
  18.         }
  19.        
  20.         #generate:before,
  21.         #generate:after {
  22.             content: "";
  23.             position: absolute;
  24.             /* Pushed down half way, will get pulled back up half height of triangle
  25.                ensures centering if font-size or line-height changes */
  26.             top: 50%;
  27.             width: 0;
  28.             height: 0;
  29.         }
  30.        
  31.         #generate:before {
  32.             left: -12px;
  33.             /* Triangle */
  34.             border-top: 8px solid transparent;
  35.             border-bottom: 8px solid transparent;
  36.             border-right: 8px solid white;
  37.             /* Pull-up */
  38.             margin-top: -8px;
  39.         }
  40.        
  41.         #generate:after {
  42.             /* Smaller and different position triangle */
  43.             left: -5px;
  44.             border-top: 6px solid transparent;
  45.             border-bottom: 6px solid transparent;
  46.             border-right: 6px solid #111;
  47.             margin-top: -6px;
  48.         }
Pero nada, se queda como un submit normal y el border-left de 5px blanco.
¿Qué estoy haciendo mal? He mirado en el CSS del ejemplo pero no veo nada que se me haya pasado
Espero que me puedan ayudar.
Saludos y gracias de antemano :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 23/12/2011, 11:15
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Intentando hacer triángulos en CSS

Te muestro que uso para crear flechas

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>Flechas con css</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9.  
  10. /* estilos comunes */
  11. .flecha-arriba,
  12. .flecha-izquierda,
  13. .flecha-derecha,
  14. .flecha-abajo {
  15.  border-style: dashed;
  16.  border-color: transparent;
  17.  border-width: 0.53em;
  18.  display: -moz-inline-box;
  19.  display: inline-block;
  20.  /* manejas el tamaño de la fuente para el tamaño de las flechas */
  21.  font-size: 50px;
  22.  height: 0;
  23.  line-height: 0;
  24.  position: relative;
  25.  vertical-align: middle;
  26.  width: 0;
  27. }
  28.  
  29. /* bordes para las cuatro direcciones */
  30. .flecha-arriba {
  31.  border-bottom-width: 1em;
  32.  border-bottom-style: solid;
  33.  border-bottom-color: #005100;
  34.  bottom: 0.25em;
  35. }
  36. .flecha-izquierda {
  37.  border-right-width: 1em;
  38.  border-right-style: solid;
  39.  border-right-color: #005100;
  40.  right: 0.25em;
  41. }
  42. .flecha-derecha {
  43.  border-left-width: 1em;
  44.  border-left-style: solid;
  45.  border-left-color: #005100;
  46.  left: 0.25em;
  47. }
  48.  .flecha-abajo {
  49.  border-top-width: 1em;
  50.  border-top-style: solid;
  51.  border-top-color: #005100;
  52.  top: 0.25em;
  53. }
  54.  
  55. /* otro método, hay que aplicarlo sobre un elemento de bloque (div) */
  56. .flecha-multi {
  57.  border-color: red green blue orange;
  58.  border-style:solid;
  59.  border-width:20px;
  60.  width:0;
  61.  height:0;
  62. }
  63.  
  64. .flecha-multi-derecha {
  65.  border-color: transparent transparent transparent orange;
  66.  border-style:solid;
  67.  border-width:20px;
  68.  width:0;
  69.  height:0;
  70. }
  71.  
  72. .flecha-multi-arriba {
  73.  border-color: transparent transparent blue transparent;
  74.  border-style:solid;
  75.  border-width:20px;
  76.  width:0;
  77.  height:0;
  78. }
  79.  
  80.  
  81. input{
  82. background-color: transparent;
  83. color: transparent;
  84. }
  85. /*]]>*/
  86. </head>
  87.  
  88. <div>
  89. <p>Flechas</p>
  90. <span class="flecha-arriba"><!-- flecha --></span>
  91. <span class="flecha-izquierda"><!-- flecha --></span>
  92. <span class="flecha-derecha"><!-- flecha --></span>
  93. <span class="flecha-abajo"><!-- flecha --></span>
  94.  
  95. <p>Input</p>
  96. <form action="x.php">
  97. <p><input type="submit" value="." class="flecha-derecha" /></p>
  98. </form>
  99.  
  100. </div>
  101.  
  102. <div>
  103. <p>Otro método<br /></p>
  104.  
  105. <div class="flecha-multi"><!-- flecha --></div>
  106. <br /><br />
  107. <div class="flecha-multi-derecha"><!-- flecha --></div>
  108. <br /><br />
  109. <div class="flecha-multi-arriba"><!-- flecha --></div>
  110.  
  111. <p>Input</p>
  112. <form action="x.php">
  113. <p><input type="submit" value="." class="flecha-multi-derecha" /></p>
  114. </form>
  115.  
  116. </div>
  117. </body>
  118. </html>

quizás te pueda orientar. No se bien cual es la idea del textarea que imite el input type text, y quizás pierda funcionalidad, pero aplicandole overflow:hidden; el scroll del textarea tambien desaparecería..
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 23/12/2011, 14:40
Colaborador
 
Fecha de Ingreso: junio-2007
Mensajes: 5.798
Antigüedad: 17 años, 5 meses
Puntos: 539
Respuesta: Intentando hacer triángulos en CSS

Pruebe a pisar los estilos por defecto del input (declarándolos explícitamente). Borde: none; (antes de borde izquierdo) tamaño de letra, fuente, etc para que cambie la apariencia.

Sobre las flechas "a lo adobe" de Chis Coyier, creo que su fracaso podría estar en que el input no genere (visiblemente) los pseudoelementos. Al menos yo no he podido hacerlos aparecer en una prueba rápida que hice.
Quedé intrigado. A ver si con algo de suerte puedo buscar info sobre el particular (y hallarla).
  #4 (permalink)  
Antiguo 24/12/2011, 14:13
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Intentando hacer triángulos en CSS

Cita:
Iniciado por emprear Ver Mensaje
Te muestro que uso para crear flechas
[...]
quizás te pueda orientar. No se bien cual es la idea del textarea que imite el input type text, y quizás pierda funcionalidad, pero aplicandole overflow:hidden; el scroll del textarea tambien desaparecería..
Saludos
Lo del textarea en vez del input supongo que lo acabaré cambiando, fui reduciendo el número de líneas hasta una y luego no cambié a input text
Había pensado en que las flechas fueran divs aparte, pero me parece más limpia la solución de css-tricks porque lo hace todo con CSS. De todas maneras si no me queda otra lo haré así, gracias por el aporte anyway :3

Cita:
Iniciado por kseso? Ver Mensaje
Pruebe a pisar los estilos por defecto del input (declarándolos explícitamente). Borde: none; (antes de borde izquierdo) tamaño de letra, fuente, etc para que cambie la apariencia.

Sobre las flechas "a lo adobe" de Chis Coyier, creo que su fracaso podría estar en que el input no genere (visiblemente) los pseudoelementos. Al menos yo no he podido hacerlos aparecer en una prueba rápida que hice.
Quedé intrigado. A ver si con algo de suerte puedo buscar info sobre el particular (y hallarla).
OH SHIT, pues podría ser eso. Realmente no me importaría cambiar el input por un link, porque aunque es un submit en realidad no hay que enviar nada, simplemente se genera un código desde JS; pero no me parece muy semántico De todas maneras voy a probar con un link en cuanto pueda, y si funciona y no me veo con ganas de romperme la cabeza lo dejaré así
Muchas gracias a los dos y feliz Navidad :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #5 (permalink)  
Antiguo 24/12/2011, 14:38
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Intentando hacer triángulos en CSS

te has planteado usar botón submit en lugar de input submit??
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 24/12/2011, 14:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Intentando hacer triángulos en CSS

@_cronos2
Cita:
Había pensado en que las flechas fueran divs aparte, pero me parece más limpia la solución de css-tricks porque lo hace todo con CSS
Pregunto?
Que parte de mi ejemplo usa algo más que CSS?
Por lo de usar divs?

Código CSS:
Ver original
  1. .flecha-multi-derecha {
  2.   border-color: transparent transparent transparent orange;
  3.   border-style:solid;
  4.   border-width:20px;
  5.   width:0;
  6.   height:0;
  7. }

Código HTML:
Ver original
  1. <div class="flecha-multi-derecha"><!-- flecha --></div>

y están los ejemplos para las otras orientaciones.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 24/12/2011, 15:37
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Intentando hacer triángulos en CSS

sólo he logrado que funcione en chrome, pero algo me dice que para ti eso no es un problema
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-Type" content="application/xhtml; charset=utf-8" />
<title></title>
<style type="text/css">
input#proposition {
font: 20px monospace;
resize: none;
border-width: 1px;
border-color: #A2D6EB;
border-style: solid;
padding: 0 15px 0 0;
background: #A2D6EB;
outline: none;
}

button#generate {
position: relative;
padding: 4px 10px;
background: #A2D6EB;
color: black;
left: 1px;
top: -3px;
border: none;
outline: none;
vertical-align: middle;
}

form#logicarama {
height:30px;
padding:0 0 0 10px;
line-height:2;
}

#generate:before, #generate:after {
content: "";
position: absolute;
/* Pushed down half way, will get pulled back up half height of triangle ensures centering if font-size or line-height changes */
top: 50%;
width: 0;
height: 0;
}

#generate:before {
left: -15px;
/* Triangle */
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 6px solid #FFF;
/* Pull-up */
margin-top: -5px;
}

#generate:after {
/* Smaller and different position triangle */
left: -5px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 6px solid #A2D6EB;
margin-top: -6px;
}
</style>
</head>
<body>

<form id="logicarama" action="" method="POST">
<input type="text" id="proposition" class="ninecol last" />
<button type="submit" id="generate">Generar</button>
</form>


</body>
</html>
ahora a "soportar" a la familia
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #8 (permalink)  
Antiguo 24/12/2011, 18:14
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Intentando hacer triángulos en CSS

bueno, estuve analizando el ejemplo en particular, y no solo la generación de las flechas

hice esto, que por lo pronto funciona en IE7+ (si la F12 de ie9 no me engaña), Chrome. FF, opera, Safari. Sirve con un input submit tanto como con un div.

Se puede optimizar, y habría que buscar corregir algun detalle con la alineación vertical de los textos del boton y del input text
Y el efecto hover, lo modifique un poco (me gustó más)
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9.  
  10. .contiene_input{
  11. padding: 0;
  12. margin: 0;
  13. border: none;  
  14. height: 26px;
  15. }
  16.  
  17. .contiene_input input{
  18. float:left;
  19. border: none;
  20. background-color:#3A6411;
  21. padding: 1px 2px 0px 2px;
  22. margin: 0;
  23. width: 200px;
  24. height: 25px;
  25. }
  26.  
  27. .contiene_input div{
  28. float:left;
  29. background-color:#3A6411;
  30. padding: 0;
  31. margin: 0;
  32. height: 100%;
  33. }
  34.  
  35. .flecha-izq {
  36.  border-color: transparent white transparent transparent;
  37.  border-style:solid;
  38.  border-width:5px;
  39.  margin-top: 7px;
  40.  width:0;
  41.  height:0;
  42.  display: inline-block;
  43. }
  44.  
  45. .ccolor {
  46. background-color: #fff !important;
  47. }
  48. .f-tres {
  49. border-color: transparent #3A6411 transparent transparent !important;
  50. margin-left: -5px;
  51. clear: both;
  52. }
  53.  
  54. .f-dos {
  55. border-color: transparent red transparent transparent !important;
  56. margin-left: -5px;
  57. clear: both;
  58. }
  59.  
  60. div.texto {
  61. padding: 0 8px;
  62. background-color: red;
  63. }
  64.  
  65. input.texto {
  66. width: 80px;
  67. height: 26px;
  68. }
  69.  
  70. div.texto:hover, input.texto:hover{
  71. margin-left: -5px;
  72. cursor: pointer;
  73. }
  74.  
  75. /*]]>*/
  76. </head>
  77. <div>
  78. <p>Con un div</p>
  79. <div class="contiene_input">
  80. <input type="text" /><div><span class="flecha-izq"><!-- flecha --></span></div><div class="ccolor"><span class="flecha-izq f-dos"><!-- flecha --></span></div><div class="texto">texto</div>
  81.  
  82. </div>
  83.  
  84. <p>Con un input submit</p>
  85. <div class="contiene_input">
  86. <input type="text" /><div><span class="flecha-izq"><!-- flecha --></span></div><div class="ccolor"><span class="flecha-izq f-tres"><!-- flecha --></span></div><input type="submit" class="texto" value="procesar" />
  87. </div>
  88. </div>
  89. </body>
  90. </html>

Parto a la cena navideña/familiar
Un saludo y Feliz Navidad para todos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 30/12/2011, 09:19
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Intentando hacer triángulos en CSS

Cita:
Iniciado por emprear Ver Mensaje
@_cronos2

Pregunto?
Que parte de mi ejemplo usa algo más que CSS?
Por lo de usar divs?
Claro, hacerlo con :after y :before te libra de tener que poner tú los divs en el HTML, al fin y al cabo hacer flechas debería ser algo que se pudiera hacer única y exclusivamente con CSS, sin necesidad de divs auxiliares. O así lo veo yo

Cita:
Iniciado por IsaBelM Ver Mensaje
sólo he logrado que funcione en chrome, pero algo me dice que para ti eso no es un problema

ahora a "soportar" a la familia
Bueh, para una vez que necesito IE7+ Gracias anyway :)
Al final he usado el método de @emprear Pasé su código a este jsfiddle para poder verlo ordenado
Y mi ejemplo ha quedado así (más o menos, en realidad el ejemplo no está completo porque falta un poco de CSS para que se vea del todo bien, pero básicamente así es como quedó).
Saludos y gracias por todo :D
Edit: Wehe, mensaje 2001!
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #10 (permalink)  
Antiguo 30/12/2011, 16:59
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 10 meses
Puntos: 306
Respuesta: Intentando hacer triángulos en CSS

Hola
Me tome el atrevimiento de modificar un poquito el código de emprear, solo para que las flechita penetrara o se solapara a la parte verde en el ejemplo del div.
http://jsfiddle.net/c2am/BWCWk/
Saludos
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #11 (permalink)  
Antiguo 30/12/2011, 17:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Intentando hacer triángulos en CSS

Cita:
Iniciado por C2am Ver Mensaje
Hola
Me tome el atrevimiento de modificar un poquito el código de emprear, solo para que las flechita penetrara o se solapara a la parte verde en el ejemplo del div.
http://jsfiddle.net/c2am/BWCWk/
Saludos
C2am, atrevimiento ninguno, para eso está esto para mejorar si se puede. Todavía no analicé tu código, pero vi el resultado, muy bueno. esa es una de las mejoras que me quedó pendiente por hacerle, como vi que con el input me funcionaba, me puse vago y abandoné la investigación. Experimenta un poco cuando puedas con lo de la alineación vertical, del texto en los diferentes navegadores.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 02/01/2012, 08:07
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Intentando hacer triángulos en CSS

con un botón. aparte del efecto que añadió C2am, añadirle otro efecto. en funcionamiento
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
.controles *{
display: inline-block;
}

.controles [type=text] {
width: 210px;
height: 24px;
background-color: #CCC;
box-shadow: inset 0 25px 10px -10px rgba(255, 255, 255, 0.2);
padding: 0 2px;
margin: 0;
outline: none;
border: 0;
vertical-align: middle;
}

.controles .flecha-izq {
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 6px solid #FFF;
margin-left: -10px;
vertical-align: middle;
}

.controles .flechaYboton {
position: relative;
left: 5px;
}

.controles .flechaYboton .f-der {
margin-right: -4px;
border-right: 6px solid #A2D6EB;
}

.controles .flechaYboton [type=submit] {
background-color: #A2D6EB;
width: 79px;
height: 24px;
text-align: center;
font-weight: bold;
border: 0;
vertical-align: middle;
}

.controles .flechaYboton:hover{
margin-left: -5px;
}

.controles .flechaYboton:hover [type=submit] {
width: 84px;
background-color: #C5F0FF;
}

.controles .flechaYboton:hover .f-der {
border-right: 6px solid #C5F0FF;
}
</style>
</head>
<body>

<div class="controles">

<input type="text" value="" />

<span class="flecha-izq"></span>

<div class="flechaYboton">
<span class="flecha-izq f-der"></span>
<input type="submit" class="boton" value="Enviar" />
</div>

</div>

</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #13 (permalink)  
Antiguo 14/05/2012, 17:07
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Intentando hacer triángulos en CSS

Excelentes esos ejemplos.
Recién los veo.

Mientras leía, estuve por ponerme a "corregir" el solapamiento del último código de emprear, pero supuse que más abajo lo habían hecho. Y no me equivoqué. (Mejor, porque no me estaba saliendo).

Si no les molesta, y teniendo en cuenta que los dibujos son más de flecha que de triángulo además de ser botones, voy a linkear el tema a otro que tiene las palabras "flecha" y "botones" en el título, y que suele ser destino de búsqueda en gugl nada más que por eso, no porque el que puso sus ejemplos finales haya hecho gran cosa ( Botones tipicos con cabeza de flecha); así cuando lo vean van a pasar por aquí también.
Y viceversa.

Etiquetas: fondo
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 00:09.