gradio调用多个CSS的HTML页

发布于:2025-03-26 ⋅ 阅读:(54) ⋅ 点赞:(0)
很多博客介绍的gradio读取html和css比较简单,如果要做很细致的前端页面优化,比如丰富的响应式的css+js,至少要有html+多个css,是暂不能实现的。

bootstrap、font-awesome、jquery等


方案一当然是直接更换html+css为主的部署方式,仅用gradio传回的数据,重新设计前端
方案二可以考虑把多个css直接拼接后再生效,举例如下:

1. 原html

<!DOCTYPE html>
<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
<!-- BEGIN HEAD -->
<head>
   <meta charset="utf-8" />
   <title>404 Page</title>
   <meta content="width=device-width, initial-scale=1.0" name="viewport" />
   <meta content="" name="description" />
   <meta content="" name="author" />
   <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
   <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />
   <link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />
   <link href="css/style.css" rel="stylesheet" />
   <link href="css/style-responsive.css" rel="stylesheet" />
   <link href="css/style-default.css" rel="stylesheet" id="style_color" />
</head>
<!-- END HEAD -->
<!-- BEGIN BODY -->
<body class="error-404">
    <div class="error-wrap error-wrap-404">
        <div class="metro big terques">
           <span> OOPS! </span>
        </div>
        <div class="metro green">
            <span> 4 </span>
        </div>
        <div class="metro yellow">
            <span> 0 </span>
        </div>
        <div class="metro purple">
            <span> 4 </span>
        </div>
        <div class="metro double red">
            <span class="page-txt"> Page Not Found </span>
        </div>
        <div class="metro gray">
            <a href="index.html" class="home"><i class="icon-home"></i> </a>
        </div>

    </div>
</body>
<!-- END BODY -->
</html>

2.1 改后的gradio

import gradio as gr


def load_css(*filenames):
    css_content = []
    for file in filenames:
        with open(file, "r", encoding="utf-8") as f:
            css_content.append(f"<style>{f.read()}</style>")
    return "\n".join(css_content)


# 读取外部 HTML 文件
with open("metrolab/404.html", "r", encoding="utf-8") as f:
    html_content = f.read()

# # 读取外部 CSS 文件
# with open(load_css("metrolab/assets/bootstrap/css/bootstrap.min.css", "metrolab/assets/bootstrap/css/bootstrap-responsive.min.css",
#                      "metrolab/assets/font-awesome/css/font-awesome.css", "metrolab/css/style.css", "metrolab/css/style-responsive.css",
#                      "metrolab/css/style-default.css"), "r", encoding="utf-8") as f:
#     css_content = f.read()

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.HTML(load_css("custom-only.css", "metrolab/assets/bootstrap/css/bootstrap.min.css",
             "metrolab/assets/bootstrap/css/bootstrap-responsive.min.css",
             "metrolab/assets/font-awesome/css/font-awesome.css", "metrolab/css/style.css",
             "metrolab/css/style-responsive.css",
             "metrolab/css/style-default.css"))
    gr.HTML(html_content)

demo.launch()

2.2  改后的html

注意:可以注释掉css,其实还可以去掉html head body等标签

<!DOCTYPE html>
<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
<!-- BEGIN HEAD -->
<head>
   <meta charset="utf-8" />
   <title>404 Page</title>
   <meta content="width=device-width, initial-scale=1.0" name="viewport" />
   <meta content="" name="description" />
   <meta content="" name="author" />
<!--   <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet" />-->
<!--   <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />-->
<!--   <link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />-->
<!--   <link href="css/style.css" rel="stylesheet" />-->
<!--   <link href="css/style-responsive.css" rel="stylesheet" />-->
<!--   <link href="css/style-default.css" rel="stylesheet" id="style_color" />-->
</head>
<!-- END HEAD -->
<!-- BEGIN BODY -->
<body class="error-404">
    <div class="error-wrap error-wrap-404">
        <div class="metro big terques">
           <span> OOPS! </span>
        </div>
        <div class="metro green">
            <span> 4 </span>
        </div>
        <div class="metro yellow">
            <span> 0 </span>
        </div>
        <div class="metro purple">
            <span> 4 </span>
        </div>
        <div class="metro double red">
            <span class="page-txt"> Page Not Found </span>
        </div>
        <div class="metro gray">
            <a href="index.html" class="home"><i class="icon-home"></i> </a>
        </div>

    </div>
</body>
<!-- END BODY -->
</html>