tag of the document. This will help to improve the load of the images
// during color swatches interaction on PLP
const preloadBackground = (entries, observer) => {
entries.forEach(async (entry) => {
if (entry.isIntersecting) {
const swatch = entry.target;
const images = swatch.dataset.varimg.split(',');
images.forEach((img, index) => {
// preload image
const link = document.createElement('link');
link.href = buildSrc(img);
link.imagesrcset = getSrcset(img);
link.imagesizes = cssImageMediaCondition;
link.rel = 'preload';
link.as = 'image';
document.getElementsByTagName('head')[0].appendChild(link);
});
swatch.removeAttribute('data-varimg');
switchObserver.unobserve(swatch);
}
});
};
const switchObserver = new IntersectionObserver(preloadBackground, {
root: null, // Default is the viewport
rootMargin: '30px',
threshold: 0.05, // Load image when 10% of the div is visible
});
// Sort options
function getPageParam() {
const urlParams = new URLSearchParams(window.location.search);
const pageParam = urlParams.get('page');
return pageParam ? parseInt(pageParam, 10) : 1;
}
domLoadedPage = getPageParam();
setupSortDropdown('.fs_sort_by_wrap_desktop', '.fs_sort_by_options_desktop', '.fs_sort_by_select_desktop');
const sortBySelect = document.getElementById('sortByDesktop');
let sortByValue = getSortBy(); // call the function and store the returned value
sortBySelect.value = sortByValue; // update the desktop dropdown value on page load
// update sort mobile dropdown value on page load
const validSortOptions = ['price_min_to_max', 'price_max_to_min', 'creation_date', 'relevency'];
sortByValue = validSortOptions.includes(sortByValue) ? sortByValue : 'relevency';
const inputField = document.querySelector(`form [data-value="${sortByValue}"]`);
if (inputField) {
inputField.checked = true; // update the value of the option
} else {
console.error(`No radio button found with data-value="${sortByValue}"`);
}
const form = document.getElementById('sortForm');
if (form) {
form.addEventListener('change', (event) => {
if (event.target.name === 'sort') {
const selectedValue = event.target.getAttribute('data-value');
if (selectedValue && validSortOptions.includes(selectedValue)) {
setUrlParam('sortBy', selectedValue, true);
resetPageAndScroll();
updateOtherDropdown(selectedValue);
}
}
});
}
updateOtherDropdown(getSortBy());
if (sortBySelect) {
sortBySelect.addEventListener('change', function () {
if (sortBySelect.value && validSortOptions.includes(sortBySelect.value)) {
setUrlParam('sortBy', sortBySelect.value, true);
}
});
}
// Description 'read more'
function toggleReadMore(button) {
const container = button.parentNode;
const isExpanded = container.getAttribute('aria-expanded') === 'true';
container.setAttribute('aria-expanded', !isExpanded);
if (isExpanded) {
button.querySelector('.button-text').textContent = 'more';
} else {
button.querySelector('.button-text').textContent = 'Show less';
}
}
function visibleReadMore() {
const toggleButtons = document.querySelectorAll('.fs_collection_top_toggle');
toggleButtons.forEach(button => {
const description_children = button.previousElementSibling.children;
let description_scroll_width = 0;
let description_client_width = 0;
for(const child of description_children) {
description_scroll_width += child.scrollWidth;
description_client_width += child.clientWidth;
};
button.style.display = (description_scroll_width > description_client_width) ? 'block' : 'none';
});
}
window.addEventListener('DOMContentLoaded', visibleReadMore);
// category pills GTM
const categories = document.querySelectorAll('.category-pills__pill');
let category;
let categoryHandle;
let categoryId;
const pushCategoryPills = (category, categoryHandle, categoryId, typeCategory) => {
if (category && categoryHandle && categoryId && typeCategory) {
const categoryPills = {
event: `categoryPills`,
category: category,
categoryHandle: categoryHandle,
categoryId: categoryId,
typeCategory: typeCategory
};
window.dataLayer.push(categoryPills);
}
}
categories?.forEach(category => {
category.addEventListener('click', function(e) {
try {
category = e.currentTarget.getAttribute('data-category');
categoryHandle = e.currentTarget.getAttribute('data-collection-handle');
categoryId = e.currentTarget.getAttribute('data-collection-id');
typeCategory = e.currentTarget.getAttribute('data-type-category');
pushCategoryPills(category, categoryHandle, categoryId, typeCategory);
} catch (error) {
console.error('Error in category click event:', error);
}
})
})
Women’s Shorts That Keep Your Style On Point
From casual hangs to after-dark plans, Windsor’s women’s shorts make it easy to build looks that fit every vibe. Whether you’re going bold in hot shorts or keeping it laid-back in linen shorts, this lineup has the perfect pieces to mix, match, and make your own.
Everyday Essentials with a Twist
Jean shorts are the tried-and-true go-to, pairing effortlessly with tanks, bodysuits, or breezy blouses. For a little extra flair, ruffle shorts double as a playful base for DIY Halloween costumes, while pajama shorts in soft fabrics keep you comfy without losing style points. No matter the plan, Windsor has shorts that work with your routine—and your mood.
Elevated Styles for Nights Out
When it’s time to step things up, faux leather shorts and faux suede shorts bring instant edge with textures that turn any top into a headliner. Add sparkle bottoms with glitter or sequins for holiday parties, or lean into chic detailing with high-shine accents and luxe finishes. These shorts prove that casual doesn’t have to mean simple.
Shorts That Fit Every Scene
-
Jean shorts – A wardrobe staple that works with everything from sneakers to heels.
-
Denim rompers – One-and-done styling for effortless polish.
-
Denim skorts – All the movement of shorts with the chic appeal of a skirt.
Need outfit inspiration? Shop Windsor women’s shorts online, in-store, or in-app to find your next favorite fit.
-
Untamed Edge Animal Print Shorts
For nights when you’re feeling bold and a little wild, these mesh hot shorts bring all the attitude. The abstract animal print adds that edgy, untamed vibe, while the stretchy fit keeps everything comfy enough to dance, roam, or stir up a little fun.
Shop The Matching Top: Untamed Edge Animal Print Crop Top
Fit & Features
- Sheer mesh animal print fabric
- Low-rise waist
- Form-hugging fit
- Cheeky bottom
- Runs true to size
Style Number/Barcode: 07103-000083
Category Name: Women's Shorts
Price: $26.90
Availability: Out of Stock
-
Tailored Mood Plaid Woven Shorts
Your “I planned this” shorts—clean, tailored, and instantly elevated. The plaid woven finish gives them that strategic, cool-girl polish that works from brunch to late-night plans without ever trying too hard.
Fit & Features
- Plaid printed woven fabric
- Mid-rise waist, belt loops
- Front closure
- Dual front pockets
- Fitted silhouette
- Runs true to size
Style Number/Barcode: 06403-000065
Category Name: Women's Shorts
Price: $20.00
$34.90
On Sale: Yes
Availability: In Stock
Available Color: BROWN
Available Size: XS, S, M, L