You would do it exactly like you do with IPv4, but using IPv6.
In IPv6 you generally will have a routed prefix. You would use that instead of RFC1918.
Example:
You are routed this prefix:
2001:db8:4b56::/48
You assign:
VLAN100: 2001:db8:4b56:64::/64
VLAN101: 2001:db8:4b56:65::/64
VLAN102: 2001:db8:4b56:66::/64
VLAN103: 2001:db8:4b56:67::/64
On VLAN 100-103 you would:
Pass anything to any local assets they need, like DNS servers
Reject anything to This Firewall
Reject anything to 2001:db8:4b56::/48 (and possibly more if you are using any ULA addresses locally, etc.)
Pass anything to any
It can be beneficial to use an alias for the block destination. You could add 2001:db8:4b56::/48, fc00::/7, etc to it.
Yes, there is added responsibility to identify local addresses that need protection without the perceived convenience of just blocking RFC1918. But this responsibility is no different than having routed, public subnets in IPv4.
If you are careful in your planning, such as setting all VLANs to use the same DNS server addresses, you might even be able to get away with defining an interface group and using one set of rules for them all.