KarynaSakura 2024-04-24 21:13 采纳率: 41.7%
浏览 8
已结题

如何防止外部引入的CSS被SCSS覆盖?

外部引入的CSS不生效

img

/res/styles/global.cssrfs.scssreboot.scss 覆盖了

我对全局字体使用了 !important (至少生效了,要不然下面的图片会是微软雅黑的字体)

img

但是我不希望在其他地方使用 !important

我应该如何做才能够解决这个问题?(这不是浏览器问题,我已经尝试过Firefox和Edge了)

我无法在Bing上找到我需要的结果(见文末)


img

我希望的效果:

img

实际情况:

img


m1.html

<!DOCTYPE html>

<html>
    <head>
        <title>Set (*******)</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!--ICON-->
        <link rel="shortcut icon" href="/favision.ico" type="images/x-icon" />
        <!--Styles-->
        <link rel="stylesheet" href="/res/styles/global.css" type="text/css" />
        <link rel="stylesheet" href="/res/styles/index.css" type="text/css" />
        <!--BootStrap-->
        <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.1/css/bootstrap.min.css" rel="stylesheet">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.min.css" integrity="sha512-jnSuA4Ss2PkkikSOLtYs8BlYIeeIK1h99ty4YfvRPAlzr377vr3CXDb7sb7eEEBYjDtcYj+AjBH3FLv5uSJuXg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
        <!--Scripts-->
        <!--BootStrap-->
        <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.1/js/bootstrap.bundle.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.3/js/bootstrap.bundle.min.js" integrity="sha512-7Pi/otdlbbCR+LnW+F7PwFcSDJOuUJB3OxtEHbg4vSMvzvJjde4Po1v4BR9Gdc9aXNUNFVUY+SK51wWT8WF0Gg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        <!--Marked.js-->
        <script src="https://cdn.bootcdn.net/ajax/libs/marked/9.0.0/marked.min.js"></script>
    </head>
    <body>
        <div><p class="Title"><a href="/index.html">&gt;</a></p></div>
        <div class="text" id="content">
            Generating...
        </div>
    </body>
    <script src="/res/scripts/dfetch.js"></script>
    <script>
        GetT('/s/logic/m1.md').then((text)=>{
            document.getElementById('content').innerHTML = marked.parse(text)
        })
    </script>
</html>

m1.md

# Others

/res/styles/global.css


@font-face {
    font-family: 'Ubuntu-Sans-Mono';
    src: url("/res/fonts/UbuntuSansMono-Light derivative en-font.woff") format('woff');
    font-style: normal;
    font-weight: normal;
}

@font-face {
    font-family: 'QiushuiShotai';
    src: url(/res/fonts/QiushuiShotai.woff) format('woff');
    font-style: normal;
    font-weight: normal;
}


body {
    font-family: 'Ubuntu-Sans-Mono', QiushuiShotai !important ;
}

p.otherTitle {
    font-size: 3.2rem;
    color: #202020FF;
    text-shadow: 1px 1px #A0A0A0FF;
    margin: 0;
}

p {
    color: #FFFFFFFF;
}

a:link{
    color: #C0FFFF;
    text-decoration-line: none;
}

a:visited{
    color: #C0FFFF;
    text-decoration-line: none;
}

a:hover{
    color: #C0FFFF;
    text-decoration-line: none;
}

a:active{
    color: #C0FFFF;
    text-decoration-line: none;
}

hr {
    height: 4px;
}

h1,h2,h3,h4,h5,h6 {
    font-weight: normal;
    font-size: 3.2rem;
    color: #202020FF;
    text-shadow: 1px 1px #A0A0A0FF;
    margin: 0;
}

index.css


:root {
    --text-both-margin: 2em;
    --div-both-margin: 1em;
}

body {
    background-image: url(/res/Aimags/main.jpg);
    background-position: center center;
    background-attachment: fixed;
    background-size: cover;
    background-repeat: no-repeat;
}

div {
    color: #FFFFFFC0;
    margin: 0.5em;
    text-shadow: 1px 1px #FFC0FF;
    margin-left: var(--div-both-margin);
    margin-right: var(--div-both-margin);
    font-size: 1.6rem;
}

