Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Centrar elemento verticalmente

Estas en el tema de Centrar elemento verticalmente en el foro de Frameworks JS en Foros del Web. Hola, estoy intentando centrar un elemento H3 verticalmente en su contenedor padre que es un div. Para ello estoy trabajando este código: Código PHP: var  ...
  #1 (permalink)  
Antiguo 11/03/2011, 03:51
 
Fecha de Ingreso: octubre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 3
Centrar elemento verticalmente

Hola, estoy intentando centrar un elemento H3 verticalmente en su contenedor padre que es un div. Para ello estoy trabajando este código:

Código PHP:
var wrapper = $(".work-caption");
        var 
theItem =$(".work-caption h3");
        var 
contHeight=$(wrapper).height();
        var 
contMiddle=contHeight/2;
        var 
titleMiddle=$(".work-caption h3").height()/2;
        var 
theMiddle=contMiddle-titleMiddle;
        $(
".work-caption h3").each(function(){
            if(
contHeight>$(this).height()){ //vertical
            
$(this).css('margin-top',theMiddle);
        } else {
            $(
this).css('margin-top','0');
        }
            
            });
        
alert(contHeight);
        
alert(contMiddle);
        
alert(theMiddle); 
El caso es que así solo consigo centrar verticalmente el primero. Pero no el resto, alguien podría decirme cómo hacer para que recoja el tamaño de todos los h3 y me los centre todos, no solo el primero?

Muchas gracias!!
  #2 (permalink)  
Antiguo 11/03/2011, 08:23
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Centrar elemento verticalmente

por q no te evitas problemas y trabajas con tablas y su "valign" ????
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
  #3 (permalink)  
Antiguo 11/03/2011, 09:33
 
Fecha de Ingreso: octubre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 3
Respuesta: Centrar elemento verticalmente

Lo siento Killer, pero eso sí que sería un problema. Trato de trabajar del modo más semantico posible y desde luego trabajar con tablas en este contexto no lo es. Las tablas para su cometido.

Además, a través de CSS es posible hacer comportarse al elemento padre como si fuera una tabla, pero tampoco me sirve por una cuestión de posicionamiento de los elementos. De modo que necesito realizar esto a través de jquery. Pero no consigo encontrar una función que lo realice correctamente.

Seguro que alguien ha utilizado algo similar antes, no??
  #4 (permalink)  
Antiguo 11/03/2011, 11:30
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Centrar elemento verticalmente

el problema es que usas margin, lo ideal seria usar capas relativas o absolutas.

cuando aplicas margin a diversos objetos en un contenedor suelen solaparse los margenes superiores e inferiores adyacentes, para obtener el mismo margen y así tener elementos con el mismo espaciado, esto no ocurre en el caso del relleno o padding.

ejemplo padding vs margin:

fuente: http://librosweb.es/css/capitulo4/margen_y_relleno.html
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 11/03/2011 a las 11:36
  #5 (permalink)  
Antiguo 11/03/2011, 12:14
 
Fecha de Ingreso: octubre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 3
Respuesta: Centrar elemento verticalmente

Hola mayco,

si funcionar funciona tal cual, de hecho el primer elemento h3 contenido en el primer div se centra correctamente en función de su height, pero el resto ya no.

Tengo la siguiente estructura en HTML:

Código PHP:
<li class="work-item graphic ">
                        <
figure><a href="#" title="SEO KEYWORDS"><img src="images/samples/work-01.jpg" width="160" height="160" alt="Banner for CSNYC" /></a></figure>
                        <
div class="work-caption">
                            <
h3><class="caption-title zoom" href="images/samples/works-big/illustrativelettering_880.png" rel="graphic-gallery" title="Work for NY">Banner illustration for Crative Studios NYC</a></h3>
                        </
div>
                    </
li
Y lo siguiente en jquery:

Código PHP:
var wrapper = $(".work-caption");
        var 
theItem =$(".work-caption h3");
        var 
contHeight=$(wrapper).height();
        var 
contMiddle=contHeight/2;
        var 
titleMiddle=$(".work-caption h3").height()/2;
        var 
