Foros del Web » Creando para Internet » CSS »

Parte siempre visible

Estas en el tema de Parte siempre visible en el foro de CSS en Foros del Web. Buenas, no tengo claro si debería postear en el foro de jquery o éste. He visto en una web un detalle y no sé como ...
  #1 (permalink)  
Antiguo 06/02/2017, 08:53
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 10 meses
Puntos: 4
Parte siempre visible

Buenas, no tengo claro si debería postear en el foro de jquery o éste.
He visto en una web un detalle y no sé como implementarlo.
Al hacer un scroll vertical, en la parte superior queda una parte fija y la otra desaparece, es decir, inicialmente aparece lo siguiente:



Y al hacer scroll, quisiera que sólo apareciera esto, reduciendo un poco el tamaño, y visualizando, de forma más sencilla, la parte superior, quedando así:



Cómo se trabaja esto?
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #2 (permalink)  
Antiguo 06/02/2017, 23:17
Avatar de AngelKrak  
Fecha de Ingreso: noviembre-2014
Mensajes: 917
Antigüedad: 10 años
Puntos: 91
Respuesta: Parte siempre visible

eso puedes hacerlo con solo CSS
solo usa las Media Queries, si no sabes buscalo en google encontraras mucha informacion sobre eso ;)
  #3 (permalink)  
Antiguo 07/02/2017, 07:36
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 10 meses
Puntos: 4
Respuesta: Parte siempre visible

Gracias AngelKrak, jamás he usado las media queries para controlar el scroll ni para cuando desaparece una parte de la pantalla. Siempre que las he usado ha sido para controlar el formato dependiendo del ancho de la pantalla. Por esto he preguntado.
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #4 (permalink)  
Antiguo 07/02/2017, 12:46
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 8 meses
Puntos: 1826
Respuesta: Parte siempre visible

Hum. Nop. Media queries no es lo adecuado para esto.

Este tipo de cosas es por detección de la altura a la que está el elemento con respecto del alto original de la página, por lo que hay que detectarlo con JavaScript.

Básicamente el JavaScript detecta que el scroll ya se realizó y entonces agrega un class nuevo al elemento (por ejemplo header).

En ese Header con un class nuevo ahora se aplican estilos diferentes.

Para que tengan transición puedes jugar por ejemplo "colapsando" los elementos cambiando la altura, y haciendo transiciones css.

Una librería que en especial me gusta es esta: http://imakewebthings.com/waypoints/

Para que veas ejemplos: https://www.google.com.mx/search?q=w...ts+animate+css

En estos casos están usando una librería llamada animate.css pero el concepto es lo que comento arriba. Agregar un class. Para lo de "siempre visible" recuerda agregar en ese class nuevo un position=fixed.
  #5 (permalink)  
Antiguo 08/02/2017, 11:59
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Respuesta: Parte siempre visible

Para futuras referencias, ya algunos navegadores han implementado un nuevo valor para el atributo de posición.

Código CSS:
Ver original
  1. position: sticky

Que hace eso mismo que preguntas.

Por lo pronto, se queda atrás el de siempre, que por mucho nombre que cambien sigue igual.

Aquí el borrador de la W3C: https://drafts.csswg.org/css-positio...osition-sticky
__________________
(:
  #6 (permalink)  
Antiguo 08/02/2017, 17:15
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 8 meses
Puntos: 1826
Respuesta: Parte siempre visible

Aunque el sticky conservará la posición todavía hace falta un nuevo atributo por ejemplo para cambiarle el tamaño a "Logo" en el ejemplo. :o)
  #7 (permalink)  
Antiguo 09/02/2017, 15:32
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 9 años
Puntos: 86
Respuesta: Parte siempre visible

