静态页面转换为模板2

分析静态页面

静态vs动态

条目静态页面动态页面
网站内容固定不变经常变动
浏览器加载速度更快(无需向服务器发起请求)更慢
改变网站内容很难(修改或者创建新的HTML页面)简单(数据库中添加数据即可)
URL文件拓展.htm、.html.php、.asp、.jsp、.py
创建语言HTMLphp,java,python

本次项目页面分析

  • 本项目由5个模块组成,分别为:news,course,doc,users,admin
  • 在项目根目录下创建templates文件夹,用于存放模板文件,同时在templates文件夹下,分别创建news,course,doc,users文件夹用于存放每个应用模块的模板文件
  • 将提供的静态文件拖到对应的目录中
    在这里插入图片描述
  • 在项目根目录之中创建一个static目录用于保存静态文件(js,css,image等)
  • 将提供的静态文件(css,js,images目录)拖到static目录中
    在这里插入图片描述

模板抽取

  • 在templates文件夹下创建一个base目录用于存放每个静态文件中公共代码

base目录下的base.html

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  {% block meta %}{% endblock %}
  {% block title %}{% endblock %}
  <link rel="stylesheet" href="{% static 'css/base/reset.css' %}">
  <link rel="stylesheet" href="{% static 'css/base/common.css' %}">
  {% block link %}{% endblock %}
  <link rel="stylesheet" href="{% static 'css/base/side.css' %}">
  <link rel="stylesheet" href="http://at.alicdn.com/t/font_684044_un7umbuwwfp.css">
</head>
<body>
<!-- header start -->
<header id="header">
  <div class="mw1200 header-contain clearfix">
    <!-- logo start -->
    <h1 class="logo">
      <a href="javascript:void(0);" class="logo-title">Python</a>
    </h1>
    <!-- logo end -->
    <!-- nav start -->
    <nav class="nav">
      <ul class="menu">
        <li><a href="{% url 'news:index' %}">首页</a></li>
        <li><a href="{% url 'course:course' %}">在线课堂</a></li>
        <li><a href="{% url 'doc:docDownload' %}">下载文档</a></li>
        <li><a href="{% url 'news:search' %}">搜索</a></li>
      </ul>
    </nav>
    <!-- nav end -->
    <!-- login start -->
      <div class="login-box">
          <div>
              <i class="PyWhich py-user"></i>
              <span>
                  <a href="{% url 'users:login' %}" class="login">登录</a> / <a href="{% url 'users:register' %}"
                                                                          class="reg">注册</a>
              </span>
          </div>
          <div class="author hide">
              <i class="PyWhich py-user"></i>
              <span>qwertyui</span>
              <ul class="author-menu">
                  <li><a href="javascript:void(0);">后台管理</a></li>
                  <li><a href="javascript:void(0);">退出登录</a></li>
              </ul>
          </div>
      </div>
    <!-- login end -->
  </div>
</header>
<!-- header end -->

<!-- main start -->
{% block main %}
<main id="main">
  <div class="w1200 clearfix">
    <!-- main-contain start  -->
    {% block contain %}
    {% endblock %}
    <!-- main-contain  end -->
    <!-- side start -->
  {% block side %}
      <aside class="side">
          <div class="side-activities">
              <h3 class="activities-title">在线课堂<a href="javascript:void(0)">更多</a></h3>
              <div class="activities-img">
                  <a href="javascript:void(0);" target="_blank">
                      <img src="{% static 'img/english.jpg' %}" alt="title">
                  </a>
                  <p class="activities-tips">对话国外小姐姐</p>
              </div>
              <ul class="activities-list">
                  <li>
                      <a href="javascript:void(0);" target="_blank">
                          <span class="active-status active-start">报名中</span>
                          <span class="active-title"><a
                                  href="https://www.shiguangkey.com/course/2432"> Django 项目班</a></span>
                      </a>
                  </li>
                  <li>
                      <a href="javascript:void(0);" target="_blank">
                          <span class="active-status active-end">已结束</span>
                          <span class="active-title"><a
                                  href="https://www.shiguangkey.com/course/2321">Python入门基础班</a></span>
                      </a>
                  </li>
              </ul>
          </div>
          <div class="side-attention clearfix">
              <h3 class="attention-title">关注我</h3>
              <ul class="side-attention-address">
                  <li>
                      <a href="javascript:void(0);" target="_blank"><i class="PyWhich py-GitHub"></i>Taka</a>
                  </li>
                  <li>
                      <a href="javascript:void(0);" target="_blank"><i class="PyWhich py-zhihu"
                                                                       style="color:rgb(0, 108, 226);"></i>Taka</a>
                  </li>
                  <li>
                      <a href="javascript:void(0);" target="_blank"><i class="PyWhich py-weibo"
                                                                       style="color:rgb(245,92,110);"></i>Taka</a>
                  </li>
              </ul>
              <div class="side-attention-qr">
                  <p>扫码关注</p>
              </div>
          </div>

          <div class="side-hot-recommend">
              <h3 class="hot-recommend">热门推荐</h3>
              <ul class="hot-news-list">

                  <li>
                      <a href="javascript:void(0)" class="hot-news-contain clearfix">
                          <div class="hot-news-thumbnail">
                              <img src="{% static 'img/python_web.jpg' %}"
                                   alt="">
                          </div>
                          <div class="hot-news-content">
                              <p class="hot-news-title">Django调试工具django-debug-toolbar安装使用教程</p>
                              <div class="hot-news-other clearfix">
                                  <span class="news-type">python框架</span>
                                  <!-- 自带的 -->
                                  <time class="news-pub-time">11月11日</time>
                                  <span class="news-author">python</span>
                              </div>
                          </div>
                      </a>
                  </li>

              </ul>
          </div>


      </aside>
  {% endblock %}
    <!-- side end -->
  </div>
</main>
{% endblock %}
<!-- main end -->

<!-- footer start -->
<footer id="footer">
    <div class="footer-box">
        <div class="footer-content">
            <p class="top-content">
					<span class="link">
						<a href="javascript:void(0)">关于Python</a> |
						<a href="javascript:void(0)">我就是我</a> |
						<a href="javascript:void(0)">人生苦短</a> |
						<a href="javascript:void(0)">我用Python</a>
					</span>
                <span class="about-me">关于我: <i class="PyWhich py-wechat"></i> Taka</span>
            </p>
            <p class="bottom-content">
                <span>地址: xxxx</span>
                <span>联系方式: <a href="tel:400-1567-315">400-1567-315</a> (24小时在线)</span>
            </p>
        </div>
        <p class="copyright-desc">
            Copyright &copy; 2008 - 2019 xxx有限公司. All Rights Reserved
        </p>
    </div>
</footer>
<!-- footer end -->
{% block domready %}{% endblock %}
</body>
</html>

news

news下主页index.html

