Photo-Illustration: by The Cut; Photos: Getty Images
Charli XCX and her stylist, Chris Horan, quite frankly … never miss. From her everyday look to the stage, Charli delivers. Outfits like a barely-there mini from Dilara Findikoglu to oversize tailoring from Y/Project, or an intricate gown from Marni, have allowed Charli to explore her style in various and nuanced ways.
Find below my top 25 personal favorite fashion moments, ranked.
1.
The 2024 Met Gala
Photo: Dimitrios Kambouris/Getty Images for The Met Museum/Vogue
My favorite look of Charli’s was her custom Marni dress at this year’s Met Gala celebrating “Sleeping Beauties: Reawakening Fashion.” The reason why I like this look so much is that it hit the mark of the Met Gala theme (which so few people actually do well.) This look is composed of vintage T-shirts intentionally stretched and distressed. The intricacy and fragility of the look are admirable.
2.
The H&M London Fashion Week event
Photo: Samir Hussein/Getty Images for H&M
My second-favorite look was also from this year, when XCX performed at the H&M London event to kick off London Fashion Week. Sure, we’ve seen her in this “Charli uniform” before: a minidress (one could also label it as an oversize tee), no pants, high boots, tights, sunnies, and blown-out hair — but that’s the reason why it is No. 2 on the list.
3.
Wimbledon
Photo: Dave Benett/Dave Benett/Getty Images for evian
At Wimbledon earlier this year, the pop star wore a Beaufille top, skirt, and socks. This look was deemed “inappropriate” by certain audiences, but the controversy made it even better. Hence why it’s in my top three. If you get it, you get it.
4.
The Met Gala after-party
Photo: MEGA/GC Images
Of course, XCX attending the Met after-party in another major Marni look is not far behind No. 1. What is interesting about this look is that it doesn’t follow the silhouette that Charli usually gravitates toward, showing the versatility in her style.
5.
The Courrèges show in Paris
Photo: Christian Vierig/Getty Images
In another turn of events, Charli, who usually wears all black, is wearing all white to attend the Courrèges show in Paris. The outfit consists of an oversize knit jumper layered on a sheer bottom. Charli XCHICX.
6.
On tour with Troye Sivan at the OVO Arena Wembley
Photo: Katja Ogrin/Redferns/Getty Images
Charli joined Troye Sivan onstage at OVO Arena Wembley in London-based Turkish designer Dilara Findikoglu. To me, both Findikoglu and XCX’s artistry is rooted in feminism and subculture like fetishes, which is why this is a great pairing.
7.
The Balenciaga couture show
Photo: Arnold Jerocki/Getty Images for Balenciaga
The construction of this Balenciaga look — a deconstructed shirtdress — was what made it one of my top looks on the list. Unlike other Charli looks, this silhouette is out of her comfort zone and perfect for a moment like her attending the Balenciaga couture show in Paris.
8.
The Vanity Fair Oscar party
From left: Photo: Leon Bennett/GA/The Hollywood Reporter via Getty ImagesPhoto: Steve Granitz/FilmMagic
From left: Photo: Leon Bennett/GA/The Hollywood Reporter via Getty ImagesPhoto: Steve Granitz/FilmMagic
Charli wore a sheer yellow Givenchy look at the Vanity Fair Oscar party, and the nuanced butter-yellow color is what landed this look in the “best of.” Yes, we had to include a back-of-dress photo too.
9.
Hanging out in New York City
Photo: MEGA/GC Images
Spotted leaving her hotel in New York, Charli sports an ultracropped black tee, low-waisted pants, and pointed shoes. The people of New York’s princess.
10.
The British GQ x Christian Louboutin dinner
Photo: Dave Benett/Jed Cullen/Dave Benett/Getty Images
Charli attended a British GQ x Christian Louboutin dinner wearing a Kate Hundley leather corseted jacket and a wet-hair look. What is interesting about this look is that it is more covered up than Charli usually dresses but still keeps her ethos of playing with shapes and proportions: The sharp shoulders and corsetry details are special.
11.
The Warner Music and Ciroc Brit Awards in 2023
Photo: Dave Benett/Dave Benett/Getty Images for Warner Music
Charli at the Warner Music and Ciroc Brit Awards Party in 2023 wearing a shirt with the verbiage “Real Winner” is both ironic and iconic.
12.
A Night for Young Hollywood, hosted by Vanity Fair in 2023
Photo: Jon Kopaloff/Getty Images
For Vanities: A Night for Young Hollywood, hosted by Vanity Fair, Charli wore a Saint Laurent by Anthony Vaccarello low V-cut dress that felt like the next stage of Charli. It was sexy and mature in a way that felt very Old Hollywood.
13.
The JW Anderson Show in 2023
Photo: Neil Mockford/GC Images
Charli attended the JW Anderson show during 2023 London Fashion Week wearing an oversize white button-down, deep-gray denim Bermuda shorts, and black heeled boots. She has always been ahead of her time.
14.
The British Fashion Awards in 2023
Photo: Dave Benett/Max Cisotti/Dave Benett/Getty Images
Archive Jean Paul Gaultier from 2004 and bright-yellow matching eye tape for the 2023 Fashion Awards was pure art.
15.
Hanging out in London in 2023
Photo: Neil Mockford/GC Images
XCX out and about in London giving all the “Vroom Vroom” vibes wearing a cropped leather motto jacket and CAMPERLAB jeans. She is once again displaying that her street style is superior.
16.
The ASCAP Pop Music Awards
Photo: Emma McIntyre/Getty Images
For the 2024 ASCAP Pop Music Awards, the singer wore a Mugler deep-plunge bodysuit and velvet skirt with fold-over details that fit her like a glove.
17.
The Vanity Fair Oscar party in 2023
Photo: Jon Kopaloff/Getty Images for Vanity Fair
This look for the 2023 Vanity Fair Oscar party hosted by Radhika Jones feels so Charli at her core. She wore a Wiederhoeft corset top, Annakiki wide-leg pants, and jewels from Fabergé, Noudar, Stephen Webster, David Yurman, and Stefere, accompanied by sky-high pigtails.
18.
The Cannes Film Festival
Photo: Christian Vierig/Getty Images
XCX went full glam in a sparkle-embellished Balenciaga dress for the 2024 Cannes Film Festival.
19.
The Pre-Grammy Gala
Photo: Jeff Kravitz/FilmMagic
Charli wore a blue leather Marni gown tailored to perfection for the Pre-Grammy Gala.
20.
The MTV Video Music Awards in 2021
Photo: Taylor Hill/FilmMagic
Charli rocked a barely-there mesh-and-lace minidress with a major hair moment at the MTV Video Music Awards in 2021. Even three years ago while in her Crash era, this look screams brat.
21.
The Warner Music Group Pre-Grammy Party
Photo: Gregg DeGuire/Billboard via Getty Images
Wearing Y/Project by Glenn Martens to the 2024 Warner Music Group Pre-Grammy Party, the singer shows how to wear androgynous silhouettes.
22.
The Perfect x Valentino London Fashion Week party
Photo: Dave Benett/Dave Benett/Getty Images for Perfect X Valentino
The pop star at the Perfect X Valentino London Fashion Week party in 2023 wore a Led Zeppelin band tee and light-pink lace dress look that translates to “365 Party Girl.”
23.
The Billboard Women in Music event
Photo: Aliah Anderson/WireImage
Charli at the 2024 Billboard Women in Music event wearing a sheer black dress with white lapel details exposed through the fabric.
24.
The BRIT Awards
Photo: Dave Benett/Jed Cullen/Dave Benett/Getty Images
XCX wore another custom Marni look for the 2024 BRIT Awards. This handcrafted watercolor dress belongs in a museum.
25.
Sydney WorldPride Opening Concert
Photo: Don Arnold/Getty Images
Charli performing at the Live and Proud: Sydney WorldPride Opening Concert is a necessary mention. She wore a black miniskirt and bra with neon-rainbow fur sleeves. This is what hyperpop is about!
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"3":3,"6":6,"17":17,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(17),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(3),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),(auth.isSubscriber()||auth.isMobileAppRequest())&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"3":3,"4":4,"17":17,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(106),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"106":106,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]