БЕЗКОШТОВНА ДОСТАВКА ЗАМОВЛЕНЬ ВІД 4000₴
Додайте товари до списку бажань
0
Додайте товари до кошика

ЖІНОЧІ МАЙКИ

Фільтр
Сортування:
Відображення:

Популярні категорії: світшоти, штани, джемпери, сорочки, бомбери, денім, жилети, куртки, футболки, худі, шорти, плаття, сарафани, спідниці

Асортимент жіночих майок: обирайте під свій стиль

Жіноча майка — це одна з найфункціональніших речей у базовому гардеробі. Вона формує основу для образів у будь-якому стилі: від мінімалізму до експериментального casual. Простота дизайну майки дає свободу для модних експериментів, а лаконічність робить її доречною в будь-якій ситуації.

У колекції FROMUS зібрані жіночі майки на будь-який смак. Незалежно від кольору, довжини чи фасону, їх поєднує головне — зручна посадка та ретельно продуманий крій.

Серед моделей, які представлені в нашому каталозі:

  • Базові. Це класична модель, яка стане незамінною основою вашого повсякденного гардероба.
  • Спортивні. Більш вільного крою, зручні для активного відпочинку або домашніх справ.
  • Літні майки жіночі. Легкі, дихаючі моделі, створені спеціально для спекотної погоди.
  • Майки на тонких бретелях. Жіночні та витончені, добре поєднуються як із літнім одягом, так і з вечірніми образами.
  • Oversize майки. Трендовий вибір для тих, хто любить вільний силует і невимушені аутфіти.

У FROMUS ми створюємо одяг для жінок, який легко поєднується між собою — за стилем, кольором і фактурою. З нашого асортименту ви можете скласти цілісний базовий гардероб, де кожна річ матиме гармонійний вигляд.

Як правильно вибрати жіночу майку?

Ідеальна майка має бути практичною, якісною та відповідати вашим вподобанням — незалежно від події чи сезону. Щоб зробити вдалий вибір, врахуйте наступне:

  • Розмір. Звертайте увагу на посадку в області плечей, грудей і талії. Якщо вам подобається вільний крій або образ в стилі oversize — сміливо обирайте майку на розмір більшу. Для класичного силуету краще підійдуть моделі з помірною посадкою, які повторюють контури тіла, але не обмежують рухів.
  • Тип фігури. Орієнтуйтесь на особливості своєї фігури. Наприклад, фасони з акцентом на талії пасують власницям “пісочного годинника”, а вільні силуети красиво балансують пропорції фігури “груша” або “трикутник”.
  • Сезон. У літній період краще обирати бавовну або змішані матеріали з високим вмістом натуральних волокон. Такі тканини приємні до тіла, добре пропускають повітря та не створюють дискомфорту.
  • Колір. Світлі, однотонні моделі добре комбінуються з речами у гардеробі. Темні — більш практичні для щоденного носіння. Тоді як яскраві кольори — завжди варіант для акцентних образів.

З чим носити жіночі майки: базові ідеї для образів

Майка — справжній маст хев базового гардероба. Її головна перевага — універсальність і здатність легко вписатися в будь-який стиль.

  • Повсякденний образ. Біла базова жіноча майка, світлі джинси прямого крою та кросівки — ідеальний street style образ. У прохолодну погоду можна доповнити його джинсовою курткою або картатою сорочкою.
  • Романтичний аутфіт. Майка жіноча на тонких бретелях, легка спідниця міді, босоніжки та мінімалістичні прикраси — ідеальний варіант для побачення чи прогулянки.
  • Елегантний офісний стиль. Майка може чудово вписатися і в робочий гардероб. До класичного костюма у світлих тонах одягніть майку на широких бретелях або з квадратним вирізом. Доповніть образ лоферами та великою шкіряною сумкою.
  • Вечірній вихід. В такий аутфіт чудово впишеться майка топ на бретелях. Оберіть однотонну модель, додайте штани-палаццо з високою посадкою або спідницю міді. Прикраси з металевим блиском розставлять правильні акценти.

Чому варто купити майки жіночі в FROMUS

В основі бренду FROMUS — бажання створювати зручний та якісний одяг для реального життя. Кожна майка проходить шлях від ідеї до готового виробу з турботою про деталі.