{% extends 'base/base.html' %}
{% load static %}
{% block title %}<title>IndexPage</title>{% endblock %}
{% block link %}
  <link rel="stylesheet" href="{% static 'css/news/index.css' %}">
{% endblock %}

  <!-- main-contain start  -->
{% block contain %}
  <div class="main-contain">
    <!-- banner start -->
      <div class="banner">
          <ul class="pic">
              <!--淡入淡出banner-->
              <li><a href="javascript:void(0);"><img src="{% static 'img/ui.png' %}" alt="test"></a></li>
              <li><a href="javascript:void(0);"><img src="{% static 'img/youxi.png' %}" alt="test"></a></li>
              <li><a href="javascript:void(0);"><img src="{% static 'img/dianshang.png' %}" alt="test"></a></li>


              <li><a href="javascript:void(0);"><img src="{% static 'img/zimeiti.png' %}" alt="test"></a></li>


              <li><a href="javascript:void(0);"><img src="{% static 'img/python_gui.jpg' %}" alt="test"></a></li>


              <li><a href="javascript:void(0);"><img src="{% static 'img/linux.jpg' %}" alt="test"></a></li>


          </ul>
          <a href="javascript:void(0);" class="btn prev">
              <i class="PyWhich py-arrow-left"></i></a>
          <a href="javascript:void(0);" class="btn next">
              <i class="PyWhich py-arrow-right"></i></a>
          <ul class="tab">
              <!-- 按钮数量必须和图片一致 -->


              <li></li>


              <li></li>


              <li></li>


              <li></li>


              <li></li>


              <li></li>


          </ul>
      </div>
    <!-- banner end -->

    <!-- content start -->
    <div class="content">
      <!-- recommend-news start -->
        <ul class="recommend-news">
            <li>
                <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                    <div class="recommend-thumbnail">
                        <img src="{% static 'img/python_gui.jpg' %}" alt="title">
                    </div>
                    <p class="info">Python GUI 教程 25行代码写一个小闹钟</p>
                </a>
            </li>

            <li>
                <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                    <div class="recommend-thumbnail">
                        <img src="{% static 'img/python_advanced.jpg' %}" alt="title">
                    </div>
                    <p class="info">python高性能编程方法一</p>
                </a>
            </li>

            <li>
                <a href="https://www.shiguangkey.com/course/2432" target="_blank">
                    <div class="recommend-thumbnail">
                        <img src="{% static 'img/jichujiaochen.jpeg' %}" alt="title">
                    </div>
                    <p class="info">python基础 split 和 join函数比较</p>
                </a>
            </li>
        </ul>
      <!-- recommend-news end -->

      <!--  news-nav start-->
        <nav class="news-nav">
            <ul class="clearfix">
                <li class="active"><a href="javascript:void(0)">最新资讯</a></li>

                <li><a href="javascript:void(0)" data-id="1">python框架</a>
                </li>

                <li><a href="javascript:void(0)" data-id="2">Python基础</a>
                </li>

                <li><a href="javascript:void(0)" data-id="3">Python高级</a>
                </li>

                <li><a href="javascript:void(0)" data-id="4">Python函数</a>
                </li>

                <li><a href="javascript:void(0)" data-id="5">PythonGUI</a>
                </li>

                <li><a href="javascript:void(0)" data-id="6">Linux教程</a>
                </li>

            </ul>
        </nav>
      <!--  news-nav end -->

      <!-- news-contain start -->
        <div class="news-contain">
            <ul class="news-list">

                <li class="news-item">
                    <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                       target="_blank">
                        <img src="{% static 'img/linux.jpg' %}" alt="linux查找文件或目录命令"
                             title="linux查找文件或目录命令">
                    </a>
                    <div class="news-content">
                        <h4 class="news-title"><a
                                href="#">linux查找文件或目录命令</a>
                        </h4>
                        <p class="news-details">linux查找文件或目录命令,前提:知道文件或者目录的具体名字,例如:sphinx.conffind 查找find / -name
                            dirname 查找目录find -name...</p>
                        <div class="news-other">
                            <span class="news-type">Linux教程</span>
                            <span class="news-time">11/11 18:24</span>
                            <span class="news-author">python</span>
                        </div>
                    </div>
                </li>

                <li class="news-item">
                    <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                       target="_blank">
                        <img src="{% static 'img/linux.jpg' %}" alt="linux下svn命令的使用"
                             title="linux下svn命令的使用">
                    </a>
                    <div class="news-content">
                        <h4 class="news-title"><a
                                href="https://www.shiguangkey.com/course/2432/887">linux下svn命令的使用</a>
                        </h4>
                        <p class="news-details">1、将文件checkout到本地目录svn checkout path(path是服务器上的目录) 例如:svn checkout
                            svn://192.168.1.1/pro/domain 简写:svn co2、往版本库中添加新的文件 svn addfile 例如:svn add te...</p>
                        <div class="news-other">
                            <span class="news-type">Linux教程</span>
                            <span class="news-time">11/11 18:24</span>
                            <span class="news-author">python</span>
                        </div>
                    </div>
                </li>

                <li class="news-item">
                    <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                       target="_blank">
                        <img src="{% static 'img/linux.jpg' %}" alt="实现linux和windows文件传输"
                             title="实现linux和windows文件传输">
                    </a>
                    <div class="news-content">
                        <h4 class="news-title"><a
                                href="https://www.shiguangkey.com/course/2432/886">实现linux和windows文件传输</a>
                        </h4>
                        <p class="news-details">
                            其实这个题目有点大,这里介绍的只是linux和windows文件传输中的一种,但是这种方法却非常实用,那就是:ZModem协议具体是linux命令是:rz...</p>
                        <div class="news-other">
                            <span class="news-type">Linux教程</span>
                            <span class="news-time">11/11 18:24</span>
                            <span class="news-author">python</span>
                        </div>
                    </div>
                </li>

                <li class="news-item">
                    <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                       target="_blank">
                        <img src="{% static 'img/linux.jpg' %}" alt=".htaccess配置详解"
                             title=".htaccess配置详解">
                    </a>
                    <div class="news-content">
                        <h4 class="news-title"><a
                                href="https://www.shiguangkey.com/course/2432">.htaccess配置详解</a>
                        </h4>
                        <p class="news-details">  .htaccess文件设置基础教程 如果你设置好了比如常用的404页面 301重定向 页面还有500页面等会设置了
                            无非对你的seo技术有很大帮助那么 .htaccess文件到底怎么设置呢  - .htaccess 文件(或者&quot;分布式...</p>
                        <div class="news-other">
                            <span class="news-type">Linux教程</span>
                            <span class="news-time">11/11 18:24</span>
                            <span class="news-author">python</span>
                        </div>
                    </div>
                </li>

                <li class="news-item">
                    <a href="https://www.shiguangkey.com/course/2432" class="news-thumbnail"
                       target="_blank">
                        <img src="{% static 'img/linux.jpg' %}" alt="使用nohup命令让linux程序后台运行"
                             title="使用nohup命令让linux程序后台运行">
                    </a>
                    <div class="news-content">
                        <h4 class="news-title"><a
                                href="https://www.shiguangkey.com/course/2432">使用nohup命令让linux程序后台运行</a>
                        </h4>
                        <p class="news-details">使用nohup让程序永远后台运行Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 &amp;
                            在程序结尾来让程序自动运行。比如我们要运行mysql在后台:/usr/local/mysql/bin/mysqld_safe --user=mysql &amp;但是...</p>
                        <div class="news-other">
                            <span class="news-type">Linux教程</span>
                            <span class="news-time">11/11 18:24</span>
                            <span class="news-author">python</span>
                        </div>
                    </div>
                </li>

            </ul>
        </div>
      <!-- news-contain end -->

      <!-- btn-more start -->
      <a href="javascript:void(0);" class="btn-more">加载更多</a>
      <!-- btn-more end -->
    </div>
    <!-- content end -->
  </div>
{% endblock %}
    <!-- main-contain  end -->

<!-- main end -->

<!-- footer start -->

<!-- footer end -->
{% block domready %}
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
  <script src="{% static 'js/commons.js' %}"></script>
  <script src="{% static 'js/index.js' %}"></script>
{% endblock %}

news下的new_detail.html

{% extends 'base/base.html' %}
{% load static %}
{% block meta %}
<meta name="renderer" content="webkit">
  <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
{% endblock %}
  {% block title %}<title>news-detail</title>{% endblock %}
  {% block link %}<link rel="stylesheet" href="{% static 'css/news/news-detail.css' %}">{% endblock %}
  {% block contain %}
    <div class="news-contain">
      <h1 class="news-title">我就说我</h1>
      <div class="news-info">
        <div class="news-info-left">
          <span class="news-author">作者</span>
          <span class="news-pub-time">1小时前</span>
          <span class="news-type">类型</span>
        </div>
      </div>
      <article class="news-content">
        文章内容
      </article>
      <div class="comment-contain">
        <div class="comment-pub clearfix">
          <div class="new-comment">
            文章评论(<span class="comment-count">0</span>)
          </div>
          <div class="comment-control please-login-comment" style="display:none;">
            <input type="text" placeholder="请登录后参加评论">
          </div>
          <div class="comment-control logged-comment">
            <input type="text" placeholder="请填写评论">
          </div>
          <button class="comment-btn">发表评论</button>
        </div>
        <ul class="comment-list">
          <li class="comment-item">
            <div class="comment-info clearfix">
              <img src="../images/avatar.jpeg" alt="avatar" class="comment-avatar">
              <span class="comment-user">评论人</span>
              <span class="comment-pub-time">1小时前</span>
            </div>
            <div class="comment-content">这是一条评论</div>
          </li>
          <li class="comment-item">
            <div class="comment-info clearfix">
              <img src="../images/avatar.jpeg" alt="avatar" class="comment-avatar">
              <span class="comment-user">评论人</span>
              <span class="comment-pub-time">1小时前</span>
            </div>
            <div class="comment-content">这是一条评论</div>
          </li>
        </ul>
      </div>

    </div>
    <!-- side end -->
  {% endblock %}

news下search.html

    {% extends 'base/base.html' %}
    {% load static %}
    {% block title %}<title>searchPage</title>{% endblock %}
    {% block link %}<link rel="stylesheet" href="{% static 'css/news/search.css' %}">{% endblock %}
        {% block contain %}
        <div class="main-contain ">
            <!-- search-box start -->
            <div class="search-box">
                <form action="" style="display: inline-flex;">

                    <input type="search" placeholder="请输入要搜索的内容" name="q" class="search-control">


                    <input type="submit" value="搜索" class="search-btn">
                </form>
                <!-- 可以用浮动 垂直对齐 以及 flex  -->
            </div>
            <!-- search-box end -->
            <!-- content start -->
            <div class="content">
                <!-- search-list start -->


                <!-- search-list end -->
                <!-- news-contain start -->

                <div class="news-contain">
                    <div class="hot-recommend-list">
                        <h2 class="hot-recommend-title">热门推荐</h2>
                        <ul class="news-list">

                            <li class="news-item clearfix">
                                <a href="#" class="news-thumbnail">
                                    <img src="{% static 'img/python_gui.jpg' %}">
                                </a>
                                <div class="news-content">
                                    <h4 class="news-title">
                                        <a href="#">Python GUI 教程 25行代码写一个小闹钟</a>
                                    </h4>
                                    <p class="news-details">
                                    </p>
                                    <div class="news-other">
                                        <span class="news-type">PythonGUI</span>
                                        <span class="news-time">11/11 18:22</span>
                                        <span class="news-author">python</span>
                                    </div>
                                </div>
                            </li>

                            <li class="news-item clearfix">
                                <a href="#" class="news-thumbnail">
                                    <img src="{% static 'img/python_advanced.jpg' %}">
                                </a>
                                <div class="news-content">
                                    <h4 class="news-title">
                                        <a href="#">python高性能编程方法一</a>
                                    </h4>
                                    <p class="news-details">
                                    </p>
                                    <div class="news-other">
                                        <span class="news-type">Python高级</span>
                                        <span class="news-time">11/11 17:13</span>
                                        <span class="news-author">python</span>
                                    </div>
                                </div>
                            </li>

                            <li class="news-item clearfix">
                                <a href="#" class="news-thumbnail">
                                    <img src="{% static 'img/jichujiaochen.jpeg' %}">
                                </a>
                                <div class="news-content">
                                    <h4 class="news-title">
                                        <a href="#">python基础 split 和 join函数比较</a>
                                    </h4>
                                    <p class="news-details">
                                    </p>
                                    <div class="news-other">
                                        <span class="news-type">Python基础</span>
                                        <span class="news-time">11/11 16:09</span>
                                        <span class="news-author">python</span>
                                    </div>
                                </div>
                            </li>

                            <li class="news-item clearfix">
                                <a href="#" class="news-thumbnail">
                                    <img src="{% static 'img/python_web.jpg' %}">
                                </a>
                                <div class="news-content">
                                    <h4 class="news-title">
                                        <a href="#">Django调试工具django-debug-toolbar安装使用教程</a>
                                    </h4>
                                    <p class="news-details">
                                    </p>
                                    <div class="news-other">
                                        <span class="news-type">python框架</span>
                                        <span class="news-time">11/11 15:28</span>
                                        <span class="news-author">python</span>
                                    </div>
                                </div>
                            </li>

                        </ul>
                    </div>
                </div>


                <!-- news-contain end -->
            </div>
            <!-- content end -->
        </div>
        {% endblock %}
        <!-- main-contain  end -->
{% block domready %}
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="{% static 'js/commons.js' %}"></script>
<script src="{% static 'js/index.js' %}"></script>
{% endblock %}

doc

doc下docDownload.html

{% extends 'base/base.html' %}
{% load static %}
{% block title %}<title>payInfo</title>{% endblock %}
{% block link %}<link rel="stylesheet" href="{% static 'css/doc/docDownload.css' %}">{% endblock %}
<!-- main start -->
{% block contain %}
<!-- main-contain start  -->
  <div class="main-contain ">
  <div class="banner">
      <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1802845035,3786939119&fm=26&gp=0.jpg"
           alt="">
  </div>
  <div class="pay-doc-contain">
      <ul class="pay-list">

          <li class="pay-item">
              <div class="pay-img doc"></div>
              <div class="d-contain">
                  <p class="doc-title">python cookbook 3.0 教程</p>
                  <p class="doc-desc">强烈推荐的python 教程。</p>

                  <!-- /www/?xxx -->
                  <a href="#" class="pay-price">下载</a>
              </div>
          </li>

          <li class="pay-item">
              <div class="pay-img doc"></div>
              <div class="pay-contain">
                  <p class="pay-title">流畅的Python</p>
                  <p class="pay-desc">【本书特色】

                      本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex
                      Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python
                      2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。</p>

                  <!-- /www/?xxx -->
                  <a href="#" class="pay-price">下载</a>
              </div>
          </li>

          <li class="pay-item">
              <div class="pay-img doc"></div>
              <div class="pay-contain">
                  <p class="pay-title">深入Flask</p>
                  <p class="pay-desc">深入Flask,强烈推荐!</p>

                  <!-- /www/?xxx -->
                  <a href="#" class="pay-price">下载</a>
              </div>
          </li>

      </ul>
  </div>
</div>
{% endblock %}
{% block domready %}
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
  <script src="{% static 'js/commons.js' %}"></script>
{% endblock %}

users

users下的login.html

{% extends 'base/base.html' %}
{% load static %}
  {% block title %}<title>LoginPage</title>{% endblock %}
  {% block link %}<link rel="stylesheet" href="{% static 'css/authPro/auth.css' %}">{% endblock %}
{% block main %}
<main id="container">
  <div class="login-contain">
    <div class="top-contain">
      <h4 class="please-login">请登录</h4>
      <a href="javascript:void(0);" class="register">立即注册 &gt;</a>
    </div>
    <form action="" method="post" class="form-contain">
      <div class="form-item">
        <input type="tel" placeholder="请输入手机号" name="telephone" class="form-control" autocomplete="off">
      </div>
      <div class="form-item">
        <input type="password" placeholder="请输入密码" name="password" class="form-control">
      </div>
      <div class="form-item clearfix">
        <label>
          <input type="checkbox" name="remember">
          <span>记住我</span>
        </label>
        <a href="javascript:void(0);" class="forget-password">忘记密码?</a>
      </div>
      <div class="form-login">
        <input type="submit" value="登录" class="login-btn">
      </div>
    </form>
  </div>
</main>
{% endblock %}

users下的register

{% extends 'base/base.html' %}
{% load static %}
  {% block title %}<title>RegisterPage</title>{% endblock %}
  {% block link %}<link rel="stylesheet" href="{% static 'css/authPro/auth.css' %}">{% endblock %}
{% block main %}
<main id="container">
  <div class="register-contain">
    <div class="top-contain">
      <h4 class="please-register">请注册</h4>
      <a href="javascript:void(0);" class="login">立即登录 &gt;</a>
    </div>
    <form action="" method="post" class="form-contain">
      <div class="form-item">
        <input type="text" placeholder="请输入用户名" id="user_name" name="username" class="form-control" autocomplete="off">
      </div>
      <div class="form-item">
        <input type="password" placeholder="请输入密码" id="pwd" name="password" class="form-control">
      </div>
      <div class="form-item">
        <input type="password" placeholder="请输入确认密码" name="password_repeat" class="form-control">
      </div>
      <div class="form-item">
        <input type="tel" placeholder="请输入手机号" id="mobile" name="telephone" class="form-control" autocomplete="off" autofocus>
      </div>
      <div class="form-item">
        <input type="text" placeholder="请输入图形验证码" id="input_captcha" name="captcha_graph" class="form-captcha">
        <a href="javascript:void(0);" class="captcha-graph-img">
          <img src="{% static 'img/captcha.png' %}" alt="验证码" title="点击刷新">
        </a>
      </div>
      <div class="form-item">
        <input type="text" placeholder="请输入短信验证码" name="sms_captcha" class="form-captcha" id="input_smscode" autocomplete="off">
        <a href="javascript:void(0);" class="sms-captcha" title="发送验证码">获取短信验证码</a>
      </div>
      <div class="form-item">
        <input type="submit" value="立即注册" class="register-btn">
      </div>
    </form>
  </div>
</main>
{% endblock %}

course

course下的course.html

{% extends 'base/base.html' %}
{% load static %}
  {% block title %}<title>coursePage</title>{% endblock %}
  {% block link %}<link rel="stylesheet" href="{% static 'css/course/course.css' %}">{% endblock %}
{% block main %}
<main id="course-container">
        <div class="w1200">
            <ul class="course-list">

                <li class="course-item">
                    <a href="https://www.shiguangkey.com/course/2432">
                        <img class="course-img" src="{% static 'img/python_advanced.jpg' %}"
                            alt="潭州英语">
                        <div class="course-content">
                            <p class="course-info">python 全栈开发</p>
                            <p class="course-author">不动(python金牌讲师)</p>
                            <p class="course-price free">免费</p>
                        </div>
                    </a>
                </li>

                <li class="course-item">
                    <a href="https://www.shiguangkey.com/course/2432">
                        <img class="course-img" src="{% static 'img/python_web.jpg' %}"
                            alt="潭州英语">
                        <div class="course-content">
                            <p class="course-info">django 项目</p>
                            <p class="course-author">Taka(python讲师)</p>
                            <p class="course-price free">免费</p>
                        </div>
                    </a>
                </li>

            </ul>
        </div>
    </main>
{% endblock %}
{% block domready %}
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script src="{% static 'js/commons.js' %}"></script>
{% endblock %}

course下的course_detail.html

{% extends 'base/base.html' %}
{% load static %}
{% block meta %}
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta name="author" content="handsomeFu"/>
{% endblock %}
{% block title %}<title>课程详情页</title>{% endblock %}
  {% block link %}<link rel="stylesheet" href="{% static 'css/course/course_detail.css' %}">{% endblock %}
{% block main %}
<main id="main">
  <div class="w1200">
    <div class="course-contain">
      <div class="course-top-contain">
        <h4 class="course-title">课程标题</h4>
        <div class="course-other clearfix">
          <div class="share-list">
            <span>分享至:</span>
            <i class="PyWhich py-weibo"></i>
            <i class="PyWhich py-weibo2"></i>
          </div>
          <div class="buy-list">
            <span class="price">免费</span>
          </div>
        </div>
      </div>
      <div class="course-video" id="course-video">
      </div>
      <div class="course-bottom-contain">
        <div class="course-detail-list">
          <div class="course-item clearfix">
            <h5 class="course-title">课程讲师</h5>
            <div class="teacher-box clearfix">
              <img src="{% static 'img/avatar.jpeg' %}" alt="Which"
                   title="Which" class="teacher-avatar">
              <div class="teacher-info">
                <p class="teacher-name">Tuple</p>
                <p class="teacher-identify"> 人生苦短</p>
              </div>
            </div>
            <div class="item-content">
              人生苦短人生苦短人生苦短人生苦短人生苦短
            </div>
          </div>
          <div class="course-item clearfix">
            <h5 class="course-title">课程简介</h5>
            <div class="item-content">
              人生苦短人生苦短人生苦短人生苦短人生苦短
            </div>
          </div>
          <div class="course-item clearfix">
            <h5 class="course-title">课程大纲</h5>
            <div class="item-content">
              <p>人生苦短人生苦短人生苦短人生苦短</p>
            </div>
          </div>
          <div class="course-item clearfix">
            <h5 class="course-title">帮助中心</h5>
            <div class="item-content">
              <p>1. 购买后的课程在线可反复观看学习,视频有效期以具体课程信息为准。 </p>
              <p>2. 课程暂不支持下载观看,均为在线观看视频。 </p>
              <p>3. 课程一经购买,不可转让、不可退款;仅限购买账号观看。</p>
              <p>4. 如有问题请咨询客服: 400-1567-315 </p>
            </div>
          </div>
          <div class="course-item clearfix">
            <h5 class="course-title">关于潭州课堂</h5>
            <div class="item-content">
              湖南潭州教育网络科技有限公司拥有千余人的优秀师资团队,是一家师资丰富、教育产品类别众多的在线培训公司。公司总部座落于美丽的星城长沙,2015年9月正式入驻芯城科技园目前拥有近两万平米办公面积。
              在潭州学习的学员已突破1000万人次在线学员覆盖全球,包括中国、加拿大、日本、美国、韩国等诸多国家。
            </div>
          </div>
          <div class="course-item clearfix">
            <div class="item-content">
              <div class="item-course-title">123</div>
              <div class="item-buy-list">
                <span class="price">免费</span>
              </div>
            </div>
          </div>
        </div>
        <div class="course-side">
          <h4 class="side-title">推荐课程</h4>
        </div>
      </div>
    </div>
  </div>
</main>
<!-- main end -->
{% endblock %}

css

css/authPro

css/authPro/auth.css

/*========= container start =========*/
#container {
  flex: 1;
  margin: 30px auto 20px;
}

.login-contain {
  width: 480px;
  height: 380px;
  box-sizing: border-box;
  padding: 0 20px;
  background: #ffffff;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}

.register-contain {
  width: 480px;
  height: 590px;
  box-sizing: border-box;
  padding: 0 20px;
  background: #ffffff;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}

.forget-contain {
  width: 480px;
  height: 430px;
  box-sizing: border-box;
  padding: 0 20px;
  background: #ffffff;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}

#container .top-contain {
  height: 50px;
  font-size: 20px;
  line-height: 50px;
  border-bottom: 1px solid #ddd;
}

#container .top-contain .please-login,
#container .top-contain .please-register,
#container .top-contain .forget-repeat {
  font-weight: normal;
  float: left;
  border-bottom: 3px solid blueviolet;
  height: 50px;
  box-sizing: border-box;
}

#container .top-contain a.register,
#container .top-contain a.login {
  float: right;
  color: skyblue;
}

#container .form-contain .form-item {
  margin-top: 20px;
}
#container .form-contain .form-login {
  margin-top: 40px;
}
.form-contain .form-item .form-control {
  width: 100%;
  height: 50px;
  border-radius: 5px;
  border: 1px solid #ddd;
  box-sizing: border-box;
  padding-left: 0.5em;
  font-size: 18px;
}

.form-contain .form-item .form-control::placeholder {
  line-height: 50px;
  font-size: 18px;
}

.form-contain .form-item label {
  float: left;
  font-size: 14px;
}

.form-contain .form-item label input[name=remember] {
  vertical-align: top;
  margin-right: 6px;
}
.form-contain .form-item label input[name=remember]+span {
  line-height: 18px;
}
.form-contain .form-item .forget-password {
  float: right;
  color: gray;
}

.form-contain .login-btn,
.form-contain .register-btn,
.form-contain .done-btn {
  width: 100%;
  font-size: 20px;
  color: #fff;
  line-height: 50px;
  background: deepskyblue;
  border: 1px solid deepskyblue;
  border-radius: 5px;
  cursor: pointer;
}
/*========= container end =========*/

/*============= captcha start ================*/
.form-contain .form-item .form-captcha {
  width: 306px;
  margin-right: 10px;
  height: 50px;
  border-radius: 5px;
  border: 1px solid #ddd;
  box-sizing: border-box;
  padding-left: 0.5em;
  font-size: 18px;
}

.form-contain .form-item .sms-captcha {
  float: right;
  width: 120px;
  line-height: 48px;
  text-align: center;
  background: #ffffff;
  color: #5d5dca;
  font-size: 15px;
  border: 1px solid #9090fb;
  border-radius: 5px;
}
.form-contain .form-item .sms-captcha[disabled]{
  cursor: not-allowed;
  background-color: #eee;
  border: 1px solid #eee;
  color: grey;
}
.form-contain .form-item .captcha-graph-img {
  float: right;
  width: 120px;
  height: 48px;
  text-align: center;
  font-size: 15px;
  border: 1px solid #3fdaf3;
  border-radius: 5px;
}
.form-contain .form-item .captcha-graph-img img {
  width: 100%;
}
/*============= captcha end ================*/

css/base

css/base/common.css

/*body {*/
/*    background: #e8dede;*/
/*    display: flex;*/
/*    flex-direction: column;*/
/*    min-height: 100vh;*/
/*    user-select: none;*/
/*}*/
/*.w1200 {*/
/*    width: 1200px;*/
/*    margin-left: auto;*/
/*    margin-right: auto;*/
/*}*/
/*.mw1200 {*/
/*    max-width: 1200px;*/
/*    margin-left: auto;*/
/*    margin-right: auto;*/
/*}*/
/*!* ================= header start ================= *!*/
/*#header {*/
/*    height: 64px;*/
/*    background: #141414;*/
/*    color: #fff;*/
/*    line-height: 64px;*/
/*}*/
/*!* ========= logo start ============ *!*/
/*#header .header-contain .logo {*/
/*    width: 235px;*/
/*    height: 64px;*/
/*    float: left;*/
/*}*/
/*.header-contain .logo .logo-title {*/
/*    display: block;*/
/*    font-size: 0;*/
/*    width: 100%;*/
/*    height: 100%;*/
/*    background: url(https://www.python.org/static/img/python-logo.png) 0 -8px;*/
/*}*/
/*!* ========= logo end ============ *!*/

/*!* ========= nav start ============ *!*/
/*#header .header-contain .nav {*/
/*    float: left;*/
/*    margin-left: 40px;*/
/*}*/
/*.header-contain .nav .menu {*/
/*    width: 380px;*/
/*    display: flex;*/
/*    justify-content: center;*/

