You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Bootstrap布局宽度小于容器?innerHTML渲染宽度不符

JavaScript innerHTML渲染内容宽度与CSS/Bootstrap规则冲突问题

问题描述

我在编写JavaScript代码时遇到如下问题:通过innerHTML动态渲染的内容宽度,和我预先设置的CSS、Bootstrap规则定义的宽度不一致。

相关代码

let numeroStreams = document.getElementById('num')
let resultado = document.getElementById('res')

// let requestURL = 'https://economia.awesomeapi.com.br/json/all/USD-BRL';
// let request = new XMLHttpRequest();

// request.open('GET', requestURL);
// request.send();
// request.onload = function() {
//  let cotacaoDolar = JSON.parse(request.response);
//  let divisaoReais = parseFloat(cotacaoDolar['USD']['ask']);
// }
// 上方代码可正常运行,后续可基于Promise和then方法定义real变量

let dolar = {
    Spotify: 0.00437,
    Deezer: 0.0064,
    Amazon: 0.00402,
    Apple: 0.00783,
    Ytmusic: 0.008,
    Tidal: 0.01284,
    Yt: 0.00087,
};


let divisaoReais = 5.37;

let real = { // 数据来源:geniusbrasil文件夹
    Spotify: dolar.Spotify*divisaoReais,
    Deezer: dolar.Deezer*divisaoReais,
    Amazon: dolar.Amazon*divisaoReais,
    Apple: dolar.Apple*divisaoReais,
    Ytmusic: dolar.Ytmusic*divisaoReais,
    Tidal: dolar.Tidal*divisaoReais,
    Yt: dolar.Yt*divisaoReais,
};

// let real = {
//  Spotify: 0.00193,
//  Deezer: 0.00195,
//  Amazon: 0.00754,
//  Apple: 0.00546,
//  Ytmusic: 0.006,  // 该数值待验证
//  Tidal: 0.00604,
//  Yt: 0.00045,
// };

function calc() {
    if (numeroStreams.value > 0) {
        res.innerHTML = `<div class="row no-gutters" id="stores-container">
                        <div class="col">
                            <div class="row voffset-md">
                                <div class="col-lg-4 col-md-4 col-sm-12 col-12">
                                    <div class="row platforms-spotify voffset-clear-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/spotify_logo.png" class="img-fluid img-protected logo-cal-style mg-sm float-sm-none" alt="spotify_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="cal-store-style mg-clear">
                                                Spotify
                                            </h2>
                                            <p class="currency mg-clear">US$ ${(numeroStreams.value*dolar.Spotify).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12 col-12">
                                    <div class="row platforms-deezer voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/deezer-logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="deezer_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="cal-store-style mg-clear">
                                                Deezer
                                            </h2>
                                            <p class="currency mg-clear">US$ ${(numeroStreams.value*dolar.Deezer).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12 col-12">
                                    <div class="row platform-amazon voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/amazon_music_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="amazon_music_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center stores-cal-info col-lg-7 col-sm-7 col-7">
                                            <h2 class="mg-clear cal-store-style">
                                                Amazon Music
                                            </h2>
                                            <p class="currency mg-clear text-lg-left">US$ ${(numeroStreams.value*dolar.Amazon).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="row voffset">
                                <div class="col-lg-4 col-md-4 col-sm-12 col-12">
                                    <div class="row platforms-apple voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/apple_music_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="youtube_music_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="mg-clear cal-store-style">
                                                Apple Music
                                            </h2>
                                            <p class="currency mg-clear text-lg-left">US$ ${(numeroStreams.value*dolar.Apple).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12">
                                    <div class="row platforms-ytmusic voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/youtube_music_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="youtube_music_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-6">
                                            <h2 class="mg-clear cal-store-style">
                                                Youtube Music
                                            </h2>
                                            <p class="currency mg-clear text-lg-left">US$ ${(numeroStreams.value*dolar.Ytmusic).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12">
                                    <div class="row platforms-tidal voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/tidal_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="tidal_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="cal-store-style mg-clear">
                                                Tidal
                                            </h2>
                                            <p class="currency mg-clear">US$ ${(numeroStreams.value*dolar.Tidal).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="row voffset">
                                <div class="col-lg-4 col-md-4 col-sm-12">
                                    <div class="row platforms-soundcloud voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/soundcloud-logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="soundcloud_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="mg-clear cal-store-style">
                                                SoundCloud
                                            </h2>
                                            <p class="currency mg-clear text-lg-left">US$ ${(numeroStreams.value*dolar.Soundcloud).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12">
                                    <div class="row platforms-tiktok voffset-sm">
                                        <div class="align-self-center col-lg-5 col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/tiktok_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="tiktok_logo">
                                            </div>
                                        </div>
                                        <div class="align-self-center col-lg-7 col-sm-7 col-7">
                                            <h2 class="cal-store-style mg-clear">
                                                TikTok
                                            </h2>
                                            <p class="currency mg-clear">US$ ${(numeroStreams.value*dolar.TikTok).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-lg-4 col-md-4 col-sm-12">
                                    <div class="row platforms-youtube voffset-sm">
                                        <div class="col-lg-6 align-self-center col-sm-5 col-5">
                                            <div class="text-md-center text-lg-left">
                                                <img src="https://fwdmusic.com/img/youtube_logo.png" class="img-fluid img-protected logo-cal-style mx-auto d-block mg-sm" alt="youtube_logo">
                                            </div>
                                        </div>
                                        <div class="col-lg-6 align-self-center col-sm-7 col-7">
                                            <h2 class="cal-store-style mg-clear">
                                                Youtube
                                            </h2>
                                            <p class="currency mg-clear">US$ ${(numeroStreams.value*dolar.Yt).toFixed(2)}</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>`
    } else {
        window.alert('估算播放量不能为空。')
    }
}

效果对比

  • 预期效果:预期效果图
  • 实际效果:实际效果图

修复方案

可按以下顺序排查修复:

  1. 检查res外层容器的CSS规则,确认是否有max-width、padding、margin等属性覆盖了Bootstrap的栅格规则
  2. 检查动态渲染的DOM节点是否有未闭合的标签,标签不完整会导致Bootstrap栅格类不生效
  3. 确认Bootstrap样式文件的加载顺序早于自定义CSS和JS代码,避免动态渲染时类对应的样式还未加载
  4. 可给#stores-container手动加上width: 100% !important的强制样式,排除父容器宽度限制导致的内容压缩
  5. 检查是否有其他JS代码在渲染完成后修改了节点的样式属性

内容的提问来源于stack exchange,提问作者user12220646

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:03