The single most useful question you will ever ask is this: what problem are you trying to solve?
Most disagreements are born when parties try to solve a different problem - they argue over which solution is the best but they haven't defined what they are trying to achieve.
When you find yourself in a dispute with a client because what they want isn't possible (because of time constraints, vision coherence, technical requirement, etc.) see if you can get them to verbalise the problem instead.
'The button should be red' is not a problem. 'The entire game needs to be working by Tuesday' is not a problem. They are solutions. What is the problem they are trying to solve? Why is red important? What happens on Tuesday? What do they need? Why?
If you can get your client to word the problem rather than the solution, then you can put forward solutions that solve his problem and meets your requirements.
If they want the button to stand out there are many ways to make this possible without making it red. If they want to demonstrate progress on Tuesday a build can be prepared that still have a few items missing.
Some cients are very bad at this so you may have to prod a little and ask the question in different ways before you get an answer. Some may not even know what they want so you may have to work with them. In the end, understanding the problem is the root of a good solution so it's worth the time you're going to have to put in.
What problem are you trying to solve? What are you trying to achieve? What does success look like? And you should try this in your personal life too.