Olá, André, como vai?
A sua dúvida é bem pertinente, porque o comportamento do flex: 1 1 100% não fica tão intuitivo à primeira vista.
Quando você define flex: 1 1 100%, está usando a forma abreviada de três propriedades: flex-grow, flex-shrink e flex-basis. Nesse caso específico, 1 1 100% significa que o elemento pode crescer, pode encolher e, principalmente, que o tamanho base dele será 100% da largura disponível do contêiner.
É justamente o flex-basis: 100% que provoca a quebra para a linha de baixo. Em um contêiner flex com flex-wrap: wrap, os itens tentam ocupar espaço na mesma linha enquanto houver largura disponível. Quando um item passa a ter base de 100%, ele está dizendo: quero ocupar 100% da largura da linha. Se já existirem outros elementos antes dele, não sobra espaço suficiente na mesma linha. Como o container permite quebra de linha por causa do wrap, o navegador joga esse item para a próxima linha, onde ele pode ocupar os 100% sozinho.
O order: 1 apenas garante que ele seja renderizado depois dos outros itens. Já o que realmente força a ida para a segunda linha é o flex-basis: 100% combinado com o flex-wrap: wrap no container. Se o container não tivesse wrap, o comportamento seria diferente e os itens tentariam se comprimir para caber na mesma linha.
Complementando a explicação, vou deixar um exemplo estruturado no CodePen para você conseguir visualizar e testar cada comportamento com calma. A ideia é justamente você brincar com as regras css e observar o que muda quando altera ou remove determinadas propriedades.
Também vou deixar um artigo explicando mais sobre o display flex.
Para saber mais: Sugestão de conteúdo:
Espero ter ajudado.
Siga firme nos seus estudos e conte com o fórum sempre que precisar.
Abraços :)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado