This problem has been around since the early days of logic circuits.
When it comes to CMOS chips, There is no easy answer.
The original CMOS chips Ranged in voltage from 15V and in some cases up to 30V.
I do not recommend using the older chips. However, current CMOS chips will run at 15V or 5V.
I have never tried to run true CMOS at 3.3V. If you're referring to the 74H series which is a CMOS -based " TTL " series, They normally run at 5V, check your data sheet. Some of these chips will run fine at 3.3 V. Even if you run them at 5V, Going from 3.3 V to 5 V should not give you a problem. However, you will need a voltage divider when going in the opposite direction. A level shifter is always recommended.
Please do not confuse TTL with 7400 series, TTL is transistor-transistor logic,
period. These days noone uses TTL chips at all.
All the modern 7400 series chips are CMOS, such as 74HC, 74HCT, 74LVC, etc.
The simplest way to interwork is with specialist level-shifting chips (you can
get level shifting breakout boards from various suppliers). Some such chips
are bidirectional and can be used for busses that cross the 3.3V/5V barrier.
Another way is to use 5V-powered open-collector (open-drain) output gates when
talking to 3.3V logic from 5V logic (pull up resistor to 3.3V), or 74LVC series gates
(3.3V powered) with their 5V tolerant inputs. 74LVC gates go down to 1.8V I
think should you even need to talk to a 1.8V chip.
Going the other way there are some "high voltage open-collector" gates in the 7400
series, which can be used with pull-ups to 5V (or more?), or more simply use 74HCT gates
powered at 5V to receive 3.3V logic signals (they are guaranteed to read 2.4V
or higher as HIGH. 74HCT gates require 5V power, note, unlike 74HC gates
which can run from 2 to 6V.