/*}*/
/*.nav .menu li {*/
/*    height: 64px;*/
/*    padding: 0 20px;*/
/*    box-sizing: border-box;*/
/*}*/
/*.nav .menu li a{*/
/*    display: block;*/
/*    font-size: 15px;*/
/*}*/
/*.nav .menu li:hover {*/
/*    background: #0e0e0e;*/
/*    border-bottom: 4px solid #a7ca1b;*/
/*}*/
/*.nav .menu li.active {*/
/*    background: #0e0e0e;*/
/*    border-bottom: 4px solid #a7ca1b;*/
/*}*/
/*!* ========= nav end ============ *!*/
/*!* ========= login start ============ *!*/
/*.header-contain .login-box {*/
/*    float: right;*/
/*}*/
/*.login-box .py-user {*/
/*    font-size: 30px;*/
/*}*/
/*.login-box span{*/
/*    vertical-align: 4px;*/
/*}*/
/*.login-box .login:hover, .reg:hover {*/
/*    text-shadow: 1.5px 1.5px 3px rgba(255, 255, 255, 0.88);*/
/*}*/
/*.login-box .author {*/
/*    float: right;*/
/*    position: relative;*/
/*    cursor: pointer;*/
/*}*/

/*.login-box .author .author-menu {*/
/*    display: none;*/
/*    width: 120px;*/
/*    position: absolute;*/
/*    top: 64px;*/
/*    left: -15px;*/
/*    background: #fff;*/
/*    text-align: center;*/
/*    line-height: 45px;*/
/*    box-shadow: 0 1px 2px #ccc;*/
/*    border-radius: 5px;*/
/*    z-index: 1;*/
/*}*/

/*.login-box .author .author-menu li a {*/
/*    display: block;*/
/*    color: #7493c5;*/
/*}*/

/*.login-box .author:hover .author-menu {*/
/*    display: block;*/
/*}*/

/*.login-box .author .author-menu li:hover {*/
/*    background: #e4e4e4;*/
/*}*/

/*.login-box .author .author-menu::after {*/
/*    content: "";*/
/*    border: 12px solid transparent;*/
/*    border-bottom-color: #fff;*/
/*    position: absolute;*/
/*    top: -24px;*/
/*    left: 50px;*/
/*}*/
/*!* ========= login end ============ *!*/
/*!* ================= header end ================= *!*/

/*!* ================= footer start ================= *!*/
/*#footer {*/
/*    background: rgb(83, 94, 103);*/
/*}*/
/*#footer .footer-box {*/
/*    text-align: center;*/
/*    color: #c1c1c1;*/
/*}*/
/*#footer .footer-box .footer-content {*/
/*    height: 120px;*/
/*    line-height: 30px;*/
/*    padding-top: 25px;*/
/*    padding-left: 60px;*/
/*    box-sizing: border-box;*/
/*    background: url(https://www.python.org/static/img/python-logo.png) no-repeat 50px 20px;*/
/*}*/
/*.footer-content .top-content .link {*/
/*    margin-right: 23px;*/
/*}*/
/*.footer-box .footer-content .top-content span.about-me .py-wechat {*/
/*    font-size: 24px;*/
/*    color: #fff;*/
/*    vertical-align: -4px;*/
/*}*/
/*.footer-box .footer-content .bottom-content span:first-child {*/
/*    margin-right: 20px;*/
/*}*/
/*#footer .footer-box .copyright-desc {*/
/*    line-height: 60px;*/
/*    background: rgb(55, 60, 70);*/
/*}*/
/*!* ================= footer end ================= *!*/
body {
    background: #e8dede;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    user-select: none;
}
.w1200 {
    width: 1200px;
    margin-left: auto;
    margin-right: auto;
}
.mw1200 {
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
}
/* ================= header start ================= */
#header {
    height: 64px;
    background: #141414;
    color: #fff;
    line-height: 64px;
}
/* ========= logo start ============ */
#header .header-contain .logo {
    width: 235px;
    height: 64px;
    float: left;
}
.header-contain .logo .logo-title {
    display: block;
    font-size: 0;
    width: 100%;
    height: 100%;
    background: url(https://www.python.org/static/img/python-logo.png) 0 -8px;
}
/* ========= logo end ============ */

/* ========= nav start ============ */
#header .header-contain .nav {
    float: left;
    margin-left: 40px;
}
.header-contain .nav .menu {
    width: 380px;
    display: flex;
    justify-content: center;

}
.nav .menu li {
    height: 64px;
    padding: 0 20px;
    box-sizing: border-box;
}
.nav .menu li a{
    display: block;
    font-size: 15px;
}
.nav .menu li:hover {
    background: #0e0e0e;
    border-bottom: 4px solid #a7ca1b;
}
.nav .menu li.active {
    background: #0e0e0e;
    border-bottom: 4px solid #a7ca1b;
}
/* ========= nav end ============ */
/* ========= login start ============ */
.header-contain .login-box {
    float: right;
}
.login-box .py-user {
    font-size: 30px;
}
.login-box span{
    vertical-align: 4px;
}
.login-box .login:hover, .reg:hover {
    text-shadow: 1.5px 1.5px 3px rgba(255, 255, 255, 0.88);
}
.login-box .author {
    float: right;
    position: relative;
    cursor: pointer;
}

.login-box .author .author-menu {
    display: none;
    width: 120px;
    position: absolute;
    top: 64px;
    left: -15px;
    background: #fff;
    text-align: center;
    line-height: 45px;
    box-shadow: 0 1px 2px #ccc;
    border-radius: 5px;
    z-index: 1;
}

.login-box .author .author-menu li a {
    display: block;
    color: #7493c5;
}

.login-box .author:hover .author-menu {
    display: block;
}

.login-box .author .author-menu li:hover {
    background: #e4e4e4;
}

.login-box .author .author-menu::after {
    content: "";
    border: 12px solid transparent;
    border-bottom-color: #fff;
    position: absolute;
    top: -24px;
    left: 50px;
}
/* ========= login end ============ */
/* ================= header end ================= */

/* ================= footer start ================= */
#footer {
    background: rgb(83, 94, 103);
}
#footer .footer-box {
    text-align: center;
    color: #c1c1c1;
}
#footer .footer-box .footer-content {
    height: 120px;
    line-height: 30px;
    padding-top: 25px;
    padding-left: 60px;
    box-sizing: border-box;
    background: url(https://www.python.org/static/img/python-logo.png) no-repeat 50px 20px;
}
.footer-content .top-content .link {
    margin-right: 23px;
}
.footer-box .footer-content .top-content span.about-me .py-wechat {
    font-size: 24px;
    color: #fff;
    vertical-align: -4px;
}
.footer-box .footer-content .bottom-content span:first-child {
    margin-right: 20px;
}
#footer .footer-box .copyright-desc {
    line-height: 60px;
    background: rgb(55, 60, 70);
}
/* ================= footer end ================= */

css/base/reset.css

/*!**/
/*    reset css*/
/**!*/
/*html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr,*/
/*acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small,*/
/*strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset,*/
/*form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside,*/
/*canvas, details, embed, figure, figcaption, footer, header, hgroup, main, menu, nav,*/
/*output, ruby, section, summary, time, mark, audio, video {*/
/*    margin: 0;*/
/*    padding: 0;*/
/*    border: 0;*/
/*    font-size: 100%;*/
/*    font: inherit;*/
/*    vertical-align: baseline;*/
/*}*/
/*input, input:focus {*/
/*    outline: none;*/
/*}*/
/*!* HTML5 display-role reset for older browsers *!*/
/*article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section {*/
/*    display: block;*/
/*}*/
/*!* HTML5 hidden-attribute fix for newer browsers *!*/
/**[hidden] {*/
/*    display: none;*/
/*}*/

/*body {*/
/*    line-height: 1;*/
/*}*/

/*ol, ul {*/
/*    list-style: none;*/
/*}*/

/*a {*/
/*    text-decoration: none;*/
/*    color: inherit;*/
/*}*/

/*blockquote, q {*/
/*    quotes: none;*/
/*}*/

/*blockquote:before, blockquote:after, q:before, q:after {*/
/*    content:'';*/
/*    content: none;*/
/*}*/

/*table {*/
/*    border-collapse: collapse;*/
/*    border-spacing: 0;*/
/*}*/

/*.clearfix::after {*/
/*    content: "";*/
/*    clear: both;*/
/*    display: block;*/
/*}*/

/*.hide {*/
/*    display: none!important;*/
/*}*/
/*
    reset css
*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr,
acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small,
strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset,
form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside,
canvas, details, embed, figure, figcaption, footer, header, hgroup, main, menu, nav,
output, ruby, section, summary, time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
input, input:focus {
    outline: none;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section {
    display: block;
}
/* HTML5 hidden-attribute fix for newer browsers */
*[hidden] {
    display: none;
}

body {
    line-height: 1;
}

ol, ul {
    list-style: none;
}

a {
    text-decoration: none;
    color: inherit;
}

blockquote, q {
    quotes: none;
}

blockquote:before, blockquote:after, q:before, q:after {
    content:'';
    content: none;
}

table {
    border-collapse: collapse;
    border-spacing: 0;
}

.clearfix::after {
    content: "";
    clear: both;
    display: block;
}

.hide {
    display: none!important;
}

css/base/side.css

/*!* ========= side start ============ *!*/
/*#main .side {*/
/*    width: 360px;*/
/*    float: right;*/
/*    background: #fff;*/
/*    font-size: 14px;*/
/*    color: #555;*/
/*    margin-bottom: 30px;*/
/*}*/
/*!* ==== side-activities start ==== *!*/
/*.side .side-activities .activities-title {*/
/*    font-size: 18px;*/
/*    line-height: 60px;*/
/*    padding: 0 20px;*/
/*}*/
/*.side .side-activities .activities-title a {*/
/*    font-size: 14px;*/
/*    float: right;*/
/*    color: skyblue;*/
/*}*/
/*.side .side-activities .activities-img {*/
/*    width: 320px;*/
/*    height: 215px;*/
/*    position: relative;*/
/*    margin: 0 20px 20px;*/
/*}*/
/*.side-activities .activities-img img {*/
/*    width: 100%;*/
/*    height: 100%;*/
/*}*/
/*.side-activities .activities-img .activities-tips{*/
/*    position: absolute;*/
/*    left: 0;*/
/*    bottom: 0;*/
/*    width: 100%;*/
/*    background: rgba(0, 0, 0, 0.55);*/
/*    line-height: 40px;*/
/*    font-size: 16px;*/
/*    color: #fff;*/
/*    padding-left: 20px;*/
/*    box-sizing: border-box;*/
/*}*/
/*.side-activities .activities-list li a{*/
/*    display: block;*/
/*    height: 40px;*/
/*    line-height: 40px;*/
/*    padding: 0 20px;*/
/*}*/
/*.activities-list  li .active-status {*/
/*    padding: 2px 4px;*/
/*    margin-right: 14px;*/
/*}*/
/*.activities-list  li .active-start {*/
/*     color: skyblue;*/
/*     border: 1px solid skyblue;*/
/*}*/
/*.activities-list  li .active-end {*/
/*     color: #ddd;*/
/*     border: 1px solid #ddd;*/
/*}*/
/*.side-activities .activities-list  li:hover {*/
/*    background: rgba(204, 204, 204, 0.22);*/
/*}*/
/*!* ==== side-activities end ==== *!*/
/*!* ==== side-course start ==== *!*/
/*.side .side-course {*/
/*    border-top: 1px solid #ddd;*/
/*    padding: 0 20px 20px;*/
/*}*/
/*.side .side-course .course-title {*/
/*    font-size: 18px;*/
/*    line-height: 60px;*/
/*}*/
/*.side .side-course .course-title a {*/
/*    font-size: 14px;*/
/*    float: right;*/
/*    color: skyblue;*/
/*}*/
/*.side .side-course .course-entry {*/
/*    display: block;*/
/*    width: 315px;*/
/*    height: 176px;*/
/*}*/
/*.side-course .course-entry img {*/
/*    width: 100%;*/
/*}*/
/*!* ==== side-course end ==== *!*/
/*!* ==== side-gift start ==== *!*/
/*.side .side-gift {*/
/*    display: block;*/
/*    height: 130px;*/
/*}*/
/*!* ==== side-gift end ==== *!*/
/*!* ==== side-attention start ==== *!*/
/*.side .side-attention {*/
/*    height: 261px;*/
/*    padding: 20px 20px;*/
/*    box-sizing: border-box;*/
/*    border-top: 1px solid #ddd;*/
/*    margin-top: 20px;*/
/*}*/
/*.side .side-attention .attention-title {*/
/*    font-size: 18px;*/
/*}*/
/*.side-attention .side-attention-address {*/
/*    margin: 10px 15px;*/
/*    float: left;*/
/*}*/
/*.side-attention .side-attention-address li {*/
/*    line-height: 66px;*/
/*}*/
/*.side-attention-address li i {*/
/*    font-size: 40px;*/
/*    vertical-align: -10px;*/
/*    padding-right: 25px;*/
/*}*/
/*.side-attention .side-attention-qr {*/
/*    float: right;*/
/*    width: 100px;*/
/*    height: 100px;*/
/*    margin-top: 20px;*/
/*    background: url('../../images/wechat.jpg') no-repeat center/100%;*/
/*}*/
/*.side-attention .side-attention-qr p {*/
/*    text-align: center;*/
/*    padding-top: 110px;*/
/*    font-size: 16px;*/
/*    line-height: 32px;*/
/*}*/
/*!* ==== side-attention end ==== *!*/
/*!* ==== side-hot-recommend start ==== *!*/
/*.side .side-hot-recommend {*/
/*    border-top: 1px solid #ddd;*/
/*    padding: 0 20px;*/
/*}*/
/*.side-hot-recommend .hot-recommend {*/
/*    font-size: 18px;*/
/*    line-height: 60px;*/
/*    color: #212121;*/
/*}*/
/*.side-hot-recommend  .hot-news-list li {*/
/*    border-bottom: 1px solid #ddd;*/
/*}*/
/*.hot-news-list .hot-news-contain {*/
/*    display: block;*/
/*    padding: 20px 0;*/
/*}*/
/*.hot-news-list .hot-news-contain .hot-news-thumbnail {*/
/*    width: 100px;*/
/*    height: 70px;*/
/*    float: right;*/
/*}*/
/*.hot-news-contain .hot-news-thumbnail img {*/
/*    width: 100%;*/
/*}*/
/*.hot-news-contain  .hot-news-content {*/
/*    width: 63%;*/
/*    margin-right: 110px;*/
/*}*/
/*.hot-news-contain  .hot-news-content .hot-news-title {*/
/*    font-size: 16px;*/
/*    color: #212121;*/
/*    line-height: 28px;*/
/*    height: 56px;*/
/*    overflow: hidden;*/
/*    text-overflow:ellipsis;*/
/*    display: -webkit-box;*/
/*    -webkit-box-orient: vertical;*/
/*    -webkit-line-clamp: 2;!*显示的行数*!*/
/*}*/
/*.hot-news-content .hot-news-other {*/
/*    margin-top: 5px;*/
/*    font-size: 14px;*/
/*}*/
/*.hot-news-content .hot-news-other .news-type {*/
/*    float: left;*/
/*    color: #5b86db;*/
/*    line-height: 14px;*/
/*}*/
/*.hot-news-content .hot-news-other .news-pub-time {*/
/*    float: right;*/
/*}*/
/*.hot-news-content .hot-news-other .news-author {*/
/*    float: right;*/
/*    display: none;*/
/*}*/
/*!* ==== side-hot-recommend end ==== *!*/
/*!* ========= side end ============ *!*/
/* ========= side start ============ */
#main .side {
    width: 360px;
    float: right;
    background: #fff;
    font-size: 14px;
    color: #555;
    margin-bottom: 30px;
}
/* ==== side-activities start ==== */
.side .side-activities .activities-title {
    font-size: 18px;
    line-height: 60px;
    padding: 0 20px;
}
.side .side-activities .activities-title a {
    font-size: 14px;
    float: right;
    color: skyblue;
}
.side .side-activities .activities-img {
    width: 320px;
    height: 215px;
    position: relative;
    margin: 0 20px 20px;
}
.side-activities .activities-img img {
    width: 100%;
    height: 100%;
}
.side-activities .activities-img .activities-tips{
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    background: rgba(0, 0, 0, 0.55);
    line-height: 40px;
    font-size: 16px;
    color: #fff;
    padding-left: 20px;
    box-sizing: border-box;
}
.side-activities .activities-list li a{
    display: block;
    height: 40px;
    line-height: 40px;
    padding: 0 20px;
}
.activities-list  li .active-status {
    padding: 2px 4px;
    margin-right: 14px;
}
.activities-list  li .active-start {
     color: skyblue;
     border: 1px solid skyblue;
}
.activities-list  li .active-end {
     color: #ddd;
     border: 1px solid #ddd;
}
.side-activities .activities-list  li:hover {
    background: rgba(204, 204, 204, 0.22);
}
/* ==== side-activities end ==== */
/* ==== side-course start ==== */
.side .side-course {
    border-top: 1px solid #ddd;
    padding: 0 20px 20px;
}
.side .side-course .course-title {
    font-size: 18px;
    line-height: 60px;
}
.side .side-course .course-title a {
    font-size: 14px;
    float: right;
    color: skyblue;
}
.side .side-course .course-entry {
    display: block;
    width: 315px;
    height: 176px;
}
.side-course .course-entry img {
    width: 100%;
}
/* ==== side-course end ==== */
/* ==== side-gift start ==== */
.side .side-gift {
    display: block;
    height: 130px;
}
/* ==== side-gift end ==== */
/* ==== side-attention start ==== */
.side .side-attention {
    height: 261px;
    padding: 20px 20px;
    box-sizing: border-box;
    border-top: 1px solid #ddd;
    margin-top: 20px;
}
.side .side-attention .attention-title {
    font-size: 18px;
}
.side-attention .side-attention-address {
    margin: 10px 15px;
    float: left;
}
.side-attention .side-attention-address li {
    line-height: 66px;
}
.side-attention-address li i {
    font-size: 40px;
    vertical-align: -10px;
    padding-right: 25px;
}
.side-attention .side-attention-qr {
    float: right;
    width: 100px;
    height: 100px;
    margin-top: 20px;
    background: url('../../images/wechat.jpg') no-repeat center/100%;
}
.side-attention .side-attention-qr p {
    text-align: center;
    padding-top: 110px;
    font-size: 16px;
    line-height: 32px;
}
/* ==== side-attention end ==== */
/* ==== side-hot-recommend start ==== */
.side .side-hot-recommend {
    border-top: 1px solid #ddd;
    padding: 0 20px;
}
.side-hot-recommend .hot-recommend {
    font-size: 18px;
    line-height: 60px;
    color: #212121;
}
.side-hot-recommend  .hot-news-list li {
    border-bottom: 1px solid #ddd;
}
.hot-news-list .hot-news-contain {
    display: block;
    padding: 20px 0;
}
.hot-news-list .hot-news-contain .hot-news-thumbnail {
    width: 100px;
    height: 70px;
    float: right;
}
.hot-news-contain .hot-news-thumbnail img {
    width: 100%;
}
.hot-news-contain  .hot-news-content {
    width: 63%;
    margin-right: 110px;
}
.hot-news-contain  .hot-news-content .hot-news-title {
    font-size: 16px;
    color: #212121;
    line-height: 28px;
    height: 56px;
    overflow: hidden;
    text-overflow:ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;/*显示的行数*/
}
.hot-news-content .hot-news-other {
    margin-top: 5px;
    font-size: 14px;
}
.hot-news-content .hot-news-other .news-type {
    float: left;
    color: #5b86db;
    line-height: 14px;
}
.hot-news-content .hot-news-other .news-pub-time {
    float: right;
}
.hot-news-content .hot-news-other .news-author {
    float: right;
    display: none;
}
/* ==== side-hot-recommend end ==== */
/* ========= side end ============ */