div.text {
    border-style: solid;
    border-radius: 12px 12px;
    border-width: 2px;
    border-color: #FFFFFFC0;
    background-color: #FFC0FF40;
    padding: 1rem;
}

div.text > p{
    margin: 0;
}

p.Title {
    font-size: 3.2rem;
    color: #202020FF;
    text-shadow: 1px 1px #A0A0A0FF;
    margin: 0;
}

dfetch.js


async function GetD(url){
    const response = await fetch(url)
    return await response.json()
}

async function GetT(url){
    const response = await fetch(url)
    if(response.ok){
        return await response.text()
    }else{
        return await response.statusText
    }
}

function WriteD(dat,did){
    for (const p in dat){
        e = document.createElement('p')
        e.className = 'links'
        l = document.createElement('a')
        l.href = dat[p]
        l.innerHTML = p
        e.appendChild(l)
        document.getElementById(did).appendChild(e)
    }
}

附即将更新的仓库:https://github.com/Qiong-Mengzi/Qiong-Mengzi.github.io

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-04-24 21:13
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    1. 图片1: 显示了CSS样式的层叠规则,其中提到了font-sizefont-weight等属性,以及媒体查询的使用。
    2. 图片2: 显示了body选择器的font-family属性,指定了字体族,并使用了!important声明。
    3. 图片3: 显示了“Others”文本,但没有提供具体内容。
    4. 图片4: 显示了“# Others”和“CSDN @KarynaSakura”,可能是指CSDN平台上的用户KarynaSakura。
    5. 图片5: 与图片3相同,显示了“Others”文本。
    6. 图片6: 显示了一个搜索结果页面,搜索关键词为“Styles defined in SCSS override external CSS styles”,并提供了一个链接到GeeksforGeeks的文章,该文章解释了CSS样式覆盖的工作原理。

    问题概括

    问题是关于如何防止由SCSS编译的CSS覆盖外部引入的全局CSS样式。用户希望全局字体样式能够生效,并且不想在其他地方使用!important声明。

    问题出现原因

    问题出现的原因是CSS的层叠性质,即后加载的CSS规则可能会覆盖先前加载的规则。在本例中,rfs.scssreboot.scss中的样式覆盖了全局CSS样式/global.css。用户尝试使用!important来强制全局CSS生效,但这并不是一个理想的解决方案,因为它可能导致CSS的特定性过高,难以维护。

    问题解决方案

    为了解决这个问题,可以采取以下几种方法:

    1. 提高选择器的特异性:通过使用更具体的选择器或添加多个类名来提高CSS规则的特异性,从而避免被SCSS覆盖。

    2. 使用后加载:将全局CSS文件放在HTML文档的底部,确保它在SCSS编译的CSS之后加载。

    3. 避免使用!important:尽量不要使用!important,因为它破坏了CSS的自然层叠和继承规则。

    4. 使用JavaScript动态应用样式:如果需要覆盖特定样式,可以使用JavaScript在页面加载后动态地应用样式。

    5. 重构CSS/SCSS:如果可能,重构SCSS文件,避免与全局CSS产生冲突。

    提供代码

    以下是修改后的CSS代码示例,使用更具体的选择器来防止样式被覆盖:

    /* global.css */
    body {
      font-family: 'Ubuntu-Sans-Mono', QiushuiShotai;
      /* 其他样式 */
    }
    
    p.otherTitle {
      font-size: 3.2rem;
      color: #202020FF;
      text-shadow: 1px 1px #A0A0A0FF;
      margin: 0;
    }
    
    /* 确保选择器足够具体,以防止被覆盖 */
    #content p.Title {
      font-size: 3.2rem;
      color: #202020FF;
      text-shadow: 1px 1px #A0A0A0FF;
      margin: 0;
    }
    

    示例代码运行方式

    将上述CSS代码放入全局CSS文件/global.css中,并确保它在HTML文档中最后加载。

    示例代码预期运行结果

    全局CSS样式将不会被SCSS编译的样式覆盖,页面将显示预期的字体和样式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络