theMiddle=contMiddle-titleMiddle;
        $(
".work-caption h3").each(function(){
            if(
contHeight>$(this).height()){ //vertical
            
$(this).css('margin-top',theMiddle);
        } else {
            $(
this).css('margin-top','0');
        }
            
            });
        
alert(contHeight);
        
alert(contMiddle);
        
alert(theMiddle); 
Con esta función, como digo, consigo centrar solo el primero de los h3 y necesito que lo haga en todos, tengo uno por cada trabajo en el portfolio. Unos 45-50 items, entonces mi duda es acerca de la función de jquery.

Cómo puedo matizarla para que se aplique a todos.

Muchas gracias de todos modos!! :)
  #6 (permalink)  
Antiguo 12/03/2011, 19:12
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: Centrar elemento verticalmente

podrías ahorrarte código trabajando solo con css, el código que te pongo abajo es para alinear un elemento verticalmente.

Código CSS:
Ver original
  1. .contentHeader{font:12px Verdana; height:30px; line-height:30px; border:solid 1px #000; vertical-align:middle;}//el borde es para que veas que si se alinea verticalmente.


Código HTML:
Ver original
  1. <div class="contentHeader">
  2.     <h3>Título</h3>
  3. </div>
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #7 (permalink)  
Antiguo 23/03/2011, 11:36
 
Fecha de Ingreso: octubre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 3
Respuesta: Centrar elemento verticalmente

Lo siento mucho, pero este método no sirve para contenido dinámico. Ten en cuenta que cada uno de esos h3 van a tener un height diferente dependiendo de su contenido. Unas veces tendrá una línea, otras dos, tres...con lo cual un alto (height) diferente.

No consigo cerrar este asunto y me urge mucho, nadie conoce un método que funcione?

El código que estoy usando estoy casi seguro que funcionaría si la sintaxis fuera correcta, creo que está cerca. Si alguien pudiera echarle un vistazo lo agradecería mucho!

Gracias!
  #8 (permalink)  
Antiguo 25/03/2011, 07:24
Avatar de tredio  
Fecha de Ingreso: noviembre-2008
Ubicación: Carabobo
Mensajes: 466
Antigüedad: 16 años
Puntos: 66
Respuesta: Centrar elemento verticalmente

ok le heche un ojo a tu codigo, intenta asi:

Código CSS:
Ver original
  1. <style>
  2.     .work-caption{font:12px Verdana; vertical-align:middle;}
  3.     .work-caption h3{margin:0; padding:0;}
  4. </style>

Código Javascript:
Ver original
  1. <script>
  2. $(document).ready(function(){
  3.     $(".work-caption").each(function(){
  4.         var heigth = $(this).height();
  5.         $(this).css({heith:height, lineHeigth:height;});
  6.     });
  7. });
  8. </script>

no estoy seguro si funcione asi como esta por que no se como tienes estructurado tu css, pero pienso que es mas facil si lo haces usando line-heigth y vertical-align. saludos.
__________________
Extension Google Chrome
dar las gracias no cuesta nada :D
  #9 (permalink)  
Antiguo 28/03/2011, 11:15
 
Fecha de Ingreso: octubre-2006
Mensajes: 199
Antigüedad: 18 años
Puntos: 3
Respuesta: Centrar elemento verticalmente

Hola trejido. Muchas gracias por tu respuesta, pero ya conseguí solucionarlo con estas correcciones sobre el código original de jQuery. El problema estaba en que en lugar de tomar los divs padres tomaba los elementos h3 directamente. De esta form sí funciona, espero que le sirva al alguien:


Código PHP:
                var wrapper = $(".work-caption");
        var 
theItem =$(".work-caption h3");
        var 
contHeight=$(wrapper).height();
        var 
contMiddle=contHeight/2;
        var 
titleMiddle=$(".work-caption h3").height()/2;
        var 
theMiddle=contMiddle-titleMiddle;

        $(
'.work-caption').each(function(i) {
            var 
wh = $(this).height();
            var 
ih = $('h3'this).height();
            
            if (
wh ih) {
            $(
'h3'this).css('margin-top', (wh-ih)/'px');
            } else {
            $(
'h3'this).css('margin-top',0);
            }
        }); 
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 14:12.