Ксеркс выжидал четыре дня, а на пятый послал наиболее боеспособные отряды из урожденных мидян и персов на штурм. Согласно данным историка Диодора, царь отправил в первой волне атакующих тех воинов, чьи близкие родственники погибли за десять лет до того в битве при Марафоне.
Греки встретили их в теснине лицом к лицу, в то время как другая часть воинов оставалась на стене. Греки притворно отступали, но затем разворачивались и контратаковали расстроенные отряды персов. Затем Ксеркс сменил мидян на киссийцев и саков, славных своей воинственностью. Воины персидского царя, имея более легкое вооружение и не получив строевой подготовки, подобной греческой, не могли прорвать плотную фалангу противника, укрывшуюся за сплошной стеной больших щитов. Перед наступлением вечера в бой пошла гвардия Ксеркса, воины из отряда «бессмертных». Но и они отступили после короткой схватки.
На второй день Ксеркс послал в бой воинов, известных своей отвагой (в основном карийцев), с обещанием хорошей награды за успех и смерти за бегство с поля боя. Второй день тоже прошел в бесплодных атаках. Персы сменяли атакующие отряды; греки, в свою очередь, сменяли в сражении друг друга.
Ксеркс не знал, что предпринять дальше, когда к нему обратился некий местный житель, Эфиальт, который вызвался за вознаграждение провести персов горной тропой в обход Фермопил. Тропу охранял отряд фокийцев (из Средней Греции) – тысяча воинов. Отборный персидский отряд в двадцать тысяч под командованием Гидарна скрытно шел всю ночь, а к утру неожиданно обрушился на фокийцев. Загнав их на вершину горы, Гидарн продолжил движение в тыл эллинам, охраняющим Фермопилы. Фокийцы послали бегунов сообщить грекам об обходном маневре персов; об этом же греков предупредил еще ночью перебежчик из персидского лагеря по имени Тиррастиад.
Мнения союзников разделились. Большинство, подчиняясь воле обстоятельств, отправились по своим городам. Остались только триста спартанцев царя Леонида, семьсот феспийцев под командованием Демофила, сына Диадрома, и четыреста фиванцев под начальством Леонтиада, сына Евримаха. Численность воинов в отрядах указана на начало сражения, но за два дня боев греки понесли ощутимые потери. Феспии и Фивы – города в Беотии, через которую неизбежно должен был пролегать путь персидского войска, так что отряды этих городов защищали в Фермопилах родную землю. Геродот писал свой исторический труд в пору вражды Фив с Афинами, поэтому он не упускает случая выставить фиванцев предателями Эллады и сообщает, что фиванский отряд был удержан Леонидом против их воли в качестве заложников. Но эта версия Геродота опровергается как судьбой отряда, так и самой логикой войны.
Рассчитывая не на победу, но лишь на славную смерть, оставшиеся греки приняли бой в отдалении от прежнего места, там, где проход расширяется. Однако, даже там персы не могли развернуться и погибали массами в давке или будучи сброшенными с обрывистого берега. У спартанцев копья были сломаны, они разили врагов короткими спартанскими мечами в тесной рукопашной. В бою пал Леонид, у персов погибли Аброком и Гиперанф, братья царя Ксеркса. Заметив приближение с тыла персидского отряда, ведомого Эфиальтом, греки отступили к стене, а затем, миновав ее, заняли позицию на холме у выхода из Фермопил. По словам Геродота, во время отступления фиванцы отделились и сдались в плен: таким образом, они спасли свои жизни ценой клеймения в рабство.
Спартанцы и феспийцы приняли последний бой. Персы расстреливали последних героев из луков, забрасывали их камнями. По сведениям Геродота, при этом отличились доблестью спартанцы Диенек, братья Алфей и Марон, феспиец Дифирамб.