;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Vestidos de verão: veja modelos para driblar o calor sem perder a elegância

Jessica Arruda

Colaboração para Universa

12/02/2019 04h00

Com as temperaturas lá em cima, nada melhor que um vestido fresco e confortável, que transite por diversos ambientes e deixe a pele respirar. Na estação quente, os modelitos com tecidos naturais e leves ganham espaço.

Algumas tendências são certeiras para este verão: vestidos longos de linho no estilo "regatão", modelos listrados, com decote V e tons vibrantes, como o amarelo. Também estão em alta peças inspiradas em décadas adas -- como a modelagem envelope, versões com botões frontais ou decote ombro a ombro, segundo o apresentador e stylist Arlindo Grund. Inspire-se em looks com as principais apostas:

1. Vestido-envelope

O modelo transado aparece com babados, estampas minimalistas ou em cores vibrantes. "A modelagem, mais próxima ao corpo no tronco e evasé nas pernas, é superdemocrática", diz Arlindo Grund. Mulheres muito magras ou plus size podem marcar a cintura, com cinto colorido ou faixa do mesmo tecido.

2. Com decote ombro a ombro

O conhecido "ciganinha" ressalta a feminilidade, destacando os ombros e o colo de maneira despretensiosa e sexy ao mesmo tempo.

3. Com botões frontais

Os botões dão a impressão de alongar a silhueta, pois formam uma linha vertical bem visível que concentra toda a atenção. Se escolher um modelo com modelagem ampla, tente usá-lo com cinto para desenhar o corpo.

4. Salopete

Direto dos anos 90, a peça reaparece e é perfeita para o calor -- com cropped por baixo ou camiseta estilosa. Informal, a salopete deve ficar restrita aos momentos de lazer.

5. Mídi com fenda

Com fendas, os vestidos com comprimento mídi ficam ainda mais bacanas para refrescar nos dias mais quentes. Podem ser vistos em modelos como o slip dress, bem ao estilo camisola, e também com detalhes, como babados, na lateral. Para um visual mais fatal, combine-os com sandálias finas de salto. Tênis, rasteirinhas e mules deixam a produção com ar mais casual.

6. Bandeau

O bandeau marca forte presença nas redes sociais das fashionistas neste verão. São tops com nozinho na frente que deixam a barriga de fora, normalmente utilizados com saia na mesma tonalidade (ou estampa) -- e que dão a sensação de uma peça só. Há versões em peça única, que realmente são vestidos, frescos e confortáveis para os dias de calor.

Tecidos fresquinhos ajudam a espantar o calor

Na hora de escolher o modelo, preste atenção na etiqueta: prefira peças feitas de tecidos leves e fluidos, como viscose e malha, e as tramas naturais, como linho e algodão. "Esses materiais permitem melhor a transpiração, garantindo conforto nos dias mais quentes, independentemente do comprimento", afirma a consultora de imagem Rachel Toyama.

Depois, fique de olho nas cores: tons escuros absorvem mais luz e esquentam mais. Tonalidades claras ou neutras, como o branco, ajudam a aliviar o calor. E, por último, a modelagem. "Vestidos mais soltinhos, comprimento curto, recortes estratégicos e fendas facilitam a agem de ar e ajudam a amenizar o desconforto térmico", garante Rachel.