css/base/sweetalert.css

body.stop-scrolling {
    height: 100%;
    overflow: hidden;
}

.sweet-overlay {
    background-color: black;
    /* IE8 */
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
    /* IE8 */
    background-color: rgba(0, 0, 0, 0.4);
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    display: none;
    z-index: 10000;
}

.sweet-alert {
    background-color: white;
    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
    width: 478px;
    padding: 17px;
    border-radius: 5px;
    text-align: center;
    position: fixed;
    left: 50%;
    top: 50%;
    margin-left: -256px;
    margin-top: -200px;
    overflow: hidden;
    display: none;
    z-index: 99999;
}

@media all and (max-width: 540px) {
    .sweet-alert {
        width: auto;
        margin-left: 0;
        margin-right: 0;
        left: 15px;
        right: 15px;
    }
}

.sweet-alert h2 {
    color: #575757;
    font-size: 30px;
    text-align: center;
    font-weight: 600;
    text-transform: none;
    position: relative;
    margin: 25px 0;
    padding: 0;
    line-height: 40px;
    display: block;
}

.sweet-alert p {
    color: #797979;
    font-size: 16px;
    text-align: center;
    font-weight: 300;
    position: relative;
    text-align: inherit;
    float: none;
    margin: 0;
    padding: 0;
    line-height: normal;
}

.sweet-alert fieldset {
    border: none;
    position: relative;
}

.sweet-alert .sa-error-container {
    background-color: #f1f1f1;
    margin-left: -17px;
    margin-right: -17px;
    overflow: hidden;
    padding: 0 10px;
    max-height: 0;
    webkit-transition: padding 0.15s, max-height 0.15s;
    transition: padding 0.15s, max-height 0.15s;
}

.sweet-alert .sa-error-container.show {
    padding: 10px 0;
    max-height: 100px;
    webkit-transition: padding 0.2s, max-height 0.2s;
    transition: padding 0.25s, max-height 0.25s;
}

.sweet-alert .sa-error-container .icon {
    display: inline-block;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background-color: #ea7d7d;
    color: white;
    line-height: 24px;
    text-align: center;
    margin-right: 3px;
}

.sweet-alert .sa-error-container p {
    display: inline-block;
}

.sweet-alert .sa-input-error {
    position: absolute;
    top: 29px;
    right: 26px;
    width: 20px;
    height: 20px;
    opacity: 0;
    -webkit-transform: scale(0.5);
    transform: scale(0.5);
    -webkit-transform-origin: 50% 50%;
    transform-origin: 50% 50%;
    -webkit-transition: all 0.1s;
    transition: all 0.1s;
}

.sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {
    content: "";
    width: 20px;
    height: 6px;
    background-color: #f06e57;
    border-radius: 3px;
    position: absolute;
    top: 50%;
    margin-top: -4px;
    left: 50%;
    margin-left: -9px;
}

.sweet-alert .sa-input-error::before {
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
}

.sweet-alert .sa-input-error::after {
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
}

.sweet-alert .sa-input-error.show {
    opacity: 1;
    -webkit-transform: scale(1);
    transform: scale(1);
}

.sweet-alert input {
    width: 100%;
    box-sizing: border-box;
    border-radius: 3px;
    border: 1px solid #d7d7d7;
    height: 43px;
    margin-top: 10px;
    margin-bottom: 17px;
    font-size: 18px;
    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);
    padding: 0 12px;
    display: none;
    -webkit-transition: all 0.3s;
    transition: all 0.3s;
}

.sweet-alert input:focus {
    outline: none;
    box-shadow: 0px 0px 3px #c4e6f5;
    border: 1px solid #b4dbed;
}

.sweet-alert input:focus::-moz-placeholder {
    transition: opacity 0.3s 0.03s ease;
    opacity: 0.5;
}

.sweet-alert input:focus:-ms-input-placeholder {
    transition: opacity 0.3s 0.03s ease;
    opacity: 0.5;
}

.sweet-alert input:focus::-webkit-input-placeholder {
    transition: opacity 0.3s 0.03s ease;
    opacity: 0.5;
}

.sweet-alert input::-moz-placeholder {
    color: #bdbdbd;
}

.sweet-alert input:-ms-input-placeholder {
    color: #bdbdbd;
}

.sweet-alert input::-webkit-input-placeholder {
    color: #bdbdbd;
}

.sweet-alert.show-input input {
    display: block;
}

.sweet-alert .sa-confirm-button-container {
    display: inline-block;
    position: relative;
}

.sweet-alert .la-ball-fall {
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -27px;
    margin-top: 4px;
    opacity: 0;
    visibility: hidden;
}

.sweet-alert button {
    background-color: #8CD4F5;
    color: white;
    border: none;
    box-shadow: none;
    font-size: 17px;
    font-weight: 500;
    -webkit-border-radius: 4px;
    border-radius: 5px;
    padding: 10px 32px;
    margin: 26px 5px 0 5px;
    cursor: pointer;
}

.sweet-alert button:focus {
    outline: none;
    box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05);
}

.sweet-alert button:hover {
    background-color: #7ecff4;
}

.sweet-alert button:active {
    background-color: #5dc2f1;
}

.sweet-alert button.cancel {
    background-color: #C1C1C1;
}

.sweet-alert button.cancel:hover {
    background-color: #b9b9b9;
}

.sweet-alert button.cancel:active {
    background-color: #a8a8a8;
}

.sweet-alert button.cancel:focus {
    box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important;
}

.sweet-alert button[disabled] {
    opacity: .6;
    cursor: default;
}

.sweet-alert button.confirm[disabled] {
    color: transparent;
}

.sweet-alert button.confirm[disabled] ~ .la-ball-fall {
    opacity: 1;
    visibility: visible;
    transition-delay: 0s;
}

.sweet-alert button::-moz-focus-inner {
    border: 0;
}

.sweet-alert[data-has-cancel-button=false] button {
    box-shadow: none !important;
}

.sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {
    padding-bottom: 40px;
}

.sweet-alert .sa-icon {
    width: 80px;
    height: 80px;
    border: 4px solid gray;
    -webkit-border-radius: 40px;
    border-radius: 40px;
    border-radius: 50%;
    margin: 20px auto;
    padding: 0;
    position: relative;
    box-sizing: content-box;
}

.sweet-alert .sa-icon.sa-error {
    border-color: #F27474;
}

.sweet-alert .sa-icon.sa-error .sa-x-mark {
    position: relative;
    display: block;
}

.sweet-alert .sa-icon.sa-error .sa-line {
    position: absolute;
    height: 5px;
    width: 47px;
    background-color: #F27474;
    display: block;
    top: 37px;
    border-radius: 2px;
}

.sweet-alert .sa-icon.sa-error .sa-line.sa-left {
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
    left: 17px;
}

.sweet-alert .sa-icon.sa-error .sa-line.sa-right {
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
    right: 16px;
}

.sweet-alert .sa-icon.sa-warning {
    border-color: #F8BB86;
}

.sweet-alert .sa-icon.sa-warning .sa-body {
    position: absolute;
    width: 5px;
    height: 47px;
    left: 50%;
    top: 10px;
    -webkit-border-radius: 2px;
    border-radius: 2px;
    margin-left: -2px;
    background-color: #F8BB86;
}

.sweet-alert .sa-icon.sa-warning .sa-dot {
    position: absolute;
    width: 7px;
    height: 7px;
    -webkit-border-radius: 50%;
    border-radius: 50%;
    margin-left: -3px;
    left: 50%;
    bottom: 10px;
    background-color: #F8BB86;
}

.sweet-alert .sa-icon.sa-info {
    border-color: #C9DAE1;
}

.sweet-alert .sa-icon.sa-info::before {
    content: "";
    position: absolute;
    width: 5px;
    height: 29px;
    left: 50%;
    bottom: 17px;
    border-radius: 2px;
    margin-left: -2px;
    background-color: #C9DAE1;
}

.sweet-alert .sa-icon.sa-info::after {
    content: "";
    position: absolute;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    margin-left: -3px;
    top: 19px;
    background-color: #C9DAE1;
    left: 50%;
}

.sweet-alert .sa-icon.sa-success {
    border-color: #A5DC86;
}

.sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {
    content: '';
    -webkit-border-radius: 40px;
    border-radius: 40px;
    border-radius: 50%;
    position: absolute;
    width: 60px;
    height: 120px;
    background: white;
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
}

.sweet-alert .sa-icon.sa-success::before {
    -webkit-border-radius: 120px 0 0 120px;
    border-radius: 120px 0 0 120px;
    top: -7px;
    left: -33px;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
    -webkit-transform-origin: 60px 60px;
    transform-origin: 60px 60px;
}

.sweet-alert .sa-icon.sa-success::after {
    -webkit-border-radius: 0 120px 120px 0;
    border-radius: 0 120px 120px 0;
    top: -11px;
    left: 30px;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
    -webkit-transform-origin: 0px 60px;
    transform-origin: 0px 60px;
}

.sweet-alert .sa-icon.sa-success .sa-placeholder {
    width: 80px;
    height: 80px;
    border: 4px solid rgba(165, 220, 134, 0.2);
    -webkit-border-radius: 40px;
    border-radius: 40px;
    border-radius: 50%;
    box-sizing: content-box;
    position: absolute;
    left: -4px;
    top: -4px;
    z-index: 2;
}

.sweet-alert .sa-icon.sa-success .sa-fix {
    width: 5px;
    height: 90px;
    background-color: white;
    position: absolute;
    left: 28px;
    top: 8px;
    z-index: 1;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
}

.sweet-alert .sa-icon.sa-success .sa-line {
    height: 5px;
    background-color: #A5DC86;
    display: block;
    border-radius: 2px;
    position: absolute;
    z-index: 2;
}

.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
    width: 25px;
    left: 14px;
    top: 46px;
    -webkit-transform: rotate(45deg);
    transform: rotate(45deg);
}

.sweet-alert .sa-icon.sa-success .sa-line.sa-long {
    width: 47px;
    right: 8px;
    top: 38px;
    -webkit-transform: rotate(-45deg);
    transform: rotate(-45deg);
}

.sweet-alert .sa-icon.sa-custom {
    background-size: contain;
    border-radius: 0;
    border: none;
    background-position: center center;
    background-repeat: no-repeat;
}

/*
 * Animations
 */
@-webkit-keyframes showSweetAlert {
    0% {
        transform: scale(0.7);
        -webkit-transform: scale(0.7);
    }
    45% {
        transform: scale(1.05);
        -webkit-transform: scale(1.05);
    }
    80% {
        transform: scale(0.95);
        -webkit-transform: scale(0.95);
    }
    100% {
        transform: scale(1);
        -webkit-transform: scale(1);
    }
}

@keyframes showSweetAlert {
    0% {
        transform: scale(0.7);
        -webkit-transform: scale(0.7);
    }
    45% {
        transform: scale(1.05);
        -webkit-transform: scale(1.05);
    }
    80% {
        transform: scale(0.95);
        -webkit-transform: scale(0.95);
    }
    100% {
        transform: scale(1);
        -webkit-transform: scale(1);
    }
}

@-webkit-keyframes hideSweetAlert {
    0% {
        transform: scale(1);
        -webkit-transform: scale(1);
    }
    100% {
        transform: scale(0.5);
        -webkit-transform: scale(0.5);
    }
}

@keyframes hideSweetAlert {
    0% {
        transform: scale(1);
        -webkit-transform: scale(1);
    }
    100% {
        transform: scale(0.5);
        -webkit-transform: scale(0.5);
    }
}

@-webkit-keyframes slideFromTop {
    0% {
        top: 0%;
    }
    100% {
        top: 50%;
    }
}

@keyframes slideFromTop {
    0% {
        top: 0%;
    }
    100% {
        top: 50%;
    }
}

@-webkit-keyframes slideToTop {
    0% {
        top: 50%;
    }
    100% {
        top: 0%;
    }
}

@keyframes slideToTop {
    0% {
        top: 50%;
    }
    100% {
        top: 0%;
    }
}

@-webkit-keyframes slideFromBottom {
    0% {
        top: 70%;
    }
    100% {
        top: 50%;
    }
}

@keyframes slideFromBottom {
    0% {
        top: 70%;
    }
    100% {
        top: 50%;
    }
}

@-webkit-keyframes slideToBottom {
    0% {
        top: 50%;
    }
    100% {
        top: 70%;
    }
}

@keyframes slideToBottom {
    0% {
        top: 50%;
    }
    100% {
        top: 70%;
    }
}

.showSweetAlert[data-animation=pop] {
    -webkit-animation: showSweetAlert 0.3s;
    animation: showSweetAlert 0.3s;
}

.showSweetAlert[data-animation=none] {
    -webkit-animation: none;
    animation: none;
}

.showSweetAlert[data-animation=slide-from-top] {
    -webkit-animation: slideFromTop 0.3s;
    animation: slideFromTop 0.3s;
}

.showSweetAlert[data-animation=slide-from-bottom] {
    -webkit-animation: slideFromBottom 0.3s;
    animation: slideFromBottom 0.3s;
}

.hideSweetAlert[data-animation=pop] {
    -webkit-animation: hideSweetAlert 0.2s;
    animation: hideSweetAlert 0.2s;
}

.hideSweetAlert[data-animation=none] {
    -webkit-animation: none;
    animation: none;
}

.hideSweetAlert[data-animation=slide-from-top] {
    -webkit-animation: slideToTop 0.4s;
    animation: slideToTop 0.4s;
}

.hideSweetAlert[data-animation=slide-from-bottom] {
    -webkit-animation: slideToBottom 0.3s;
    animation: slideToBottom 0.3s;
}

@-webkit-keyframes animateSuccessTip {
    0% {
        width: 0;
        left: 1px;
        top: 19px;
    }
    54% {
        width: 0;
        left: 1px;
        top: 19px;
    }
    70% {
        width: 50px;
        left: -8px;
        top: 37px;
    }
    84% {
        width: 17px;
        left: 21px;
        top: 48px;
    }
    100% {
        width: 25px;
        left: 14px;
        top: 45px;
    }
}

@keyframes animateSuccessTip {
    0% {
        width: 0;
        left: 1px;
        top: 19px;
    }
    54% {
        width: 0;
        left: 1px;
        top: 19px;
    }
    70% {
        width: 50px;
        left: -8px;
        top: 37px;
    }
    84% {
        width: 17px;
        left: 21px;
        top: 48px;
    }
    100% {
        width: 25px;
        left: 14px;
        top: 45px;
    }
}

