Эскадра С. К. Грейга состояла из 17 линейных кораблей с 1220 орудиями; кроме того, на 8 фрегатах, 3 катерах, 2 бомбардирских кораблях и 3 вспомогательных судах насчитывалось 272 пушки. Шведский флот под флагом генерал-адмирала герцога Зюдерманландского насчитывал 16 кораблей, 7 больших фрегатов с 900 крупными и 436 меньшими пушками (всего 1336 орудий); вес бортового залпа шведов составлял 720 пудов против 460 у русских. Кроме того, у шведов было 5 малых фрегатов и 3 пакетбота.
К 11.00 по приказу адмирала западнее Гогланда выстроилась боевая линия: авангард составили корабли M. П. Фондезина, арьергард — корабли Т. Г. Козлянинова, протянувшиеся с юго-запада на северо-восток; при дистанции между кораблями в два кабельтова линия растянулась более чем на семь верст. Эскадру Козлянинова Грейг поставил в арьергард специально, как более надежную. Перед боем команды в 11.30 получили обед; сигнал был обедать с поспешностью. К полудню появились корабли противника, направлявшиеся в линии баталии на юг курсом, уводившим от русской эскадры, которая шла на запад и огибала Родшхер с севера. Но Грейг, как известно, намеревался вступить в бой и ранее не раз требовал от командиров кораблей решительно атаковать неприятеля и привести его в замешательство; основное внимание адмирал обратил на артиллерийскую подготовку экипажей. После обнаружения шведов русская эскадра прибавила парусов и изменила курс на запад, в сторону противника; авангард и арьергард поменялись местами, причем корабли М. П. Фондезина стали отставать, особенно корабль «Дерис» капитана Коковцева.
До 15 00 шведы старались удалиться от русского флота, и только когда возможно стало определить соотношение сил, пошли на сближение строем фронта; в центре шел корабль генерал-адмирала, на правом фланге — вице-адмирала, на левом — контр-адмирала. Русская эскадра также шла в строю фронта. В 15.30 Грейг поднял сигнал атаковать неприятеля — каждому кораблю противолежащий. Это был пример той самой линейной тактики, которую в английском флоте признавали единственно возможной. Сам адмирал направлялся на корабль шведского генерал-адмирала. Он неоднократно поднимал сигналы своим капитанам прибавить парусов и сомкнуть линию. На правом фланге был Фондезин, которому Грейг дал сигнал «спуститься на неприятеля». Остальным кораблям он сигнализировал позднее; однако по ошибке первый корабль Козлянинова «Болеслав», последующий «Мечеслав» и последний в кордебаталии «Владислав» двинулись вместе с арьергардом и оказались вне линии, ближе к неприятелю, тогда как второй корабль авангарда «Иоанн Богослов» капитана Вальронта пошел по ветру, повернул оверштаг и оказался за линией.
В 16.00 находившийся под ветром шведский флот повернул и двигался навстречу русской эскадре; Грейг приказал идти на неприятеля, но корабли «Дерис», «Память Евстафия» и «Иоанн Богослов» при повороте отстали от боевой линии. Флагманский корабль Грейга «Ростислав» шел под всеми парусами впереди линии; он сигналами требовал от арьергарда вступить на свое место.
Когда в 17.00 русский авангард приблизился к шведскому на два кабельтова и неприятель открыл огонь, контр-адмирал Козлянинов начал пальбу, не дожидаясь сигнала адмирала. Скоро сражение вспыхнуло по всей линии. Так как кордебаталия и арьергард не подошли еще близко к неприятелю, адмирал продолжал спускаться с частью кораблей кордебаталии. Некоторые корабли отстали, а «Иоанн Богослов» оказался между линиями и пересек русский строй, направляясь к востоку.
Располагая тремя кораблями, флагман вступил в бой с авангардом шведов; четыре корабля кордебаталии после первых выстрелов также открыли огонь, причем «Ростислав» оказался на дистанции картечного выстрела от генерал-адмиральского корабля. К этому времени флоты были между островом Стеншхер и мелью Калбодегрунд, на полпути от Гогланда до Свеаборга.
Команды 7 кораблей, воодушевленные примером Грейга и Козлянинова, вели бой против 12 шведских и вскоре нанесли им значительные повреждения. «Ростислав» бился с генерал-адмиральским «Густавом III», следующий за ним «Изяслав» — с тринадцатым в линии шведским кораблем и фрегатом. Грейг старался сокрушить противника, используя картечь. Против шведского арьергарда впереди сражались «Болеслав», «Мечеслав», «Владислав»; последний потерял большую часть рангоута и стал мишенью пяти концевых вражеских кораблей, тогда как шесть отставших русских кораблей издали стреляли по шведскому арьергарду. Оба флота, окутанные облаками дыма, медленно двигались на юго-запад.
К 18.30 на передовых шведских кораблях было заметно замешательство. «Густав III» на буксире увели за боевую линию, вышли из линии два передовых корабля и третий, между «Изяславом» и «Ростиславом»; прочие также спустились под ветер, смыкая линию; отступление противника вызвало восторженные крики и наступательный дух даже на отставших российских кораблях.
В ходе боя «Ростислав», воспользовавшись лучше сохранившимися парусами, обошел два своих корабля, стал пятым в линии и снова вступил в сражение, тогда как оказавшийся в конце линии «Владислав» слишком приблизился к неприятелю.
К 19.00 установилось самое тихое маловетрие. Авангард, имея по одному противнику на корабль, энергично атаковал, за ним следовала кордебаталия, и даже арьергард старался не отставать. Но ветер стихал. Около 21.00 шведский флот медленно стал поворачивать; русские также повернули и снова сблизились, причем оказались к врагу левым, неповрежденным бортом. «Ростислав» вступил в жестокий бой со шведским вице-адмиральским кораблем. В наступивший штиль дым окутал поле боя. На закате стрелять можно было только с близкой дистанции. Шведы, пользуясь темнотой, удалялись, уклоняясь от боя. В центре «Родислав» Д. Тревенена, «Святой Петр» Денисона и «Болеслав» Денисова продолжали бой; «Ростислав» картечью и ядрами заставил к 22.00 спустить флаг и сдаться вице-адмиральский корабль «Принц Густав», затем перенес огонь на другие корабли, а посланный с флагмана офицер овладел трофеем. В 22.00 Грейг сделал сигнал прекратить стрельбу из-за ночной тьмы, густого дыма и удаленности отступающего противника.
В 22.30 на «Ростислав» доставили пленного вице-адмирала графа Вахмейстера, представили его флаг и шпагу, которую Грейг, в уважение стойкого сопротивления противника, вернул графу. О себе Вахмейстер сообщил, что он генерал-адъютант короля и командовал авангардом флота и что стеньговый флаг не спустил, пока не пришли русские шлюпки, ибо тот был прибит к фор-брам-стеньге гвоздями. Трофейный флаг был отправлен в Санкт-Петербург и помещен в Петропавловский собор.
Победу омрачила неприятная весть. В начале двадцать четвертого часа унтер-офицер на шлюпке с корабля «Владислав» доставил соображение командира, что корабль серьезно пострадал и может подвергнуться нападению. Грейг решил двинуться на неприятеля, но в дыму в полночной тьме его сигнал не увидели. Адмирал послал шлюпки с привозом на соседние корабли. Однако их командиры сообщили о необходимости ремонта такелажа и рангоута, а легко пострадавший арьергард был далеко. Грейгу пришлось отказаться от попытки вернуть корабль, который уже был взят неприятелем. На следующий день командующий узнал, что командир «Владислава» обратился за помощью командиру корабля «Дерис», но последний лишь послал шлюпку; она вывезла трех мичманов и трех гардемарин, которые сообщили, что флаг уже спущен.
На русских кораблях рангоут и гребные суда были избиты, команды устали, арьергард совсем отстал. В сражении с русской стороны было убито 580, ранено 720, на «Владиславе» взято 470 человек. Шведы указали свои потери в 150 убитых и 340 раненых. Но на одном корабле «Принц Густав» оказалось 150 человек убитыми и 539 пленными, что позволяет поставить под сомнение сведения шведской стороны. В донесении от 14 июля Грейг уточнял:
«Рескрипт В.И.В. от 10 июля я получил. Неприятельский флот 7 числа состоял из 16 линейных кораблей, хотя я и доносил только о 15-ти, потому что многие корабли их были без ютов и один из них был принят мною за большой фрегат. Большие их фрегаты, числом 7, имели артиллерию одинаковую с нашими 60-пушечными кораблями и 12 ф. орудия, и помещены были в линию баталии, которая таким образом состояла из 23 судов, имела над нами немалое преимущество в числе и калибре орудий и в числе старослужащих матросов».
Адмирал отмечал в первую очередь храбрость командующего авангардом и командиров его кораблей:
«Из офицеров отличившихся — командовавшего авангардиею контр-адмирала Козлянинова я, конечно, должен именовать перваго. Корабли же его дивизии: „Всеслав“, „Вышеслав“, „Болеслав“ и „Мечеслав“, все наступили на неприятеля и дрались со всякою храбростию и много терпели в сражении. Но из них два первые: „Всеслав“ и „Вечеслав“ под командою Макарова и Эльфинстона, несравненно более нежели два последние. В кордебаталии все капитаны оказали храбрость, но наносили больше вреда неприятелю „Мстислав“, „Святой Петр“, „Владислав“, также и „Ростислав“, в разсуждении его величины. Но надобно отдать справедливость и кораблям „Родиславу“, „Святой Елене“ и „Изяславу“. Из ариергардии контр-адмирала Фондезина, он со своим кораблем „Кир-Иоанн“ пошел в атаку, но весьма слабо был подкреплен прочими и сражение производилось в дальнейшем разстоянии от неприятеля нежели следовало.