根据短信自动设置sweetalert2宽度

set sweetalert2 width auto according to text message

我正在使用 sweetalert2 库来显示基本警报消息,但有些消息比其他消息更广泛。

是否可以将警报容器的witdh设置为auto,以便在一行中修复消息?

作为默认行为,我认为宽度设置为 360px,但我需要一个变通方法让它自动...希望有人能帮助我...谢谢

PD:如果重要的话,我使用的是 Symfony 4.4。默认配置为:

const Toast = Swal.mixin({
    toast: true,
    position: 'top',
    showConfirmButton: false,
    timer: 3000,
    timerProgressBar: true,
});

以及模板中的触发事件:

<script>
    {% for type, msgs in app.session.flashBag.all() %}
        {% for msg in msgs %}
            Toast.fire({
                icon: '{{ type }}',
                title: '{{ msg }}'
            });
       {% endfor %}
    {% endfor %}
</script>

经过一些研究但运气不佳,尝试错误是获得合适解决方案的最佳方法。

首先,从 sweetalert2 库中覆盖一些 css 样式:

.swal2-container {
    padding: 0.4em;
}

.swal2-toast {
    max-width: inherit;
}

body.swal2-toast-shown .swal2-container {
    width: unset;
}

.swal2-popup.swal2-toast .swal2-title {
    margin: 9px 5px auto;
}

然后,在脚本标签中创建一个 canvas 元素并使用字体样式计算画布的宽度...

<script>
        {% for type, msgs in app.session.flashBag.all() %}
        {% for msg in msgs %}

        inputText = '{{ msg }}';
        font = "0.875rem Nimrod MT";

        canvas = document.createElement("canvas");
        context = canvas.getContext("2d");
        context.font = font;
        width = context.measureText(inputText).width;
        formattedWidth = Math.ceil(width) + 100;

        Toast.fire({
            icon: '{{ type }}',
            title: '{{ msg }}',
            width: formattedWidth,
        });

        {% endfor %}
        {% endfor %}
    </script>

最终结果:

希望这个解决方案对其他人有帮助...