@-webkit-keyframes animateSuccessLong {
    0% {
        width: 0;
        right: 46px;
        top: 54px;
    }
    65% {
        width: 0;
        right: 46px;
        top: 54px;
    }
    84% {
        width: 55px;
        right: 0px;
        top: 35px;
    }
    100% {
        width: 47px;
        right: 8px;
        top: 38px;
    }
}

@keyframes animateSuccessLong {
    0% {
        width: 0;
        right: 46px;
        top: 54px;
    }
    65% {
        width: 0;
        right: 46px;
        top: 54px;
    }
    84% {
        width: 55px;
        right: 0px;
        top: 35px;
    }
    100% {
        width: 47px;
        right: 8px;
        top: 38px;
    }
}

@-webkit-keyframes rotatePlaceholder {
    0% {
        transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
    }
    5% {
        transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
    }
    12% {
        transform: rotate(-405deg);
        -webkit-transform: rotate(-405deg);
    }
    100% {
        transform: rotate(-405deg);
        -webkit-transform: rotate(-405deg);
    }
}

@keyframes rotatePlaceholder {
    0% {
        transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
    }
    5% {
        transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
    }
    12% {
        transform: rotate(-405deg);
        -webkit-transform: rotate(-405deg);
    }
    100% {
        transform: rotate(-405deg);
        -webkit-transform: rotate(-405deg);
    }
}

.animateSuccessTip {
    -webkit-animation: animateSuccessTip 0.75s;
    animation: animateSuccessTip 0.75s;
}

.animateSuccessLong {
    -webkit-animation: animateSuccessLong 0.75s;
    animation: animateSuccessLong 0.75s;
}

.sa-icon.sa-success.animate::after {
    -webkit-animation: rotatePlaceholder 4.25s ease-in;
    animation: rotatePlaceholder 4.25s ease-in;
}

@-webkit-keyframes animateErrorIcon {
    0% {
        transform: rotateX(100deg);
        -webkit-transform: rotateX(100deg);
        opacity: 0;
    }
    100% {
        transform: rotateX(0deg);
        -webkit-transform: rotateX(0deg);
        opacity: 1;
    }
}

@keyframes animateErrorIcon {
    0% {
        transform: rotateX(100deg);
        -webkit-transform: rotateX(100deg);
        opacity: 0;
    }
    100% {
        transform: rotateX(0deg);
        -webkit-transform: rotateX(0deg);
        opacity: 1;
    }
}

.animateErrorIcon {
    -webkit-animation: animateErrorIcon 0.5s;
    animation: animateErrorIcon 0.5s;
}

@-webkit-keyframes animateXMark {
    0% {
        transform: scale(0.4);
        -webkit-transform: scale(0.4);
        margin-top: 26px;
        opacity: 0;
    }
    50% {
        transform: scale(0.4);
        -webkit-transform: scale(0.4);
        margin-top: 26px;
        opacity: 0;
    }
    80% {
        transform: scale(1.15);
        -webkit-transform: scale(1.15);
        margin-top: -6px;
    }
    100% {
        transform: scale(1);
        -webkit-transform: scale(1);
        margin-top: 0;
        opacity: 1;
    }
}

@keyframes animateXMark {
    0% {
        transform: scale(0.4);
        -webkit-transform: scale(0.4);
        margin-top: 26px;
        opacity: 0;
    }
    50% {
        transform: scale(0.4);
        -webkit-transform: scale(0.4);
        margin-top: 26px;
        opacity: 0;
    }
    80% {
        transform: scale(1.15);
        -webkit-transform: scale(1.15);
        margin-top: -6px;
    }
    100% {
        transform: scale(1);
        -webkit-transform: scale(1);
        margin-top: 0;
        opacity: 1;
    }
}

.animateXMark {
    -webkit-animation: animateXMark 0.5s;
    animation: animateXMark 0.5s;
}

@-webkit-keyframes pulseWarning {
    0% {
        border-color: #F8D486;
    }
    100% {
        border-color: #F8BB86;
    }
}

@keyframes pulseWarning {
    0% {
        border-color: #F8D486;
    }
    100% {
        border-color: #F8BB86;
    }
}

.pulseWarning {
    -webkit-animation: pulseWarning 0.75s infinite alternate;
    animation: pulseWarning 0.75s infinite alternate;
}

@-webkit-keyframes pulseWarningIns {
    0% {
        background-color: #F8D486;
    }
    100% {
        background-color: #F8BB86;
    }
}

@keyframes pulseWarningIns {
    0% {
        background-color: #F8D486;
    }
    100% {
        background-color: #F8BB86;
    }
}

.pulseWarningIns {
    -webkit-animation: pulseWarningIns 0.75s infinite alternate;
    animation: pulseWarningIns 0.75s infinite alternate;
}

@-webkit-keyframes rotate-loading {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

@keyframes rotate-loading {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

/* Internet Explorer 9 has some special quirks that are fixed here */
/* The icons are not animated. */
/* This file is automatically merged into sweet-alert.min.js through Gulp */
/* Error icon */
.sweet-alert .sa-icon.sa-error .sa-line.sa-left {
    -ms-transform: rotate(45deg) \9;
}

.sweet-alert .sa-icon.sa-error .sa-line.sa-right {
    -ms-transform: rotate(-45deg) \9;
}

/* Success icon */
.sweet-alert .sa-icon.sa-success {
    border-color: transparent \9;
}

.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
    -ms-transform: rotate(45deg) \9;
}

.sweet-alert .sa-icon.sa-success .sa-line.sa-long {
    -ms-transform: rotate(-45deg) \9;
}

/*!
 * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)
 * Copyright 2015 Daniel Cardoso <@DanielCardoso>
 * Licensed under MIT
 */
.la-ball-fall,
.la-ball-fall > div {
    position: relative;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

.la-ball-fall {
    display: block;
    font-size: 0;
    color: #fff;
}

.la-ball-fall.la-dark {
    color: #333;
}

.la-ball-fall > div {
    display: inline-block;
    float: none;
    background-color: currentColor;
    border: 0 solid currentColor;
}

.la-ball-fall {
    width: 54px;
    height: 18px;
}

.la-ball-fall > div {
    width: 10px;
    height: 10px;
    margin: 4px;
    border-radius: 100%;
    opacity: 0;
    -webkit-animation: ball-fall 1s ease-in-out infinite;
    -moz-animation: ball-fall 1s ease-in-out infinite;
    -o-animation: ball-fall 1s ease-in-out infinite;
    animation: ball-fall 1s ease-in-out infinite;
}

.la-ball-fall > div:nth-child(1) {
    -webkit-animation-delay: -200ms;
    -moz-animation-delay: -200ms;
    -o-animation-delay: -200ms;
    animation-delay: -200ms;
}

.la-ball-fall > div:nth-child(2) {
    -webkit-animation-delay: -100ms;
    -moz-animation-delay: -100ms;
    -o-animation-delay: -100ms;
    animation-delay: -100ms;
}

.la-ball-fall > div:nth-child(3) {
    -webkit-animation-delay: 0ms;
    -moz-animation-delay: 0ms;
    -o-animation-delay: 0ms;
    animation-delay: 0ms;
}

.la-ball-fall.la-sm {
    width: 26px;
    height: 8px;
}

.la-ball-fall.la-sm > div {
    width: 4px;
    height: 4px;
    margin: 2px;
}

.la-ball-fall.la-2x {
    width: 108px;
    height: 36px;
}

.la-ball-fall.la-2x > div {
    width: 20px;
    height: 20px;
    margin: 8px;
}

.la-ball-fall.la-3x {
    width: 162px;
    height: 54px;
}

.la-ball-fall.la-3x > div {
    width: 30px;
    height: 30px;
    margin: 12px;
}

/*
 * Animation
 */
@-webkit-keyframes ball-fall {
    0% {
        opacity: 0;
        -webkit-transform: translateY(-145%);
        transform: translateY(-145%);
    }
    10% {
        opacity: .5;
    }
    20% {
        opacity: 1;
        -webkit-transform: translateY(0);
        transform: translateY(0);
    }
    80% {
        opacity: 1;
        -webkit-transform: translateY(0);
        transform: translateY(0);
    }
    90% {
        opacity: .5;
    }
    100% {
        opacity: 0;
        -webkit-transform: translateY(145%);
        transform: translateY(145%);
    }
}

@-moz-keyframes ball-fall {
    0% {
        opacity: 0;
        -moz-transform: translateY(-145%);
        transform: translateY(-145%);
    }
    10% {
        opacity: .5;
    }
    20% {
        opacity: 1;
        -moz-transform: translateY(0);
        transform: translateY(0);
    }
    80% {
        opacity: 1;
        -moz-transform: translateY(0);
        transform: translateY(0);
    }
    90% {
        opacity: .5;
    }
    100% {
        opacity: 0;
        -moz-transform: translateY(145%);
        transform: translateY(145%);
    }
}

@-o-keyframes ball-fall {
    0% {
        opacity: 0;
        -o-transform: translateY(-145%);
        transform: translateY(-145%);
    }
    10% {
        opacity: .5;
    }
    20% {
        opacity: 1;
        -o-transform: translateY(0);
        transform: translateY(0);
    }
    80% {
        opacity: 1;
        -o-transform: translateY(0);
        transform: translateY(0);
    }
    90% {
        opacity: .5;
    }
    100% {
        opacity: 0;
        -o-transform: translateY(145%);
        transform: translateY(145%);
    }
}

@keyframes ball-fall {
    0% {
        opacity: 0;
        -webkit-transform: translateY(-145%);
        -moz-transform: translateY(-145%);
        -o-transform: translateY(-145%);
        transform: translateY(-145%);
    }
    10% {
        opacity: .5;
    }
    20% {
        opacity: 1;
        -webkit-transform: translateY(0);
        -moz-transform: translateY(0);
        -o-transform: translateY(0);
        transform: translateY(0);
    }
    80% {
        opacity: 1;
        -webkit-transform: translateY(0);
        -moz-transform: translateY(0);
        -o-transform: translateY(0);
        transform: translateY(0);
    }
    90% {
        opacity: .5;
    }
    100% {
        opacity: 0;
        -webkit-transform: translateY(145%);
        -moz-transform: translateY(145%);
        -o-transform: translateY(145%);
        transform: translateY(145%);
    }
}

css/course

css/course/course.css

/* ========== top-wrap start =========  */
#top-wrap {
    background: #fff;
    line-height: 60px;
    box-shadow: 0 4px 4px rgba(0,0,0,.1);
}
#top-wrap .top-title {
    float: left;
    font-size: 22px;
    margin-right: 140px;

}
#top-wrap .top-nav {
    display: flex;
    justify-content: space-between;
    width: 400px;
    color: #878787;
    font-size: 18px;
}
#top-wrap .top-nav li.active {
    color: #212121;
}
#top-wrap .top-nav  li:hover {
    text-shadow: 1px 1px 2px #212121;
}
/* ========== top-wrap end =========  */
/* ========== course-container  start =========  */
#course-container {
    flex: 1;
}
#course-container .course-list {
    display: flex;
    flex-flow: row wrap;
    margin-bottom: 20px;
}
#course-container .course-list .course-item {
    margin: 20px;
    width: 260px;
    height: 300px;
    background: #fff;
    position: relative;
    /* float: left; */
}
.course-list .course-item .course-img {
    width: 100%;
}
.course-list .course-item .course-content {
    padding: 0 20px;
    height: 150px;
    box-sizing: border-box;
}
.course-list .course-item:hover {
    box-shadow: 0 4px 8px rgba(0,0,0,.1);
}
.course-item .course-content .course-info {
    font-size: 18px;
    line-height: 1.5;
    max-height: 50px;
    overflow: hidden;
}
.course-item .course-content .course-author{
    color: #848383;
    font-size: 14px;
    line-height: 36px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.course-item .course-content .course-pirce {
    position: absolute;
    bottom: 10px;
    right: 21px;
    font-size: 16px;
    line-height: 30px;
    color: #6fa026;

}
.course-item .course-content .course-pirce span{
    font-size: 14px;
}
.course-item .course-content .course-pirce.free {
    color: green;
}
/* ========== course-container  end =========  */

css/course/course_detail.css

#main {
	flex: 1;
}

.course-contain {
	width: 100%;
}

.course-contain .course-top-contain{
	width: 100%;
	background: #fff;
	padding:0 20px;
}
.course-top-contain .course-title {
	font-size: 30px;
	line-height: 2.5;
}

.course-top-contain .course-other {
	line-height: 3.5;
}
.course-other  .share-list {
	float: left;
}
.share-list span {
	 margin-right: 8px;
}
.share-list i {
	color: orange;
}
.course-other .buy-list {
	float: right;
}

.price {
    color: #f76363;
    float: right;
    margin-right: 20px;
    line-height: 40px;
    font-size: 20px;
}

.buy-btn {
	background-color: #ff8d3f;
	border: none;
    width: 120px;
    text-align: center;
    line-height: 40px;
    color: #fff;
    border-radius: 5px;
    font-size: 16px;
    float: right;
}


.course-video {
	border-top: 1px solid #ddd;
	height: 400px;
}

.course-bottom-contain {
	width: 100%;
	margin-top: 30px;
}

.curse-bottom-contain {
	margin-top: 30px;
    width: 100%;
}

.course-detail-list {
    width: 800px;
    float: left;
}

.course-detail-list .course-item {
	margin-bottom: 20px;
    background-color: #fff;
    padding: 20px;
}

.course-item .course-title{
    border-left: 6px solid #5b86db;
    padding: 0 10px;
    color: #202020;
    font-size: 18px;
}

.course-item .teacher-box {
	margin-top: 20px;
}

.teacher-box  .teacher-avatar {
    width: 62px;
    height: 62px;
    border-radius: 50%;
    float: left;
}

.teacher-box .teacher-info {
	float: left;
    margin-left: 10px;
    position: relative;
    font-size: 16px;
    color: #696969;
    height: 62px;
    width: 90%;
}

.teacher-name {
    position: absolute;
    left: 0;
    top: 8px;
}
.teacher-identify {
    position: absolute;
    bottom: 8px;
    left: 0;
}

.item-content {
	font-size: 14px;
    color: #888;
    line-height: 2em;
    margin-top: 20px;
}

.item-course-title {
	font-size: 18px;
    color: #202020;
    float: left;
    line-height: 40px;
}

.item-buy-list {
	float: right;
    margin-top: 0;
}


.course-side {
	float: right;
    width: 360px;
    background-color: #fff;
    padding: 20px;
    padding-bottom: 0;
    box-sizing: border-box;
}
.course-side  .side-title {
	font-size: 18px;
	line-height: 2.4;
}

css/doc

css/doc/docDownload.css

/* ================= main start ================= */
#main {
    margin-top: 25px;
    min-height: 700px;
    flex: 1;
}

/* ========= main-contain start ============ */
#main .main-contain {
    width: 800px;
    float: left;
    margin-bottom: 30px;
}

/* ========= banner start =========== */
.main-contain .banner {
    width: 100%;
}

.main-contain .banner img {
    max-width: 100%;
}

.main-contain .pay-doc-contain {
    background: #fff;
}

.main-contain .pay-doc-contain .pay-list {
    display: flex;
    justify-content: space-between;
    flex-flow: wrap;
    padding: 0 20px 20px;
}

.main-contain .pay-doc-contain .pay-item {
    width: 370px;
    height: 150px;
    border: 1px solid #ddd;
    margin-top: 20px;
    display: flex;
}

.main-contain .pay-doc-contain .pay-item:hover {
    box-shadow: 2px 2px 2px #ccc;
}

.pay-doc-contain .pay-item .pay-img {
    width: 100px;
    height: 150px;
    margin-right: 14px;
    background: url("http://onj3s3zfw.bkt.clouddn.com//o_1ckpmva1lgpv1o1ur3p1ru21k3j7.png") center center no-repeat;
}

.pay-doc-contain .pay-item .pay-img.doc {
    background: url("http://onj3s3zfw.bkt.clouddn.com//o_1ckpmva1lgpv1o1ur3p1ru21k3j7.png") center center no-repeat;
}

.pay-doc-contain .pay-item .pay-contain {
    width: 250px;
    position: relative
}

.pay-item .pay-contain .pay-title {
    font-size: 20px;
    line-height: 40px;
    white-space: nowrap;
    overflow: hidden;
}

.pay-item .pay-contain .pay-desc {
    line-height: 20px;
    color: #878787;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    font-size: 14px;
    overflow: hidden;
}

.pay-item .pay-contain .pay-price {
    position: absolute;
    bottom: 5px;
    right: 15px;
    font-size: 18px;
    line-height: 30px;
    color: #f73e3e;
}

.pay-contain .pay-price span {
    font-size: 18px;
}

/* ========= banner end =========== */
/* ========= main-contain end ============ */
/* ================= main end ================= */

css/news

css/news/index.css

