Hi @Firas_Mohamed 
You can do this without creating separate products for each color, but I’d avoid relying on CSS alone. The important part is making sure each color has a clear relationship with its images.
For example, if the product has:
Black → 4 images
White → 4 images
Beige → 4 images
the storefront needs to know which four images belong to the selected color. Once that relationship is available, the gallery can be filtered whenever the customer changes the variant.
If you’re comfortable editing the theme, a small JavaScript customization is one option. However, I wouldn’t recommend using a random snippet designed for Dawn or an older Shopify theme, because Horizon uses its own product media and variant components. A snippet that works on another theme may cause the gallery to stop updating correctly.
Another approach I’ve found useful for stores with a lot of color/customization choices is to move the color selection itself to visual swatches. For example, Easify Custom Product Options supports Color Swatches and Image Swatches, so you can give customers a much clearer way to select the color rather than relying only on the standard variant dropdown.
If your main goal is simply to make the product page easier to navigate, visual swatches can be a good alternative. If you specifically need the native Horizon gallery to completely remove all images belonging to other colors, though, that part would still need to be handled by the theme/gallery logic.
So I’d look at it this way:
Want to keep Horizon’s native gallery? → custom Horizon code is probably the cleanest free solution.
Want a more visual and flexible color-selection experience? → Color/Image Swatches can be handled with an option app such as Easify.
I’d also recommend testing this on one product first before applying any code globally, especially if the product has multiple colors and several images per color.