The gap was still at 20 seconds under the 3km to go banner as all four riders in the front group took their turn in the wind, rather than just the two domestiques.
More echelons formed off the back of the main bunch too – Joaquim Rodriguez (Katusha) losing time rapidly.
Froome, Sagan, Bodnar and Thomas continued to pull a team pursuit-like effort, all taking turns as the crosswinds continued to hit – the gap coming down, but not enough to deny the quartet the stage win.
Thomas dropped back in the final 500m, leaving Bodnar to lead out the sprint – with Sagan and Froome contesting it.
Realistically, there was only going to be one winner in that situation, and so it proved as Sagan punched the air, but bonus seconds and a small gap was a more than adequate consolation for second-placed Froome.
Tour de France 2016: stage 11 – result
1) Peter Sagan (SVK) – Tinkoff –
2) Chris Froome (GBR) – Team Sky – ST
3) Maciej Bodnar (POL) – Tinkoff
4) Alexander Kristoff (NOR) – Katusha +6”
5) Christophe Laporte (FRA) – Cofidis – ST
6) Jasper Stuyven (BEL) – Trek-Segafredo
7) Edvald Boasson Hagen (NOR) – Dimension Data
8) Andre Greipel (GER) – Lotto-Soudal
9) Sondre Holst Enger (NOR) – IAM Cycling
10) Oliver Naesen (BEL) – IAM Cycling
General classification
1) Chris Froome (GBR) – Team Sky – 52.34.37hrs
2) Adam Yates (GBR) – Orica-BikeExchange +28”
3) Daniel Martin (IRL) – Etixx-QuickStep +31”
4) Nairo Quintana (COL) – Movistar +35”
5) Bauke Mollema (NED) – Trek-Segafredo +56”
6) Romain Bardet (FRA) – Ag2r-La Mondiale – ST
7) Sergio Henao (COL) – Team Sky
8) Alejandro Valverde (ESP) – Movistar +1.13
9) Tejay van Garderen (USA) – BMC Racing – ST
10) Roman Kreuziger (CZE) – Tinkoff +1.28