/*!* ================= main start ================= *!*/
/*#main {*/
/*    margin-top: 25px;*/
/*    min-height: 700px;*/
/*}*/
/*!* ========= main-contain start ============ *!*/
/*#main .main-contain {*/
/*    width: 800px;*/
/*    float: left;*/
/*}*/
/*!* ====== banner start ======*!*/
/*.main-contain .banner {*/
/*    width: 100%;*/
/*    height: 200px;*/
/*    overflow: hidden;*/
/*    position: relative;*/
/*    display: flex;*/
/*}*/
/*.main-contain .banner .pic {*/
/*    height: 100%;*/
/*}*/
/*.main-contain .banner .pic li {*/
/*    position: absolute;*/
/*    top: 0;*/
/*    left: 0;*/
/*    height: 100%;*/
/*    display: none;*/
/*}*/
/*.banner .pic li a {*/
/*    height: 100%;*/
/*    display: block;*/
/*}*/
/*.pic li a img {*/
/*    width: 100%;*/
/*    height: 100%;*/
/*}*/
/*.banner .btn {*/
/*    display: none;*/
/*    color: #fff;*/
/*    z-index: 1;*/
/*    align-self: center;*/
/*    position: absolute;*/
/*    transition: all 0.4s linear;*/
/*}*/
/*.banner .btn .py-arrow-left, .banner .btn .py-arrow-right {*/
/*    font-size: 50px;*/
/*    font-weight: 600;*/
/*}*/
/*.banner .prev {*/
/*    left: 25px;*/
/*}*/
/*.banner .next {*/
/*    right: 25px;*/
/*}*/
/*.banner:hover .btn {*/
/*    display: block;*/
/*    transition: all 0.5s  linear;*/
/*}*/
/*.banner .tab {*/
/*    width: 98px;*/
/*    height: 12px;*/
/*    position: absolute;*/
/*    left: 50%;*/
/*    bottom: 22px;*/
/*    margin-left: -49px;*/
/*    display: flex;*/
/*}*/
/*.banner .tab li{*/
/*    width: 10px;*/
/*    height: 10px;*/
/*    border-radius: 50%;*/
/*    border: 1px solid #fff;*/
/*    margin: 0 6px;*/
/*}*/
/*.banner .tab li.active {*/
/*    background: #fff;*/
/*}*/
/*!* ====== banner end ======*!*/
/*!* ====== content start ======*!*/
/*!* == recommendNews start  == *!*/
/*#main .content .recommend-news {*/
/*    background: #fff;*/
/*    padding: 20px;*/
/*    display: flex;*/
/*    justify-content: space-between;*/
/*}*/
/*.content .recommend-news li {*/
/*    width: 250px;*/
/*    height: 179px;*/
/*    position: relative;*/
/*}*/
/*.recommend-news li .recommend-thumbnail {*/
/*    width: 100%;*/
/*    height: 100%;*/
/*    overflow: hidden;*/
/*}*/
/*.recommend-news li .recommend-thumbnail img {*/
/*    width: 100%;*/
/*    transition: all 300ms ease-out;*/
/*}*/
/*.recommend-news li .info {*/
/*    height: 58px;*/
/*    width: 100%;*/
/*    line-height: 26px;*/
/*    color: #fff;*/
/*    position: absolute;*/
/*    left: 0;*/
/*    bottom: 0;*/
/*    background: rgba(0, 0, 0, 0.3);*/
/*    padding: 0 15px;*/
/*    box-sizing: border-box;*/
/*}*/
/*.content .recommend-news li:hover img{*/
/*    transform: scale(1.2);*/
/*    transition: all 300ms ease-in;*/
/*}*/
/*.content .recommend-news li:hover .info {*/
/*    background: rgba(0, 0, 0, 0.6);*/
/*}*/
/*!* == recommendNews end  == *!*/
/*!* == news-nav start == *!*/
/*.content .news-nav {*/
/*    padding-left: 20px;*/
/*    background: #fff;*/
/*    color: #878787;*/
/*    border-top:1px solid #ddd;*/
/*    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);*/
/*}*/
/*.content .news-nav ul {*/
/*    padding: 10px 0;*/
/*}*/
/*.news-nav ul li{*/
/*    float: left;*/
/*    margin-top: 10px;*/
/*    margin-right: 20px;*/
/*    line-height: 24px;*/
/*    padding:0 10px;*/
/*    border-left: 4px solid transparent;*/
/*}*/
/*.news-nav ul li:first-child {*/
/*    border-left-color: blue;*/
/*}*/
/*.news-nav ul li.active {*/
/*    color: #212121;*/
/*}*/
/*.news-nav ul li:hover {*/
/*    text-shadow: 1px 1px 2px #212121;*/
/*}*/
/*!* == news-nav end == *!*/
/*!* == news-contain start == *!*/
/*.content .news-contain {*/
/*    background: #fff;*/
/*}*/
/*.content .news-contain .news-list li{*/
/*    border-bottom: 1px solid #ededed;*/
/*}*/
/*.news-contain .news-list .news-item{*/
/*    display: flex;*/
/*    align-items: flex-start;*/
/*    padding: 20px;*/
/*    border-bottom: 1px solid #c1c1c1;*/
/*}*/
/*.news-list .news-item .news-thumbnail {*/
/*    width: 225px;*/
/*    height: 160px;*/
/*    margin-right: 20px;*/
/*    overflow: hidden;*/
/*}*/
/*.news-item .news-thumbnail img {*/
/*    width: 100%;*/
/*    height: 100%;*/
/*    transition: all 0.3s ease-out;*/
/*}*/
/*.news-item .news-thumbnail:hover img {*/
/*    transform: scale(1.1);*/
/*    transition: all 0.3s ease-in;*/
/*}*/
/*.news-list .news-item .news-content {*/
/*    flex: 1;*/
/*    color: #878787;*/
/*    font-size: 14px;*/
/*}*/
/*.news-item .news-content .news-title{*/
/*    color: #212121;*/
/*    font-size: 22px;*/
/*    height: 52px;*/
/*    line-height: 26px;*/
/*    transition:all 0.3s ease-out;*/
/*}*/
/*.news-item .news-content .news-title:hover {*/
/*    color: #5b86db;*/
/*    transition:all 0.3s ease-in;*/
/*}*/
/*.news-item .news-content .news-details {*/
/*    height: 44px;*/
/*    line-height: 22px;*/
/*    margin-top: 19px;*/
/*    text-align: justify;*/
/*}*/
/*.news-item .news-content .news-other {*/
/*    margin-top: 30px;*/
/*}*/
/*.news-content .news-other .news-type {*/
/*    color: #5b86db;*/
/*}*/
/*.news-content .news-other .news-author {*/
/*    float: right;*/
/*    margin-right: 15px;*/
/*}*/
/*.news-content .news-other .news-time {*/
/*    float: right;*/
/*}*/
/*!* == news-contain end == *!*/
/*!* == loading-img start == *!*/
/*.news-contain .loading-img {*/
/*    height: 66px;*/
/*    background: url("http://onj3s3zfw.bkt.clouddn.com//o_1ckpo3tv1r1h1f951smb11r0s477.gif") center/3%  no-repeat;*/
/*}*/
/*!* == loading-img end == *!*/
/*!* == loading-end start == *!*/
/*.news-contain .loading-end {*/
/*    background: #e8dede;*/
/*    line-height: 2.5;*/
/*    text-align: center;*/
/*    font-size: 18px;*/
/*    color: #2d8f6f;*/
/*}*/
/*!* == loading-end end == *!*/
/*!* == btn-more start == *!*/
/*.content .btn-more {*/
/*    display: block;*/
/*    border: none;*/
/*    width: 400px;*/
/*    line-height: 40px;*/
/*    text-align: center;*/
/*    background: skyblue;*/
/*    color: #efefef;*/
/*    margin: 20px auto;*/
/*}*/
/*.content .btn-more:hover {*/
/*    background: #54b9e2;*/
/*}*/
/*!* == btn-more end == *!*/
/*!* == news-contain end == *!*/
/*!* ====== content end ======*!*/
/*!* ========= main-contain end ============ *!*/
/*!* ================= main end ================= *!*/
/* ================= main start ================= */
#main {
    margin-top: 25px;
    min-height: 700px;
}
/* ========= main-contain start ============ */
#main .main-contain {
    width: 800px;
    float: left;
}
/* ====== banner start ======*/
.main-contain .banner {
    width: 100%;
    height: 200px;
    overflow: hidden;
    position: relative;
    display: flex;
}
.main-contain .banner .pic {
    height: 100%;
}
.main-contain .banner .pic li {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    display: none;
}
.banner .pic li a {
    height: 100%;
    display: block;
}
.pic li a img {
    width: 100%;
    height: 100%;
}
.banner .btn {
    display: none;
    color: #fff;
    z-index: 1;
    align-self: center;
    position: absolute;
    transition: all 0.4s linear;
}
.banner .btn .py-arrow-left, .banner .btn .py-arrow-right {
    font-size: 50px;
    font-weight: 600;
}
.banner .prev {
    left: 25px;
}
.banner .next {
    right: 25px;
}
.banner:hover .btn {
    display: block;
    transition: all 0.5s  linear;
}
.banner .tab {
    width: 98px;
    height: 12px;
    position: absolute;
    left: 50%;
    bottom: 22px;
    margin-left: -49px;
    display: flex;
}
.banner .tab li{
    width: 10px;
    height: 10px;
    border-radius: 50%;
    border: 1px solid #fff;
    margin: 0 6px;
}
.banner .tab li.active {
    background: #fff;
}
/* ====== banner end ======*/
/* ====== content start ======*/
/* == recommendNews start  == */
#main .content .recommend-news {
    background: #fff;
    padding: 20px;
    display: flex;
    justify-content: space-between;
}
.content .recommend-news li {
    width: 250px;
    height: 179px;
    position: relative;
}
.recommend-news li .recommend-thumbnail {
    width: 100%;
    height: 100%;
    overflow: hidden;
}
.recommend-news li .recommend-thumbnail img {
    width: 100%;
    transition: all 300ms ease-out;
}
.recommend-news li .info {
    height: 58px;
    width: 100%;
    line-height: 26px;
    color: #fff;
    position: absolute;
    left: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.3);
    padding: 0 15px;
    box-sizing: border-box;
}
.content .recommend-news li:hover img{
    transform: scale(1.2);
    transition: all 300ms ease-in;
}
.content .recommend-news li:hover .info {
    background: rgba(0, 0, 0, 0.6);
}
/* == recommendNews end  == */
/* == news-nav start == */
.content .news-nav {
    padding-left: 20px;
    background: #fff;
    color: #878787;
    border-top:1px solid #ddd;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.content .news-nav ul {
    padding: 10px 0;
}
.news-nav ul li{
    float: left;
    margin-top: 10px;
    margin-right: 20px;
    line-height: 24px;
    padding:0 10px;
    border-left: 4px solid transparent;
}
.news-nav ul li:first-child {
    border-left-color: blue;
}
.news-nav ul li.active {
    color: #212121;
}
.news-nav ul li:hover {
    text-shadow: 1px 1px 2px #212121;
}
/* == news-nav end == */
/* == news-contain start == */
.content .news-contain {
    background: #fff;
}
.content .news-contain .news-list li{
    border-bottom: 1px solid #ededed;
}
.news-contain .news-list .news-item{
    display: flex;
    align-items: flex-start;
    padding: 20px;
    border-bottom: 1px solid #c1c1c1;
}
.news-list .news-item .news-thumbnail {
    width: 225px;
    height: 160px;
    margin-right: 20px;
    overflow: hidden;
}
.news-item .news-thumbnail img {
    width: 100%;
    height: 100%;
    transition: all 0.3s ease-out;
}
.news-item .news-thumbnail:hover img {
    transform: scale(1.1);
    transition: all 0.3s ease-in;
}
.news-list .news-item .news-content {
    flex: 1;
    color: #878787;
    font-size: 14px;
}
.news-item .news-content .news-title{
    color: #212121;
    font-size: 22px;
    height: 52px;
    line-height: 26px;
    transition:all 0.3s ease-out;
}
.news-item .news-content .news-title:hover {
    color: #5b86db;
    transition:all 0.3s ease-in;
}
.news-item .news-content .news-details {
    height: 44px;
    line-height: 22px;
    margin-top: 19px;
    text-align: justify;
}
.news-item .news-content .news-other {
    margin-top: 30px;
}
.news-content .news-other .news-type {
    color: #5b86db;
}
.news-content .news-other .news-author {
    float: right;
    margin-right: 15px;
}
.news-content .news-other .news-time {
    float: right;
}
/* == news-contain end == */
/* == loading-img start == */
.news-contain .loading-img {
    height: 66px;
    background: url("http://onj3s3zfw.bkt.clouddn.com//o_1ckpo3tv1r1h1f951smb11r0s477.gif") center/3%  no-repeat;
}
/* == loading-img end == */
/* == loading-end start == */
.news-contain .loading-end {
    background: #e8dede;
    line-height: 2.5;
    text-align: center;
    font-size: 18px;
    color: #2d8f6f;
}
/* == loading-end end == */
/* == btn-more start == */
.content .btn-more {
    display: block;
    border: none;
    width: 400px;
    line-height: 40px;
    text-align: center;
    background: skyblue;
    color: #efefef;
    margin: 20px auto;
}
.content .btn-more:hover {
    background: #54b9e2;
}
/* == btn-more end == */
/* == news-contain end == */
/* ====== content end ======*/
/* ========= main-contain end ============ */
/* ================= main end ================= */

css/news/news-detail.css

/* ================= main start ================= */
#main {
    margin-top: 25px;
    min-height: 700px;
}
/* ========= news-contain start ============ */
#main .news-contain {
    width: 800px;
    background: #fff;
    float: left;
    padding: 0 25px;
    box-sizing: border-box;
}
.news-contain .news-title {
  margin-top: 20px;
  font-size: 30px;
  line-height: 60px;
}
.main-contain .news-info .news-info-left{
  line-height: 40px;
}
.news-info .news-info-left span {
  margin:0 5px;
  color: #878787;
}
.news-info-left span.news-author {
  margin-left: 0;
}
.news-info-left span.news-type{
  background: #01018c;
  color: #fff;
  padding: 0 20px;
  border-radius: 5px;
}
.main-contain .news-content {
  margin-top: 25px;
}
.main-contain .news-content  img {
  width: 100% !important;
}

#main .comment-contain {
  width: 750px;
  border-top: 1px solid #ddd;
   padding-top: 20px;
  margin-top: 20px;
}
.comment-contain .comment-pub {
  width: 100%;
}
.comment-pub .comment-control {
  width: 100%;
  margin-top: 20px;
}
.comment-pub .comment-control input {
  width: 100%;
  height: 40px;
  padding-left: 1.3em;
  border-radius: 5px;
  border: 1px solid #ddd;
  box-sizing: border-box;
}
.comment-pub .comment-btn {
  float: right;
  border: none;
  background: #8117fd;
  color: #fff;
  width: 80px;
  line-height: 20px;
  margin-top: 20px;
  border-radius: 5px;
  cursor: pointer;
}
.comment-contain .comment-list {
  width: 100%;
  margin-top: 30px;
}
.comment-list .comment-item {
  border-bottom: 1px solid #ddd;
  margin-bottom: 30px;
}
.comment-item .comment-info {
  color: #878787;
  line-height: 70px;
}
.comment-info .comment-avatar {
  width: 40px;
  height: 40px;
  vertical-align: -12px;
}
.comment-info .comment-user {
   margin-left: 20px;
}

.comment-info .comment-pub-time {
  float: right;

}
.comment-item .comment-content {
  padding: 5px 66px 20px;
}
/* ========= news-contain end ============ */
/* ================= main end ================= */

css/news/search.css

/* ================= main start ================= */
#main {
    margin-top: 25px;
    min-height: 700px;
}
/* ========= main-contain start ============ */
#main .main-contain {
    width: 800px;
    float: left;
    background: #fff;
}

/* ===  search-box start === */
.main-contain .search-box {
    padding: 40px 50px;
    width: 700px;
    box-shadow: 1px 2px rgba(0,0,0,.1);
    display: inline-flex;
}
.main-contain .search-box .search-control {
    width: 600px;
    height: 40px;
    border-radius: 20px 0 0 20px;
    border: 1px solid #ddd;
    border-right: none;
    padding-left: 0.88em;
    font-size: 20px;
}
.main-contain .search-box .search-btn {
    width: 100px;
    height: 40px;
    border: 1px solid red;
    background: red;
    color: #fff;
    font-size: 20px;
    border-radius:  0 20px 20px 0;
    cursor: pointer;
}
/* ===  search-box end === */

/* === content start === */
/* == search-list start == */
.content .search-result-list {
    padding-top: 20px;
}
.content .search-result-list .search-result-title {
    padding-left: 20px;
    font-size: 20px;
    line-height: 26px;
}
/* == search-list end == */
/* == news-contain start == */
.content .news-contain .hot-recommend-list {
    padding-top: 20px;
}
.hot-recommend-list .hot-recommend-title {
    padding-left: 20px;
    font-size: 20px;
    line-height: 26px;
}
.content .news-contain li {
    border-bottom: 1px solid #ededed;
}
.news-list .news-item {
    padding: 20px;
}
.news-list .news-item .news-thumbnail {
    float: left;
    width: 224px;
    height: 160px;
    margin-right: 30px;
    overflow: hidden;
}
.news-item .news-thumbnail img {
    width: 100%;
    height: 100%;
    transition: all 0.3s ease-out;
}
.news-item .news-thumbnail:hover img {
    transform: scale(1.1);
    transition: all 0.3s ease-in;
}
.news-list .news-item .news-content {
    width: 500px;
    height: 170px;
    float: right;
    color: #878787;
    font-size: 14px;
}
.news-item .news-content .news-title{
    color: #212121;
    font-size: 22px;
    height: 52px;
    line-height: 26px;
    transition:all 0.3s ease-out;
}
.news-item .news-content .news-title:hover {
    color: #5b86db;
    transition:all 0.3s ease-in;
}
.news-item .news-content .news-details {
    height: 44px;
    line-height: 22px;
    margin-top: 19px;
    text-align: justify;
}
.news-item .news-content .news-other {
    margin-top: 30px;
}
.news-content .news-other .news-type {
    color: #5b86db;
}
.news-content .news-other .news-author {
    float: right;
    margin-right: 15px;
}
.news-content .news-other .news-time {
    float: right;
}
/* === content end === */
/* ================= main end ================= */

