You are here:
Date night outfits
So you’ve got yourself a date and don’t know what to wear? Girl, we’ve got you covered with our edit of date night outfits for every date night eventuality. Whether you’ve bagged yourself a Tinder date at a swanky new bar or you and your BFF are headed for girls’ night, we’ve got dresses, jumpsuits and ˜jeans a nice top’ combos whatever the occasion. For those out-out events choose a classic LBD with a red lip and your fave heels, or for a casj cinema date, a pair of mom jeans and a slogan tee are the perfect pick. What are you waiting for? Get shopping the edit and add to bag.
Sort by
FilterClickToOpen
{{/if}}
59 / 60 products
Filter Filter & Sort
59 / 60 products
-
Sort By
-
Category
-
Body Fit
-
Style
-
Colour
-
Size
-
By Occasion
{{/if}}
-
Apply
` + (imageUrls ? `` : '') + `
` + (headingText ? `
` + headingText + `
` : '') + (subHeadingText ? `
` + subHeadingText + `
` : '') + (creditStatusText ? `
` + creditStatusText + `
` : '') + (aprText ? `
` + aprText + `
` : '') + `LEARN MORE` + `
` + `
`; const takeoverBlock = template.content.firstChild; const imgEl = new Image(); let current = {}; const calculatePosition = () => { // Hidden element computed style will return the percent % width value instead of the calculated px prodCard.style.display = 'none'; const cardWidth = parseFloat(getComputedStyle(prodCard).getPropertyValue('width')); prodCard.style.display = ''; const itemsInRow = Math.round(100 / cardWidth); const index = breakPoints.findIndex((breakP) => window.innerWidth <= breakP); const isFullWidth = sizes[index] >= itemsInRow; const offset = isFullWidth || align === 'left' ? 0 : itemsInRow - sizes[index]; return { pos: Math.floor((position - 1) / itemsInRow) * itemsInRow + offset, isFullWidth, cardWidth, size: sizes[index], imgUrl: imageUrls[index], }; }; const update = (isFirstUpdate) => { if (isFirstUpdate) { const pageNumber = parseInt(document.querySelector('.PageSelector')?.textContent); if (pageNumber && pageNumber > 1 && (pageNumber - 1) % appearanceFrequency !== 0) { return; } } const newCurrent = calculatePosition(); if (isFirstUpdate !== true && !Object.keys(newCurrent).some((key) => current[key] !== newCurrent[key])) { return; } const beforeEl = container.querySelector(`li:nth-of-type(` + newCurrent.pos + `)`); if (beforeEl) { beforeEl.after(takeoverBlock); } else { container[newCurrent.pos === 0 ? 'prepend' : 'append'](takeoverBlock); } takeoverBlock.classList.toggle('full-width', newCurrent.isFullWidth); if (current.size !== newCurrent.size) { takeoverBlock.classList.remove('size-' + current.size); takeoverBlock.classList.add('size-' + newCurrent.size); } if (current.imgUrl !== newCurrent.imgUrl) { imgEl.onload = () => { takeoverBlock.classList.add('ready'); // takeoverBlock.querySelector('.inner').style.backgroundImage = `url(` + newCurrent.imgUrl + `)`; }; takeoverBlock.querySelector('.inner').style.backgroundImage = ``; takeoverBlock.classList.remove('ready'); imgEl.src = newCurrent.imgUrl; } takeoverBlock.style.maxWidth = newCurrent.isFullWidth ? '' : newCurrent.cardWidth * newCurrent.size + '%'; Object.keys(newCurrent).forEach((key) => (current[key] = newCurrent[key])); }; const timeoutUpdate = () => setTimeout(update, 0); const destroy = () => { window.removeEventListener('resize', update); document.querySelectorAll('.columnselector a').forEach((link) => link.removeEventListener('click', timeoutUpdate)); observer.disconnect(); takeoverBlock.remove(); return true; }; if (getComputedStyle(container).display !== 'flex') { container.classList.add('frasers-plus-force-flex'); } window.addEventListener('resize', update); document.querySelectorAll('.columnselector a').forEach((link) => link.addEventListener('click', timeoutUpdate)); const observer = new MutationObserver((mutations) => { if (!mutations.find((mut) => mut.addedNodes[0]?.classList?.contains('frasers-plus'))) { prodCard = container.querySelector(`li:first-of-type`); position = Math.min(Math.max(1, position), container.querySelectorAll('li').length + 1); update(true); } }); observer.observe(container, { childList: true }); update(true); return { container, block: takeoverBlock, current: current, update, destroy, }; }; document.addEventListener("DOMContentLoaded", () => { const takeover = overtakeProduct(takeoverOptions); }); })();