Наші переваги:

  • Власне виробництво. Весь одяг ми виготовляємо самостійно, що дозволяє контролювати якість товарів на кожному етапі виробництва.
  • Унікальний дизайн. Ми не копіюємо, а створюємо власний, впізнаваний стиль, що відповідає сучасним тенденціям, але залишається поза часом.
  • Натуральні тканини. Обираємо лише перевірені матеріали — приємні до тіла, зносостійкі, які не втрачають форму навіть після багаторазового прання.
  • Доступна ціна. У нас легко майки жіночі купити за приємною ціною. Вартість моделей нерідко стартує від кількох сотень грн.
  • Швидка доставка по Україні. Усі замовлення опрацьовуються оперативно, щоб ви могли отримати бажану річ без затримок.

Ми дбаємо про вашу конфіденційність

Цей веб-сайт використовує файли cookie для маркетингу та статистичних цілей, а також для безпечної та оптимальної роботи сайту. Ви можете змінити це в налаштуваннях вашого браузера. Натисніть кнопку «Погодитися», щоб дати згоду на використання файлів cookie. Детальніше можна ознайомитися на сторінці Угода користувача.

Скопійовано!
Обирайте українську
✕
Знайомство з FROMUS
Даруємо -10% на перше замовлення
Створюйте свій ідеальний базовий гардероб з вигодою. Ваш промокод на першу покупку:
WELCOME10
Активуйте промокод у кошику. Діє лише сьогодні.
/* * FROMUS — FORCE JPG PRODUCT IMAGES v2 (PRIVATE TEST) * Purpose: force product imagery to use existing JPG files instead of WEBP. * Scope: product cards, product page gallery, recommendations/product sliders only. * Does NOT change layout/styles/banners/logo/UI. */ (() => { 'use strict'; const KEY = 'fromus_force_jpg_product_images_v2'; if (localStorage.getItem(KEY) !== '1') return; // Disable the first failed attempt so only one image experiment is active. try { localStorage.removeItem('fromus_force_jpg_product_images_v1'); } catch (_) {} const ROOT = 'fromus-force-jpg-v2'; document.documentElement.classList.add(ROOT); const PRODUCT_SCOPE = [ '.catalogCard', '.catalog-card', '.productsSlider', '.productsSlider-wrapper', '.product', '.product__grid', '.product__column--left', '.product-gallery', '.productGallery', '.product-photo', '.productPhoto', '.product-images', '.productImages', '.j-product-block' ].join(','); const probeCache = new Map(); const busy = new WeakSet(); function isProductNode(el) { if (!(el instanceof Element)) return false; return !!el.closest(PRODUCT_SCOPE); } function toJpg(url) { if (!url || typeof url !== 'string') return null; const s = url.trim().replace(/^['\"]|['\"]$/g, ''); if (!s || /^(data:|blob:)/i.test(s)) return null; if (!/\.webp(?=([?#]|$))/i.test(s)) return null; return s.replace(/\.webp(?=([?#]|$))/i, '.jpg'); } function probe(url) { if (probeCache.has(url)) return probeCache.get(url); const p = new Promise(resolve => { const img = new Image(); let done = false; const finish = ok => { if (done) return; done = true; resolve(ok); }; img.onload = () => finish(img.naturalWidth > 0 && img.naturalHeight > 0); img.onerror = () => finish(false); img.src = url; setTimeout(() => finish(false), 5000); }); probeCache.set(url, p); return p; } async function bestJpgFrom(...urls) { for (const raw of urls) { const jpg = toJpg(raw); if (jpg && await probe(jpg)) return jpg; } return null; } function srcsetUrls(raw) { if (!raw) return []; return raw.split(',').map(part => part.trim().split(/\s+/)[0]).filter(Boolean); } async function processImg(img) { if (!(img instanceof HTMLImageElement) || !isProductNode(img) || busy.has(img)) return; busy.add(img); try { const picture = img.closest('picture'); const sourceUrls = picture ? [...picture.querySelectorAll('source')].flatMap(s => [ ...srcsetUrls(s.getAttribute('srcset')), ...srcsetUrls(s.getAttribute('data-srcset')), s.getAttribute('src'), s.getAttribute('data-src') ]) : []; const candidates = [ img.currentSrc, img.getAttribute('src'), img.getAttribute('data-src'), img.getAttribute('data-original'), img.getAttribute('data-lazy'), ...srcsetUrls(img.getAttribute('srcset')), ...srcsetUrls(img.getAttribute('data-srcset')), ...sourceUrls ]; const jpg = await bestJpgFrom(...candidates); if (!jpg) return; // Completely neutralize picture/srcset selection so browser cannot pick WEBP again. if (picture) { picture.querySelectorAll('source').forEach(source => { source.removeAttribute('srcset'); source.removeAttribute('data-srcset'); source.removeAttribute('src'); source.removeAttribute('data-src'); if ((source.getAttribute('type') || '').toLowerCase().includes('webp')) { source.setAttribute('type', 'image/jpeg'); } }); } img.removeAttribute('srcset'); img.removeAttribute('data-srcset'); img.setAttribute('src', jpg); img.setAttribute('data-src', jpg); img.dataset.fromusForcedJpgV2 = '1'; } finally { busy.delete(img); } } async function processLink(a) { if (!(a instanceof HTMLAnchorElement) || !isProductNode(a) || busy.has(a)) return; const raw = a.getAttribute('href'); const jpg = toJpg(raw); if (!jpg) return; busy.add(a); try { if (await probe(jpg)) { a.setAttribute('href', jpg); a.dataset.fromusForcedJpgV2 = '1'; } } finally { busy.delete(a); } } function extractBgUrls(value) { if (!value || value === 'none') return []; const out = []; const re = /url\((['\"]?)(.*?)\1\)/gi; let m; while ((m = re.exec(value))) out.push(m[2]); return out; } async function processBackground(el) { if (!(el instanceof HTMLElement) || !isProductNode(el) || busy.has(el)) return; const inline = el.style.backgroundImage || ''; const computed = getComputedStyle(el).backgroundImage || ''; const urls = [...extractBgUrls(inline), ...extractBgUrls(computed)]; if (!urls.some(u => /\.webp(?=([?#]|$))/i.test(u))) return; const jpg = await bestJpgFrom(...urls); if (!jpg) return; busy.add(el); try { el.style.setProperty('background-image', `url("${jpg}")`, 'important'); el.dataset.fromusForcedJpgV2 = '1'; } finally { busy.delete(el); } } async function processDataImageAttrs(el) { if (!(el instanceof Element) || !isProductNode(el) || busy.has(el)) return; const attrs = [ 'data-image', 'data-img', 'data-photo', 'data-zoom', 'data-zoom-image', 'data-large', 'data-large-image', 'data-full', 'data-full-image' ]; for (const attr of attrs) { const raw = el.getAttribute(attr); const jpg = toJpg(raw); if (jpg && await probe(jpg)) el.setAttribute(attr, jpg); } } function processElement(el) { if (!(el instanceof Element)) return; if (el instanceof HTMLImageElement) processImg(el); if (el instanceof HTMLAnchorElement) processLink(el); processBackground(el); processDataImageAttrs(el); } function scan(root = document) { if (root instanceof Element) processElement(root); const nodes = root.querySelectorAll?.('img, a, [style*="background"], .catalogCard-image-bg, [data-image], [data-img], [data-photo], [data-zoom], [data-zoom-image], [data-large], [data-large-image], [data-full], [data-full-image]') || []; nodes.forEach(processElement); } scan(document); // Horoshop may reapply lazy src/backgrounds after slider/filter/AJAX updates. const observer = new MutationObserver(mutations => { for (const m of mutations) { if (m.type === 'attributes') processElement(m.target); m.addedNodes.forEach(node => { if (node instanceof Element) scan(node); }); } }); observer.observe(document.documentElement, { subtree: true, childList: true, attributes: true, attributeFilter: [ 'src','srcset','data-src','data-srcset','href','style', 'data-image','data-img','data-photo','data-zoom','data-zoom-image', 'data-large','data-large-image','data-full','data-full-image' ] }); // A couple of delayed passes catch sliders initialized after DOMContentLoaded. setTimeout(() => scan(document), 800); setTimeout(() => scan(document), 2500); console.info('[FROMUS] Force JPG product images v2 enabled (private).'); })();