js

js/commons.js

/*===  navMenuStart ===*/
$(() => {
    let $navLi = $('#header .nav .menu li')
    $navLi.click(function () {
        $(this).addClass('active').siblings('li').removeClass('active')
    });
});

/*===  navMenuEnd ===*/

 // http://192.168.31.200:8000/course/
  let url = window.location.href;
  // http/https
  let protocol = window.location.protocol;
  // 192.168.31.200:8000
  let host = window.location.host;
  let domain = protocol + '//' + host;
  let path = url.replace(domain, '');
  // console.log(path);
  let liDomArr = document.querySelectorAll('.nav .menu li');
  for (let i =0;i<liDomArr.length;i++) {
    let aDom = liDomArr[i].querySelector('a');
    if (aDom.href === url) {
      liDomArr[i].className = 'active';
    }
  }

/*== logErrorStart ==*/
function logError(err) {
    console.log(err);
    console.log(err.status + "===" + err.statusText);
}
/*== logErrorEnd ==*/


/*== 封装 JQ 的 Ajax ==*/
function selfAjax(url, method, data, successCallback){
  $.ajax({
    url,
    method,
    data,
    dataType: "json",
    success: successCallback || function (res) {console.log(res);},
    error: err => {
      logError(err);
    }
  });
}


/*======= 日期格式化 =======*/
function dateFormat(time) {
  // 获取当前的时间戳
  let timeNow = Date.now();
  // 获取发表文章的时间戳
  let TimeStamp = new Date(time).getTime();
  // 转为秒
  let second = (timeNow - TimeStamp) / 1000;
  if (second < 60) {
    return '刚刚'
  } else if (second >= 60 && second < 60 * 60) {
    let minute = Math.floor(second / 60);
    return `${minute}分钟前`;
  } else if (second >= 60 * 60 && second < 60 * 60 * 24) {
    let hour = Math.floor(second / 60 / 60);
    return `${hour}小时前`;
  } else if (second >= 60 * 60 * 24 && second < 60 * 60 * 24 * 30) {
    let day = Math.floor(second / 60 / 60 / 24);
    return `${day}天前`;
  } else {
    let date = new Date(TimeStamp);
    let Y = date.getFullYear() + '/';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/';
    let D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
    let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
    return Y + M + D + h + m;
  }
}

js/index.js

/*=== bannerStart ===*/
$(()=>{
    let $banner = $('.banner');
    let $picLi = $(".banner .pic li");
    let $prev = $('.banner .prev');
    let $next = $('.banner .next');
    let $tabLi = $('.banner .tab li');
    let index = 0;
    // 小原点
    $tabLi.click(function(){
        index = $(this).index();
        $(this).addClass('active').siblings('li').removeClass('active');
        $picLi.eq(index).fadeIn(1500).siblings('li').fadeOut(1500);
    });
    // 点击切换上一张
    $prev.click(()=>{
        index--;
        if(index<0){index = $tabLi.length-1}
        $tabLi.eq(index).addClass('active').siblings('li').removeClass('active');
        $picLi.eq(index).fadeIn(1500).siblings('li').fadeOut(1500);
    }).mousedown(()=> false);
    // 点击切换下一张
    $next.click(()=>{
        auto();
    }).mousedown(()=> false);
    //  图片向前滑动
    function auto(){
        index++;
        index %= $tabLi.length;
        $tabLi.eq(index).addClass('active').siblings('li').removeClass('active');
        $picLi.eq(index).fadeIn(1500).siblings('li').fadeOut(1500);
    }
    // 定时器
    let timer = setInterval(auto, 2500);
    $banner.hover(()=>{clearInterval(timer)}, ()=>{auto()})
});
/*=== bannerEnd ===*/
/*=== newsNavStart ===*/
$(()=>{
    let $newsLi = $('.news-nav ul li');
    $newsLi.click(function(event) {
        $(this).addClass('active').siblings('li').removeClass('active');
    });
});
/*=== newsNavEnd ===*/

js/base

js/base/common.js

/*===  navMenuStart ===*/
$(()=>{
    let $navLi = $('#header .nav .menu li')
    $navLi.click(function(){
        $(this).addClass('active').siblings('li').removeClass('active')
    });
});
/*===  navMenuEnd ===*/

js/base/fsweetalert.js

const fAlert = {
  /*
      功能:提示错误
      参数:
          - msg:提示的内容(可选)
  */
  'alertError': function (msg) {
    swal('提示', msg, 'error');
  },
  'alertErrorCallback': function (msg, confirmText, confirmCallback) {
    const args = {
      'title': '提示',
      'text': msg,
      'type': 'error',
      'confirmButtonText': confirmText,
    };
    swal(args, confirmCallback);
  },
  /*
      功能:信息提示
      参数:
          - msg:提示的内容(可选)
  */
  'alertInfo': function (msg) {
    swal('提示', msg, 'warning');
  },
  /*
      功能:可以自定义标题的信息提示
      参数:
          - msg:提示的内容(可选)
  */
  'alertInfoWithTitle': function (title, msg) {
    swal(title, msg);
  },
  /*
      功能:成功的提示
      参数:
          - msg:提示的内容(必须)
          - confirmCallback:确认按钮的执行事件(可选)
  */
  'alertSuccessCallback': function (msg, confirmCallback) {
    const args = {
      'title': '提示',
      'text': msg,
      'type': 'success',
    };
    swal(args, confirmCallback);
  },
  /*
      功能:成功的提示
      参数:
          - msg:提示的内容(必须)
          - confirmButtonText : 按钮的文字 (必选)
          - confirmCallback:确认按钮的执行事件(可选)
  */
  'alertNewsSuccessCallback': function (msg, confirmButtonText, confirmCallback) {
    const args = {
      'title': '提示',
      'text': msg,
      'type': 'success',
      'confirmButtonText': confirmButtonText,
    };
    swal(args, confirmCallback);
  },
  /*
      功能:带有标题的成功提示
      参数:
          - title:提示框的标题(必须)
          - msg:提示的内容(必须)
  */
  'alertSuccessWithTitle': function (title, msg) {
    swal(title, msg, 'success');
  },
  /*
      功能:确认提示
      参数:字典的形式
          - title:提示框标题(可选)
          - type:提示框的类型(可选)
          - confirmText:确认按钮文本(可选)
          - cancelText:取消按钮文本(可选)
          - text:提示框内容(必须)
          - confirmCallback:确认按钮点击回调(可选)
          - cancelCallback:取消按钮点击回调(可选)
  */
  'alertConfirm': function (params) {
    swal({
      'title': params['title'] ? params['title'] : '提示',
      'showCancelButton': true,
      'showConfirmButton': true,
      'type': params['type'] ? params['type'] : '',
      'confirmButtonText': params['confirmText'] ? params['confirmText'] : '确定',
      'cancelButtonText': params['cancelText'] ? params['cancelText'] : '取消',
      'text': params['text'] ? params['text'] : ''
    }, function (isConfirm) {
      if (isConfirm) {
        if (params['confirmCallback']) {
          params['confirmCallback']();
        }
      } else {
        if (params['cancelCallback']) {
          params['cancelCallback']();
        }
      }
    });
  },
  /*
      功能:带有一个输入框的提示
      参数:字典的形式
          - title:提示框的标题(可选)
          - text:提示框的内容(可选)
          - placeholder:输入框的占位文字(可选)
          - confirmText:确认按钮文字(可选)
          - cancelText:取消按钮文字(可选)
          - confirmCallback:确认后的执行事件
  */
  'alertOneInput': function (params) {
    swal({
      'title': params['title'] ? params['title'] : '请输入',
      'text': params['text'] ? params['text'] : '',
      'type': 'input',
      'showCancelButton': true,
      'animation': 'slide-from-top',
      'closeOnConfirm': false,
      'showLoaderOnConfirm': true,
      'inputPlaceholder': params['placeholder'] ? params['placeholder'] : '',
      'inputValue': params['value'] ? params['value'] : null,
      'confirmButtonText': params['confirmText'] ? params['confirmText'] : '确定',
      'cancelButtonText': params['cancelText'] ? params['cancelText'] : '取消'
    }, function (inputValue) {
      if (inputValue === false) return false;
      if (!inputValue.trim()) {
        swal.showInputError('输入框不能为空!');
        return false;
      }
      if (params['confirmCallback']) {
        params['confirmCallback'](inputValue);
      }
    });
  },
  /*
      功能:网络错误提示
      参数:无
  */
  'alertNetworkError': function () {
    this.alertErrorToast('网络错误');
  },
  /*
      功能:信息toast提示(1s后消失)
      参数:
          - msg:提示消息
  */
  'alertInfoToast': function (msg) {
    this.alertToast(msg, 'info');
  },
  /*
      功能:错误toast提示(1s后消失)
      参数:
          - msg:提示消息
  */
  'alertErrorToast': function (msg) {
    this.alertToast(msg, 'error');
  },
  /*
      功能:成功toast提示(1s后消失)
      参数:
          - msg:提示消息
  */
  'alertSuccessToast': function (msg) {
    if (!msg) {
      msg = '成功!';
    }
    this.alertToast(msg, 'success');
  },
  /*
      功能:弹出toast(1s后消失)
      参数:
          - msg:提示消息
          - type:toast的类型
  */
  'alertToast': function (msg, type) {
    swal({
      'title': msg,
      'text': '',
      'type': type,
      'showCancelButton': false,
      'showConfirmButton': false,
      'timer': 1000,
    });
  },
  // 关闭当前对话框
  'close': function () {
    swal.close();
  }
};

js/base/message.js

"use strict";

// 消息提示框
function Message() {
  // 判断是否加载
  this.isAppended = false;
  // 提示框的宽度
  this.wrapperWidth = 400;
  // 提示框的高度
  this.wrapperHeight = 48;
  // 提示框初始化样式
  this.initStyle();
  // 提示框初始化元素
  this.initElement();
  // 提示框监听关闭按钮
  this.listenCloseEvent();
}

// 初始化样式
Message.prototype.initStyle = function () {
  // 错误消息文字和背景样式
  this.errorStyle = {
    "wrapper": {
      "background": "#f8d7da",
      "color": "#dc3545"
    },
    "close": {
      "color": "#993d3d"
    }
  };
  // 成功消息文字和背景样式
  this.successStyle = {
    "wrapper": {
      "background": "#d4edda",
      "color": "#28a745"
    },
    "close": {
      "color": "#468847"
    }
  };
  // 描述信息文字和背景样式
  this.infoStyle = {
    "wrapper": {
      "background": "#d1ecf1",
      "color": "#17a2b8"
    },
    "close": {
      "color": "#5bc0de"
    }
  };
};

// 初始化元素
Message.prototype.initElement = function () {
  // 设置提示框元素
  this.wrapper = $("<div></div>");
  // 设置提示框整体样式
  this.wrapper.css({
    'padding': '10px',
    'font-size': '14px',
    'width': this.wrapperWidth,
    'position': 'fixed',
    'z-index': 99999,
    'left': 'calc(50% - ' + this.wrapperWidth / 2 + 'px)',
    'top': -this.wrapperHeight,
    'height': this.wrapperHeight,
    'box-sizing': 'border-box',
    'border': '1px solid #ddd',
    'border-radius': '5px',
    'line-height': 'calc(' + this.wrapperHeight / 2 + 'px)',
    'font-weight': 600
  });
  // 生成关闭按钮
  this.closeBtn = $("<span>×</span>");
  // 关闭按钮的样式
  this.closeBtn.css({
    'float': 'right',
    'cursor': 'pointer',
    'font-size': '24px',
    'font-weight': 500
  });
  // 提示文字的元素生成
  this.messageSpan = $("<span class='py-message'></span>");
  // 将提示文字的元素和关闭按钮添加到提示框中
  this.wrapper.append(this.messageSpan);
  this.wrapper.append(this.closeBtn);
};

// 关闭按钮的事件
Message.prototype.listenCloseEvent = function () {
  var _this = this;

  // 点击关闭
  this.closeBtn.click(function () {
    _this.wrapper.animate({ "top": -_this.wrapperHeight });
  });
};

// 显示异常
Message.prototype.showError = function (message) {
  this.show(message, "error");
};

Message.prototype.showSuccess = function (message) {
  this.show(message, "success");
};

Message.prototype.showInfo = function (message) {
  this.show(message, "info");
};

// 提示框的显示
Message.prototype.show = function (message, type) {
  var _this2 = this;

  // 如果没有添加  则添加
  if (!this.isAppended) {
    $(document.body).append(this.wrapper);
    this.isAppended = true;
  }

  // 将各种提示的文字添加对应不同的样式
  this.messageSpan.text(message);
  if (type === "error") {
    this.wrapper.css(this.errorStyle['wrapper']);
    this.closeBtn.css(this.errorStyle['close']);
  } else if (type === "info") {
    this.wrapper.css(this.infoStyle['wrapper']);
    this.closeBtn.css(this.infoStyle['close']);
  } else if (type === "success") {
    this.wrapper.css(this.successStyle['wrapper']);
    this.closeBtn.css(this.successStyle['close']);
  }
  // 设置两秒后自动关闭
  this.wrapper.animate({ "top": 0 }, function () {
    setTimeout(function () {
      _this2.wrapper.animate({ "top": -_this2.wrapperHeight });
    }, 2500);
  });
};
// 将对象绑定到 window 上
window.message = new Message();

js/base/sweetalert.min.js