Hay que usar javascript, pero es un poco exagerado usar una librería. Probemos con javascript nativo
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="es-es">
  3.     <head>
  4.         <title></title>
  5.         <meta charset="utf-8">
  6.         <meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1">
  7.         <style>
  8.             * {
  9.                 margin: 0;
  10.                 border: none;
  11.                 position: relative;
  12.             }
  13.  
  14.             html {
  15.                 height: 100%;
  16.             }
  17.  
  18.             body {
  19.                 width: 100%;
  20.                 height: 100%;
  21.             }
  22.  
  23.             #container {
  24.                 height: 1000px;
  25.             }
  26.  
  27.             .header {
  28.                 display: -webkit-flex;
  29.                 display: flex;
  30.             }
  31.  
  32.             .logo {
  33.                 width: 200px;
  34.                 background: red;
  35.             }
  36.  
  37.             .flex-column {
  38.                 -webkit-flex: 1;
  39.                 flex: 1;
  40.                 background: yellow;
  41.             }
  42.  
  43.             section {
  44.                 background: pink;
  45.             }
  46.  
  47.             section ul {
  48.                 list-style: none;
  49.                 margin: 0;
  50.             }
  51.  
  52.             .ocultar {
  53.                 height: 0;
  54.             }
  55.         </style>
  56.         <script>
  57.             function fijar(obj) {
  58.  
  59.                 this.header = obj.header;
  60.                 this.ocultar = obj.ocultar;
  61.                 this.ocultarHeight = obj.ocultar === null ? 0 : obj.ocultar.offsetHeight;
  62.                 this.posElem = (obj.header.offsetTop + this.ocultarHeight)
  63.                 this.flag = true;
  64.                 var _this = this;
  65.                 window.addEventListener('scroll', function() { _this.scroll() });
  66.             }
  67.  
  68.             fijar.prototype.scroll = function() {
  69.  
  70.                 var scrollVertical = window.pageYOffset;
  71.  
  72.                 if (scrollVertical >= this.posElem && this.flag) {
  73.  
  74.                    this.header.style.position = 'fixed';
  75.                     //this.header.style.top = -this.ocultarHeight + 'px';
  76.                     //this.ocultar.style.display = 'none';
  77.                     this.ocultar.classList.toggle('ocultar');
  78.                     this.flag = false;
  79.  
  80.                 } else if (scrollVertical < this.posElem && !this.flag) {
  81.  
  82.                    this.header.style.position = 'static';
  83.                    //this.header.style.top = 0;
  84.                    //this.ocultar.style.display = 'block';
  85.                    this.ocultar.classList.toggle('ocultar');
  86.                    this.flag = true;
  87.                }
  88.  
  89.            }
  90.  
  91.  
  92.            document.addEventListener('DOMContentLoaded', function() {
  93.  
  94.                new fijar({
  95.                    header : document.querySelector('div.header'),
  96.                    ocultar : document.querySelector('#ocultar') // o null
  97.                })
  98.            });
  99.  
  100.        </script>
  101.     </head>
  102.     <body>
  103.  
  104.         <div id="container">
  105.             <div class="header">
  106.                 <div class="logo">LOGO</div>
  107.                 <div class="flex-column">
  108.                     <section id="ocultar">Teléfono y email</section>
  109.                     <section>
  110.                         <ul>
  111.                             <li>Opción 1</li>
  112.                             <li>Opción 2</li>
  113.                         </ul>
  114.                     </section>
  115.                 </div>
  116.             </div>
  117.         </div>
  118.  
  119.     </body>
  120. </html>
  #8 (permalink)  
Antiguo 14/02/2017, 06:27
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 10 meses
Puntos: 4
Respuesta: Parte siempre visible

Gracias por vuestras sugerencias aunque para mi un poco complicadas, pero con lo dicho he pensado lo siguiente.
Tengo creadas las dos capas, de inicio, la primera visible y la segunda no

Código CSS:
Ver original
  1. #capcalera{
  2.     display:block;
  3.     float:left;
  4.     width:100%;
  5.     background-color:#c2b89f;
  6.     height:89px;
  7.     margin:0
  8. }
  9. #capcalera2{
  10.     display:none;
  11.     float:left;
  12.     width:100%;
  13.     background-color:#c2b89f;
  14.     margin:0;
  15.     top:0;
  16.     position:fixed;
  17. }

Y al detectar el scroll, por jquery, escondo la primera y visualizo la segunda

Código Javascript:
Ver original
  1. $(document).on('scroll', function() {
  2.         if ($(document).scrollTop() > 0) {
  3.             $('#capcalera').fadeOut(500);
  4.             $('#capcalera2').fadeIn(500);
  5.         }
  6.         else {
  7.             $('#capcalera').fadeIn(500);
  8.             $('#capcalera2').fadeOut(500);
  9.         }  
  10.     });

Y funciona bien con un pero. Y es que la segunda, capcalera2, al añadir la propiedad position:fixed para que se quede fija a la parte superior, cambia el tamaño,
es decir:
- capcalera2 con position:fixed hace un ancho de 1920
- capcalera2 sin position:fixed hace un ancho de 1190
Y lo que es correcto, por diseño, es 1190.

Y la pregunta es, qué es lo que provoca el cambio de ancho de la capa?

Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Etiquetas: parte, siempre, visible
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:16.