The Urban II short features Stuburt branded rivets and back patch pockets. The combination of Polyester and Elastane in this new durable material gives these shorts ultimate freedom of movement and comfort. Small details such as the Stuburt keyline raised application to back yoke and inner front coin pocket really add to the fresh, clean look.
Features:
96% Polyester, 4% Elastane
Stuburt branded rivets to front side seam
Stuburt branded hardwear centre front button
Laser cut button hole
Stuburt keyline logo to back yoke
Inner front coin pocket
Branded inner gripper waistband
Inside leg: 25cm
1 / 5
Urban II Short£39.99 £19.99
Select waist
1
What golfers say
Independent reviews, collected from Stuburt retailers.
5.0 / 5from 1 review
★★★★★
Great item
True to size absolutely love these and just ordered another colour
NAthan · via Clarkes Golf
Moves with your swingStretch where you need it
Pockets that hold a roundScorecard, tees, phone
True to sizeWaist sizes, measured
British since 1860Founded in Britain
Where the price difference actually goes
Where the price difference actually goes
Feature
These shorts£19.99
Typical short£55+
Stretch for a full turn
Yes, for Stuburt
Yes, for the comparison polo
Room through the middle
Yes, for Stuburt
No, for the comparison polo
No superstar mark-up in the price
Yes, for Stuburt
No, for the comparison polo
British sporting house since 1860
Yes, for Stuburt
No, for the comparison polo
Comparison against widely sold branded golf shorts at UK RRP.
Long enough for the dress code
Plenty of clubs still have a view on shorts. These are cut to keep you out of that conversation.
Full turn, no pull
Stretch where the swing asks for it, so nothing grips at the top of the backswing.
For the four warm weeks we get
Light enough for a July medal, tidy enough for the terrace afterwards.
Machine wash, no fuss
Cold wash at 30, tumble dry low, ready for next weekend.
Est. 1860 · Sergio Garcia’s Fireballs GC wear Stuburt on the LIV tour
`;
};
const bindCarousel = () => {
const carousel = section.querySelector('[data-carousel]');
const prev = section.querySelector('[data-direction="prev"]');
const next = section.querySelector('[data-direction="next"]');
if (!carousel) return;
const cardWidth = () => {
const c = carousel.querySelector('.stb-card');
if (!c) return 0;
return c.getBoundingClientRect().width + (parseFloat(getComputedStyle(carousel).gap) || 20);
};
const update = () => {
const max = carousel.scrollWidth - carousel.clientWidth;
// Edge fade: only where there's more to scroll (crisp resting edges).
carousel.toggleAttribute('data-fade-start', carousel.scrollLeft > 2);
carousel.toggleAttribute('data-fade-end', carousel.scrollLeft < max - 2);
if (!prev || !next) return;
prev.disabled = carousel.scrollLeft <= 2;
next.disabled = carousel.scrollLeft >= max - 2;
};
if (prev) prev.addEventListener('click', () => carousel.scrollBy({ left: -cardWidth(), behavior: 'smooth' }));
if (next) next.addEventListener('click', () => carousel.scrollBy({ left: cardWidth(), behavior: 'smooth' }));
carousel.addEventListener('scroll', update, { passive: true });
window.addEventListener('resize', update);
update();
};
/* Adding to cart is handled by the shared web component
(assets/stuburt-quick-pick.js) — it posts to /cart/add.js and dispatches the
`cart:update` event the mini-cart + cart bubble subscribe to, identical to
the SS26 carousel and the collection page. */
const load = async () => {
const handles = getViewed().filter(h => h && h !== currentHandle).slice(0, limit);
if (!handles.length) return; // stays hidden
const results = await Promise.all(
handles.map(h => fetch(`/products/${encodeURIComponent(h)}.js`, { headers: { Accept: 'application/json' }})
.then(r => r.ok ? r.json() : null).catch(() => null))
);
const valid = results.filter(Boolean);
if (!valid.length) return;
const carousel = section.querySelector('[data-carousel]');
carousel.innerHTML = valid.map(cardHTML).join('');
section.removeAttribute('hidden');
bindCarousel();
};
// Clear all: wipe the stored history and hide the section
const bindClearAll = () => {
const btn = section.querySelector('[data-clear-all]');
if (!btn) return;
btn.addEventListener('click', () => {
setViewed([]);
section.setAttribute('hidden', '');
});
};
bindClearAll();
// If we already have stored handles, reveal section so skeletons show while fetching
if (getViewed().filter(h => h && h !== currentHandle).length > 0) {
section.removeAttribute('hidden');
}
load();
})();
Cookie consent
We and our partners use cookies to personalise your experience, show relevant ads and analyse traffic. We won’t use them for these purposes unless you accept. Privacy Policy.