!function(e,t,n){"use strict";!function o(e,t,n){function a(s,l){if(!t[s]){if(!e[s]){var i="function"==typeof require&&require;if(!l&&i)return i(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var c=t[s]={exports:{}};e[s][0].call(c.exports,function(t){var n=e[s][1][t];return a(n?n:t)},c,c.exports,o,e,t,n)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s<n.length;s++)a(n[s]);return a}({1:[function(o,a,r){function s(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(r,"__esModule",{value:!0});var l,i,u,c,d=o("./modules/handle-dom"),f=o("./modules/utils"),p=o("./modules/handle-swal-dom"),m=o("./modules/handle-click"),v=o("./modules/handle-key"),y=s(v),b=o("./modules/default-params"),h=s(b),g=o("./modules/set-params"),w=s(g);r["default"]=u=c=function(){function o(e){var t=a;return t[e]===n?h["default"][e]:t[e]}var a=arguments[0];if((0,d.addClass)(t.body,"stop-scrolling"),(0,p.resetInput)(),a===n)return(0,f.logStr)("SweetAlert expects at least 1 attribute!"),!1;var r=(0,f.extend)({},h["default"]);switch(typeof a){case"string":r.title=a,r.text=arguments[1]||"",r.type=arguments[2]||"";break;case"object":if(a.title===n)return(0,f.logStr)('Missing "title" argument!'),!1;r.title=a.title;for(var s in h["default"])r[s]=o(s);r.confirmButtonText=r.showCancelButton?"Confirm":h["default"].confirmButtonText,r.confirmButtonText=o("confirmButtonText"),r.doneFunction=arguments[1]||null;break;default:return(0,f.logStr)('Unexpected type of argument! Expected "string" or "object", got '+typeof a),!1}(0,w["default"])(r),(0,p.fixVerticalPosition)(),(0,p.openModal)(arguments[1]);for(var u=(0,p.getModal)(),v=u.querySelectorAll("button"),b=["onclick","onmouseover","onmouseout","onmousedown","onmouseup","onfocus"],g=function(e){return(0,m.handleButton)(e,r,u)},C=0;C<v.length;C++)for(var S=0;S<b.length;S++){var x=b[S];v[C][x]=g}(0,p.getOverlay)().onclick=g,l=e.onkeydown;var k=function(e){return(0,y["default"])(e,r,u)};e.onkeydown=k,e.onfocus=function(){setTimeout(function(){i!==n&&(i.focus(),i=n)},0)},c.enableButtons()},u.setDefaults=c.setDefaults=function(e){if(!e)throw new Error("userParams is required");if("object"!=typeof e)throw new Error("userParams has to be a object");(0,f.extend)(h["default"],e)},u.close=c.close=function(){var o=(0,p.getModal)();(0,d.fadeOut)((0,p.getOverlay)(),5),(0,d.fadeOut)(o,5),(0,d.removeClass)(o,"showSweetAlert"),(0,d.addClass)(o,"hideSweetAlert"),(0,d.removeClass)(o,"visible");var a=o.querySelector(".sa-icon.sa-success");(0,d.removeClass)(a,"animate"),(0,d.removeClass)(a.querySelector(".sa-tip"),"animateSuccessTip"),(0,d.removeClass)(a.querySelector(".sa-long"),"animateSuccessLong");var r=o.querySelector(".sa-icon.sa-error");(0,d.removeClass)(r,"animateErrorIcon"),(0,d.removeClass)(r.querySelector(".sa-x-mark"),"animateXMark");var s=o.querySelector(".sa-icon.sa-warning");return(0,d.removeClass)(s,"pulseWarning"),(0,d.removeClass)(s.querySelector(".sa-body"),"pulseWarningIns"),(0,d.removeClass)(s.querySelector(".sa-dot"),"pulseWarningIns"),setTimeout(function(){var e=o.getAttribute("data-custom-class");(0,d.removeClass)(o,e)},300),(0,d.removeClass)(t.body,"stop-scrolling"),e.onkeydown=l,e.previousActiveElement&&e.previousActiveElement.focus(),i=n,clearTimeout(o.timeout),!0},u.showInputError=c.showInputError=function(e){var t=(0,p.getModal)(),n=t.querySelector(".sa-input-error");(0,d.addClass)(n,"show");var o=t.querySelector(".sa-error-container");(0,d.addClass)(o,"show"),o.querySelector("p").innerHTML=e,setTimeout(function(){u.enableButtons()},1),t.querySelector("input").focus()},u.resetInputError=c.resetInputError=function(e){if(e&&13===e.keyCode)return!1;var t=(0,p.getModal)(),n=t.querySelector(".sa-input-error");(0,d.removeClass)(n,"show");var o=t.querySelector(".sa-error-container");(0,d.removeClass)(o,"show")},u.disableButtons=c.disableButtons=function(e){var t=(0,p.getModal)(),n=t.querySelector("button.confirm"),o=t.querySelector("button.cancel");n.disabled=!0,o.disabled=!0},u.enableButtons=c.enableButtons=function(e){var t=(0,p.getModal)(),n=t.querySelector("button.confirm"),o=t.querySelector("button.cancel");n.disabled=!1,o.disabled=!1},"undefined"!=typeof e?e.sweetAlert=e.swal=u:(0,f.logStr)("SweetAlert is a frontend module!"),a.exports=r["default"]},{"./modules/default-params":2,"./modules/handle-click":3,"./modules/handle-dom":4,"./modules/handle-key":5,"./modules/handle-swal-dom":6,"./modules/set-params":8,"./modules/utils":9}],2:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var o={title:"",text:"",type:null,allowOutsideClick:!1,showConfirmButton:!0,showCancelButton:!1,closeOnConfirm:!0,closeOnCancel:!0,confirmButtonText:"OK",confirmButtonColor:"#8CD4F5",cancelButtonText:"Cancel",imageUrl:null,imageSize:null,timer:null,customClass:"",html:!1,animation:!0,allowEscapeKey:!0,inputType:"text",inputPlaceholder:"",inputValue:"",showLoaderOnConfirm:!1};n["default"]=o,t.exports=n["default"]},{}],3:[function(t,n,o){Object.defineProperty(o,"__esModule",{value:!0});var a=t("./utils"),r=(t("./handle-swal-dom"),t("./handle-dom")),s=function(t,n,o){function s(e){m&&n.confirmButtonColor&&(p.style.backgroundColor=e)}var u,c,d,f=t||e.event,p=f.target||f.srcElement,m=-1!==p.className.indexOf("confirm"),v=-1!==p.className.indexOf("sweet-overlay"),y=(0,r.hasClass)(o,"visible"),b=n.doneFunction&&"true"===o.getAttribute("data-has-done-function");switch(m&&n.confirmButtonColor&&(u=n.confirmButtonColor,c=(0,a.colorLuminance)(u,-.04),d=(0,a.colorLuminance)(u,-.14)),f.type){case"mouseover":s(c);break;case"mouseout":s(u);break;case"mousedown":s(d);break;case"mouseup":s(c);break;case"focus":var h=o.querySelector("button.confirm"),g=o.querySelector("button.cancel");m?g.style.boxShadow="none":h.style.boxShadow="none";break;case"click":var w=o===p,C=(0,r.isDescendant)(o,p);if(!w&&!C&&y&&!n.allowOutsideClick)break;m&&b&&y?l(o,n):b&&y||v?i(o,n):(0,r.isDescendant)(o,p)&&"BUTTON"===p.tagName&&sweetAlert.close()}},l=function(e,t){var n=!0;(0,r.hasClass)(e,"show-input")&&(n=e.querySelector("input").value,n||(n="")),t.doneFunction(n),t.closeOnConfirm&&sweetAlert.close(),t.showLoaderOnConfirm&&sweetAlert.disableButtons()},i=function(e,t){var n=String(t.doneFunction).replace(/\s/g,""),o="function("===n.substring(0,9)&&")"!==n.substring(9,10);o&&t.doneFunction(!1),t.closeOnCancel&&sweetAlert.close()};o["default"]={handleButton:s,handleConfirm:l,handleCancel:i},n.exports=o["default"]},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],4:[function(n,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=function(e,t){return new RegExp(" "+t+" ").test(" "+e.className+" ")},s=function(e,t){r(e,t)||(e.className+=" "+t)},l=function(e,t){var n=" "+e.className.replace(/[\t\r\n]/g," ")+" ";if(r(e,t)){for(;n.indexOf(" "+t+" ")>=0;)n=n.replace(" "+t+" "," ");e.className=n.replace(/^\s+|\s+$/g,"")}},i=function(e){var n=t.createElement("div");return n.appendChild(t.createTextNode(e)),n.innerHTML},u=function(e){e.style.opacity="",e.style.display="block"},c=function(e){if(e&&!e.length)return u(e);for(var t=0;t<e.length;++t)u(e[t])},d=function(e){e.style.opacity="",e.style.display="none"},f=function(e){if(e&&!e.length)return d(e);for(var t=0;t<e.length;++t)d(e[t])},p=function(e,t){for(var n=t.parentNode;null!==n;){if(n===e)return!0;n=n.parentNode}return!1},m=function(e){e.style.left="-9999px",e.style.display="block";var t,n=e.clientHeight;return t="undefined"!=typeof getComputedStyle?parseInt(getComputedStyle(e).getPropertyValue("padding-top"),10):parseInt(e.currentStyle.padding),e.style.left="",e.style.display="none","-"+parseInt((n+t)/2)+"px"},v=function(e,t){if(+e.style.opacity<1){t=t||16,e.style.opacity=0,e.style.display="block";var n=+new Date,o=function a(){e.style.opacity=+e.style.opacity+(new Date-n)/100,n=+new Date,+e.style.opacity<1&&setTimeout(a,t)};o()}e.style.display="block"},y=function(e,t){t=t||16,e.style.opacity=1;var n=+new Date,o=function a(){e.style.opacity=+e.style.opacity-(new Date-n)/100,n=+new Date,+e.style.opacity>0?setTimeout(a,t):e.style.display="none"};o()},b=function(n){if("function"==typeof MouseEvent){var o=new MouseEvent("click",{view:e,bubbles:!1,cancelable:!0});n.dispatchEvent(o)}else if(t.createEvent){var a=t.createEvent("MouseEvents");a.initEvent("click",!1,!1),n.dispatchEvent(a)}else t.createEventObject?n.fireEvent("onclick"):"function"==typeof n.onclick&&n.onclick()},h=function(t){"function"==typeof t.stopPropagation?(t.stopPropagation(),t.preventDefault()):e.event&&e.event.hasOwnProperty("cancelBubble")&&(e.event.cancelBubble=!0)};a.hasClass=r,a.addClass=s,a.removeClass=l,a.escapeHtml=i,a._show=u,a.show=c,a._hide=d,a.hide=f,a.isDescendant=p,a.getTopMargin=m,a.fadeIn=v,a.fadeOut=y,a.fireClick=b,a.stopEventPropagation=h},{}],5:[function(t,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=t("./handle-dom"),s=t("./handle-swal-dom"),l=function(t,o,a){var l=t||e.event,i=l.keyCode||l.which,u=a.querySelector("button.confirm"),c=a.querySelector("button.cancel"),d=a.querySelectorAll("button[tabindex]");if(-1!==[9,13,32,27].indexOf(i)){for(var f=l.target||l.srcElement,p=-1,m=0;m<d.length;m++)if(f===d[m]){p=m;break}9===i?(f=-1===p?u:p===d.length-1?d[0]:d[p+1],(0,r.stopEventPropagation)(l),f.focus(),o.confirmButtonColor&&(0,s.setFocusStyle)(f,o.confirmButtonColor)):13===i?("INPUT"===f.tagName&&(f=u,u.focus()),f=-1===p?u:n):27===i&&o.allowEscapeKey===!0?(f=c,(0,r.fireClick)(f,l)):f=n}};a["default"]=l,o.exports=a["default"]},{"./handle-dom":4,"./handle-swal-dom":6}],6:[function(n,o,a){function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(a,"__esModule",{value:!0});var s=n("./utils"),l=n("./handle-dom"),i=n("./default-params"),u=r(i),c=n("./injected-html"),d=r(c),f=".sweet-alert",p=".sweet-overlay",m=function(){var e=t.createElement("div");for(e.innerHTML=d["default"];e.firstChild;)t.body.appendChild(e.firstChild)},v=function x(){var e=t.querySelector(f);return e||(m(),e=x()),e},y=function(){var e=v();return e?e.querySelector("input"):void 0},b=function(){return t.querySelector(p)},h=function(e,t){var n=(0,s.hexToRgb)(t);e.style.boxShadow="0 0 2px rgba("+n+", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"},g=function(n){var o=v();(0,l.fadeIn)(b(),10),(0,l.show)(o),(0,l.addClass)(o,"showSweetAlert"),(0,l.removeClass)(o,"hideSweetAlert"),e.previousActiveElement=t.activeElement;var a=o.querySelector("button.confirm");a.focus(),setTimeout(function(){(0,l.addClass)(o,"visible")},500);var r=o.getAttribute("data-timer");if("null"!==r&&""!==r){var s=n;o.timeout=setTimeout(function(){var e=(s||null)&&"true"===o.getAttribute("data-has-done-function");e?s(null):sweetAlert.close()},r)}},w=function(){var e=v(),t=y();(0,l.removeClass)(e,"show-input"),t.value=u["default"].inputValue,t.setAttribute("type",u["default"].inputType),t.setAttribute("placeholder",u["default"].inputPlaceholder),C()},C=function(e){if(e&&13===e.keyCode)return!1;var t=v(),n=t.querySelector(".sa-input-error");(0,l.removeClass)(n,"show");var o=t.querySelector(".sa-error-container");(0,l.removeClass)(o,"show")},S=function(){var e=v();e.style.marginTop=(0,l.getTopMargin)(v())};a.sweetAlertInitialize=m,a.getModal=v,a.getOverlay=b,a.getInput=y,a.setFocusStyle=h,a.openModal=g,a.resetInput=w,a.resetInputError=C,a.fixVerticalPosition=S},{"./default-params":2,"./handle-dom":4,"./injected-html":7,"./utils":9}],7:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var o='<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error">\n <span class="sa-x-mark">\n <span class="sa-line sa-left"></span>\n <span class="sa-line sa-right"></span>\n </span>\n </div><div class="sa-icon sa-warning">\n <span class="sa-body"></span>\n <span class="sa-dot"></span>\n </div><div class="sa-icon sa-info"></div><div class="sa-icon sa-success">\n <span class="sa-line sa-tip"></span>\n <span class="sa-line sa-long"></span>\n\n <div class="sa-placeholder"></div>\n <div class="sa-fix"></div>\n </div><div class="sa-icon sa-custom"></div><h2>Title</h2>\n <p>Text</p>\n <fieldset>\n <input type="text" tabIndex="3" />\n <div class="sa-input-error"></div>\n </fieldset><div class="sa-error-container">\n <div class="icon">!</div>\n <p>Not valid!</p>\n </div><div class="sa-button-container">\n <button class="cancel" tabIndex="2">Cancel</button>\n <div class="sa-confirm-button-container">\n <button class="confirm" tabIndex="1">OK</button><div class="la-ball-fall">\n <div></div>\n <div></div>\n <div></div>\n </div>\n </div>\n </div></div>';n["default"]=o,t.exports=n["default"]},{}],8:[function(e,t,o){Object.defineProperty(o,"__esModule",{value:!0});var a=e("./utils"),r=e("./handle-swal-dom"),s=e("./handle-dom"),l=["error","warning","info","success","input","prompt"],i=function(e){var t=(0,r.getModal)(),o=t.querySelector("h2"),i=t.querySelector("p"),u=t.querySelector("button.cancel"),c=t.querySelector("button.confirm");if(o.innerHTML=e.html?e.title:(0,s.escapeHtml)(e.title).split("\n").join("<br>"),i.innerHTML=e.html?e.text:(0,s.escapeHtml)(e.text||"").split("\n").join("<br>"),e.text&&(0,s.show)(i),e.customClass)(0,s.addClass)(t,e.customClass),t.setAttribute("data-custom-class",e.customClass);else{var d=t.getAttribute("data-custom-class");(0,s.removeClass)(t,d),t.setAttribute("data-custom-class","")}if((0,s.hide)(t.querySelectorAll(".sa-icon")),e.type&&!(0,a.isIE8)()){var f=function(){for(var o=!1,a=0;a<l.length;a++)if(e.type===l[a]){o=!0;break}if(!o)return logStr("Unknown alert type: "+e.type),{v:!1};var i=["success","error","warning","info"],u=n;-1!==i.indexOf(e.type)&&(u=t.querySelector(".sa-icon.sa-"+e.type),(0,s.show)(u));var c=(0,r.getInput)();switch(e.type){case"success":(0,s.addClass)(u,"animate"),(0,s.addClass)(u.querySelector(".sa-tip"),"animateSuccessTip"),(0,s.addClass)(u.querySelector(".sa-long"),"animateSuccessLong");break;case"error":(0,s.addClass)(u,"animateErrorIcon"),(0,s.addClass)(u.querySelector(".sa-x-mark"),"animateXMark");break;case"warning":(0,s.addClass)(u,"pulseWarning"),(0,s.addClass)(u.querySelector(".sa-body"),"pulseWarningIns"),(0,s.addClass)(u.querySelector(".sa-dot"),"pulseWarningIns");break;case"input":case"prompt":c.setAttribute("type",e.inputType),c.value=e.inputValue,c.setAttribute("placeholder",e.inputPlaceholder),(0,s.addClass)(t,"show-input"),setTimeout(function(){c.focus(),c.addEventListener("keyup",swal.resetInputError)},400)}}();if("object"==typeof f)return f.v}if(e.imageUrl){var p=t.querySelector(".sa-icon.sa-custom");p.style.backgroundImage="url("+e.imageUrl+")",(0,s.show)(p);var m=80,v=80;if(e.imageSize){var y=e.imageSize.toString().split("x"),b=y[0],h=y[1];b&&h?(m=b,v=h):logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got "+e.imageSize)}p.setAttribute("style",p.getAttribute("style")+"width:"+m+"px; height:"+v+"px")}t.setAttribute("data-has-cancel-button",e.showCancelButton),e.showCancelButton?u.style.display="inline-block":(0,s.hide)(u),t.setAttribute("data-has-confirm-button",e.showConfirmButton),e.showConfirmButton?c.style.display="inline-block":(0,s.hide)(c),e.cancelButtonText&&(u.innerHTML=(0,s.escapeHtml)(e.cancelButtonText)),e.confirmButtonText&&(c.innerHTML=(0,s.escapeHtml)(e.confirmButtonText)),e.confirmButtonColor&&(c.style.backgroundColor=e.confirmButtonColor,c.style.borderLeftColor=e.confirmLoadingButtonColor,c.style.borderRightColor=e.confirmLoadingButtonColor,(0,r.setFocusStyle)(c,e.confirmButtonColor)),t.setAttribute("data-allow-outside-click",e.allowOutsideClick);var g=!!e.doneFunction;t.setAttribute("data-has-done-function",g),e.animation?"string"==typeof e.animation?t.setAttribute("data-animation",e.animation):t.setAttribute("data-animation","pop"):t.setAttribute("data-animation","none"),t.setAttribute("data-timer",e.timer)};o["default"]=i,t.exports=o["default"]},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],9:[function(t,n,o){Object.defineProperty(o,"__esModule",{value:!0});var a=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},r=function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?parseInt(t[1],16)+", "+parseInt(t[2],16)+", "+parseInt(t[3],16):null},s=function(){return e.attachEvent&&!e.addEventListener},l=function(t){"undefined"!=typeof e&&e.console&&e.console.log("SweetAlert: "+t)},i=function(e,t){e=String(e).replace(/[^0-9a-f]/gi,""),e.length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;var n,o,a="#";for(o=0;3>o;o++)n=parseInt(e.substr(2*o,2),16),n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16),a+=("00"+n).substr(n.length);return a};o.extend=a,o.hexToRgb=r,o.isIE8=s,o.logStr=l,o.colorLuminance=i},{}]},{},[1]),"function"==typeof define&&define.amd?define(function(){return sweetAlert}):"undefined"!=typeof module&&module.exports&&(module.exports=sweetAlert)}(window,document);

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值