When i use
.flex-container > div to reach all child div elements and collect 3rd div with .third
and use
.third{
  margin-left:auto;
}
body {
  min-height: 100vh;
  width: 80%;
  margin: 5rem auto;
  font-family: Arial, Helvetica, sans-serif;
}
.flex-container {
  display: flex;
  background-color: DodgerBlue;
  padding: 1rem;
}
.flex-container > div {
  background-color: #f1f1f1;
  display: grid;
  place-content: center;
  width:5rem;
  height: 5rem;
  font-size: 3rem;
  margin-right: 1rem;
  margin-left: 1rem;
}
.third{
  margin-left:auto;
}
<div class="flex-container">
      <div>1</div>
      <div>2</div>
      <div class="third">3</div>
</div>
it is not worked. I want to know why it is not working?
Then i realize when i still use
 .flex-container > div to collect all child divs
and get rid of margin-left: 1rem;
body {
  min-height: 100vh;
  width: 80%;
  margin: 5rem auto;
  font-family: Arial, Helvetica, sans-serif;
}
.flex-container {
  display: flex;
  background-color: DodgerBlue;
  padding: 1rem;
}
.flex-container > div {
  background-color: #f1f1f1;
  display: grid;
  place-content: center;
  width:5rem;
  height: 5rem;
  font-size: 3rem;
  margin-right: 1rem;
  /* margin-left: 1rem; */
}
.third{
  margin-left:auto;
}
<div class="flex-container">
      <div>1</div>
      <div>2</div>
      <div class="third">3</div>
</div>
it works. I want know why it acts like sticked?
When collecting all child divs with .flex-container > *  everything works perfectly
body {
  min-height: 100vh;
  width: 80%;
  margin: 5rem auto;
  font-family: Arial, Helvetica, sans-serif;
}
.flex-container {
  display: flex;
  background-color: DodgerBlue;
  padding: 1rem;
}
.flex-container > * {
  background-color: #f1f1f1;
  display: grid;
  place-content: center;
  width:5rem;
  height: 5rem;
  font-size: 3rem;
  margin-right: 1rem;
  margin-left: 1rem;
}
.third{
  margin-left:auto;
}
 <div class="flex-container">
      <div>1</div>
      <div>2</div>
      <div class="third">3</div>
</div>