簡體   English   中英

將CSS文件從React index.html鏈接到Flask后端

[英]Link CSS file from React index.html to Flask backend

我正在嘗試將CS​​S模板與Flask一起提供的一些靜態后端內容鏈接到我的React前端。

這是我的結構:

client/
      src/
         components/
                   menu.jsx
      public/
            index.html
web/
   project/
          api/
             routes/
                   templates/
                            menu.html
                            loading.html
                   static/
                         css/
                            bootstrap.css
                            mug.css

第一次嘗試時,我嘗試鏈接靜態內容,如下所示:

index.html

DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="{{url_for('static', filename='css/bootstrap.css')}}">
    <link rel="stylesheet" type="text/css" href="{{url_for('static', filename='css/mug.css')}}">    
    <title>My App</title>
  </head>
  <body>    
    <div id="root">
    </div>    
  </body>
</html>

上面沒有用。


我知道,如果我將所有CSS都放入“ client / public”中, bootstrap.css將可以工作,但是mug.css則不能,因為當“ menu.jsx”將后端模板作為整體,通過“ dangerouslysetHTML”進行,如下所示:

menu.jsx

render(){
    var menu_html = this.state.menu_template;
    var menu_template = { __html: menu_html };
    return (
        <div id="parent">
            <h1 className="title is-1"><font color="#C86428">Menu</font></h1>
            <hr/><br/>
            <div dangerouslySetInnerHTML={menu_template}/>
        </div>
    );       
}

所以:

menus.html

<a href="{{ url_for('loading') }}</a>

所以:

loading.html

<div class="cup">
  <div class="coffee"></div>
</div>
<div class="smoke"></div>
<p class="txt">Brewing...<br><small></small></p>

最后:

mug.css

@import url(https://fonts.googleapis.com/css?family=Josefin+Sans:100,400);

body {
  background:rgb(223,189,150);
  font-family: 'Josefin Sans', sans-serif;
  text-align:center;
}

.cup {
  width:76px;
  height:76px;
  background:#dedede;
  border-radius:50%;
  position:absolute;
  left:50%;
  margin-left:-38px;
  top:100px;
  box-shadow:-4px -1px 0 rgba(0,0,0,0.2);
}

.cup:after{
  content:"";
  width:66px;
  height:66px;
  position:absolute;
  border-radius:50%;
  background:linear-gradient(-45deg, #cbcbcb, #f2f2f2 );
  left:50%;
  margin-left:-33px;
  top:5px;
}

.coffee{
  width:47px;
  height:47px;
  background:#613317;
  /*background-image: linear-gradient(15deg, transparent 0px, transparent 29px, rgba(255,255,255,0.05) 29px, rgba(255,255,255,0.05) 47px);*/
  border-radius:50%;
  position:absolute;
  left:50%;
  margin-left:-25px;
  z-index:1;
  top:50%;
  margin-top:-26px;
  border:3px solid #e9e9e9;
  box-shadow:-3px 2px 0 rgba(0,0,0,0.1);
  transform:rotate(30deg);
  transition:transform 0.3s;
}

.coffee:after{ /*assa*/
 content:"";
  width:15px;
  height:8px;
  position:absolute;
  left:-19px;
  top:18px;
  background:linear-gradient(90deg, #d6d6d6, #aeaeae);
  box-shadow:0px 2px 0 rgba(0,0,0,0.2);
}

.coffee:before {
  content:"";
  width:47px;
  height:47px;
  background-image: radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 95%), radial-gradient(5% 9%, ellipse, rgba(255,255,255,0.1), transparent 5%), radial-gradient(0% 0%, ellipse, rgba(255,255,255,0.3), transparent 55%);
  background-image: -webkit-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 95%), -webkit-radial-gradient(5% 9%, ellipse, rgba(255,255,255,0.1), transparent 5%), -webkit-radial-gradient(0% 0%, ellipse, rgba(255,255,255,0.3), transparent 55%);
  background-image: -moz-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 95%), -moz-radial-gradient(5% 9%, ellipse, rgba(255,255,255,0.1), transparent 5%), -moz-radial-gradient(0% 0%, ellipse, rgba(255,255,255,0.3), transparent 55%);
  position:absolute;
  left:0;
  border-radius:50%;
}
.cup:hover .coffee {
  transform:rotate(15deg);
}

.smoke {
  width:70px;
  height:100px; 
  background:;
  position:absolute;
  left:50%;
  margin-left:-40px;
  top:43px;
  background-image: -webkit-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), -webkit-radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), -webkit-radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%), -webkit-radial-gradient(55% 35%, ellipse, rgba(255,255,255,0.2), transparent 15%);
  background-image: -moz-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), -moz-radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), -moz-radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%), -moz-radial-gradient(55% 35%, ellipse, rgba(255,255,255,0.2), transparent 15%);
  background-image: radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%), radial-gradient(55% 35%, ellipse, rgba(255,255,255,0.2), transparent 15%);
  animation:bk 11s infinite ;
}

.smoke:after {
  content:"";
  width:100px;
  height:100px; 
  background:;
  position:absolute;
  background-image: -webkit-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), -webkit-radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), -webkit-radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%);
  background-image: -moz-radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), -moz-radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), -moz-radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%);
  background-image: radial-gradient(75% 59%, ellipse, rgba(255,255,255,0.2), transparent 25%), radial-gradient(25% 70%, ellipse, rgba(255,255,255,0.2), transparent 15%), radial-gradient(35% 61%, ellipse, rgba(255,255,255,0.2), transparent 10%);
  animation:bk 2s 1s infinite;
}


@keyframes bk {
  0%{ background-position:0 0; opacity:0; }
  15%, 85% { opacity:1;}
  100%{ background-position:-20px -25px, -5px -25px, 0px -25px, 0px -25px; opacity:0;}
}

.txt{
  position:absolute;
  top:184px;
  width:150px;
  left:50%;
  margin-left:-75px;
}

.txt a{
  text-decoration:none;
  color:#613317;
}

.txt a:hover {
  text-decoration:underline;
}

題:

那么,如何將這個后端CSS鏈接到我的前端index.html,或者如何將其應用?

我不知道(更像我不認為),有一種方法可以使用正常的Jinja模板將Flask直接與react鏈接。 如果要使用像ReactJS這樣的前端框架,則必須使用兩個完全獨立的系統。

解決此問題的最佳方法通常是使用API​​。

使用要生成的API端點創建后端。 這可以通過Flask Restful完成。 API端點基本上將以JSON格式生成數據。

前端React JS可以使用API​​端點。 我沒有相應的鏈接,但是我敢肯定有很多在線資源。

現在,如果您需要在ReactJS端更改特定的CSS項,則可以發送特定的標志來指示您需要更改的內容,並且可以處理邏輯。 例如,您可以使用以下字段從后端生成端點:

{
    "user-team": "blue" 
}

在ReactJS上,可以進行邏輯檢查該特定字段並基於該字段更改特定元素的顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM