Help me get past this gimbal lock problem please.

So im trying to make wheel mesh spin, my back wheels spin fine and look realistic(The Backwheel code is at the very bottom for anyone that wants to look).

The problem is my front wheels, I cannot use the backwheel code becuase the wheels also have to steer, so I came up with this new code below for my front wheels. However I am suffering from gimbal lock on the front wheels.
I cannot simply use Quaterions because the steer angle is a float.
Does anyone have any idea’s how i can rotate the front wheels with the Quaterion X rotation of the back wheel and the float value of the steer angle?
Here is the front wheel code at the moment that suffers from gibal lock.
It is locking in the X axis.

using UnityEngine;
using System.Collections;

public class FrontWheelMeshMovement : MonoBehaviour {

// FRONT WHEEL MESH MOVEMENT

    public WheelCollider Wheel;
    public Transform WheelMesh;
    public Transform Backwheel;

    void Update()
    {

//Wheel Suspension Movement
   
RaycastHit hit;

        if (Physics.Raycast (Wheel.transform.position, -Wheel.transform.up, out hit, (Wheel.suspensionDistance / 8) + Wheel.radius)) {
            WheelMesh.position = hit.point + Wheel.transform.up * (Wheel.radius / 4);
        } else {
            WheelMesh.position = Wheel.transform.position - (Wheel.transform.up * (Wheel.suspensionDistance / 4));
        }

//Wheel Steering and Rotation
// THIS LINE OF CODE HAS GIMBAL LOCK IN THE X Axis.
            transform.rotation = transform.parent.rotation * Quaternion.Euler(Backwheel.localRotation.eulerAngles.x, Wheel.steerAngle - 90 , 0.0f);
    }
}
using UnityEngine;
using System.Collections;

public class WheelMeshMovement : MonoBehaviour {

//BACK WHEEL MESH MOVEMENT

    public WheelCollider Wheel;
    public Transform WheelMesh;

    void Update() {

//Wheel Suspension Movement 
  
    RaycastHit hit;
   
        if (Physics.Raycast (Wheel.transform.position, -Wheel.transform.up, out hit, (Wheel.suspensionDistance / 4) + Wheel.radius)) {
            WheelMesh.position = hit.point + Wheel.transform.up * (Wheel.radius / 4);
                } else {
            WheelMesh.position = Wheel.transform.position - (Wheel.transform.up * (Wheel.suspensionDistance / 4));
        }

//Wheel Rotation

        WheelMesh.RotateAround (WheelMesh.gameObject.transform.position, WheelMesh.gameObject.transform.right, Wheel.rpm / 10);
    }
}

here’s a cutdown/slightly modified version of what I use…

   float Rpm = 0;
   float forwardRotation = 0;
   Vector3 wheelRot;
   Quaternion wheelRotation;

    void Update()
    {
            Rpm = wheelCollider.rpm;  

            if (Mathf.Abs(wheelCollider.rpm) > 0.1f)
            {
                forwardRotation += wheelCollider.rpm * Time.deltaTime * 3.14f;
                if (forwardRotation > 360)
                    forwardRotation -= 360;
            }

            wheelRot.x = forwardRotation;
            wheelRot.y = wheelCollider.steerAngle;
            wheelRot.z = 0;

            wheelRotation = Quaternion.Euler(wheelRot);
            wheel.rotation = transform.rotation * wheelRotation;
        }