【问题标题】:Font Awesome 5 pseudo elements with Webpack带有 Webpack 的 Font Awesome 5 伪元素
【发布时间】:2018-08-24 00:44:16
【问题描述】:

我已经为此苦苦挣扎了太久,不知道我哪里出错了。

我正在尝试在我的 webpack 项目中使用 fontawesome 5。我已经能够在 HTML 中使用图标,但如果我尝试使用伪选择器,它只会返回空方块。阅读大量文章和文档,但似乎没有任何效果。请帮忙谢谢。

npm install @fortawesome/fontawesome-free

index.js

    import 'bootstrap'
    import '@fortawesome/fontawesome-free/js/all.js'
    import '../scss/main.scss'

    window.FontAwesomeConfig = {
      searchPseudoElements: true
    }

ma​​in.scss

    /// Bootstrap ///
    // -- Required
    @import "~bootstrap/scss/functions";
    @import "~bootstrap/scss/variables";
    @import "~bootstrap/scss/mixins";

    // -- Optional
    @import "~bootstrap/scss/buttons";
    @import "~bootstrap/scss/code";
    @import "~bootstrap/scss/forms";
    @import "~bootstrap/scss/grid";
    @import "~bootstrap/scss/images";
    @import "~bootstrap/scss/modal";
    @import "~bootstrap/scss/reboot";
    @import "~bootstrap/scss/type";
    @import "~bootstrap/scss/transitions";
    @import "~bootstrap/scss/mixins/breakpoints";

    /// Modules ///
    @import 'modules/colors';
    @import 'modules/sizes';
    @import 'modules/fonts';
    @import 'modules/transitions';    

    /// Partial Files ///
    @import 'partials/jumbotron';

    /// Vendor Files ///
    @import 'vendor/reset';

SCSS 文件 _jumbotron.scss

    .products {
        background: $colour-red;

        .products-item {
          .products-item-header {
            .products-item-title {
              a {
                padding: $size-base;
                display: block;
                color: $colour-white;
                text-align: center;

                &:before {
                  font-family: "Font Awesome 5 Brands", "Font Awesome 5 Free";
                  display: block;
                  content: "\f095";
                  font-weight: 900;
                  font-size: 20px;
                  color: $colour-white;
            }
          }
        }
      }

HTML

    <div class="products">
        <div class="row">
            <div class="col-sm-3 products-item">
                <div id="post-37">
                  <div class="products-item-header entry-header">
                    <h3 class="products-item-title entry-title">
                       <a href="http://localhost/wplocal/products/agribusiness">
                          Agribusiness
                        </a>
                    </h3>
                 </div>
              </div>
           </div>
        </div>
     </div>

Webpack 配置

    const path = require('path')
    const webpack = require('webpack')
    const HtmlWebPackPlugin = require('html-webpack-plugin')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    // const devMode = process.env.NODE_ENV !== 'production'

    module.exports = {
        entry: { main: './src/js/index.js' },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'js/[name].js'
        },
        module: {
            rules: [
                {
                  use: {
                    loader:'babel-loader',
                    options: { presets: ['es2015'] }
                  },
                  test: /\.js$/,
                  exclude: /node_modules/
                },
                {
                    test: /\.(sa|sc|c)ss$/,
                    use: [
                        'style-loader',
                        MiniCssExtractPlugin.loader,
                        'css-loader',
                        'sass-loader'
                    ]
                },
                {
                  test: /\.(gif|png|jp(e*)g|svg)$/,
                  use: [{
                    loader: 'url-loader',
                    options: {
                      limit: 1000000, //Convert images < 1mb to base 64 strings
                      name: 'images/[name].[ext]'
                    }
                  }] 
                },
                {
                  test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
                  use: [{
                    loader: 'file-loader',
                    options: {
                      name: 'fonts/[name].[ext]',
                      publicPath: '../'
                    }
                  }]
                }
            ]
        },
        devServer: {
            contentBase: "./dist"
        },
        plugins: [
            new HtmlWebPackPlugin({
                inject: false,
                hash: true,
                template: './src/index.html',
                filename: 'index.html'
            }),
            new MiniCssExtractPlugin({
                filename: 'css/style.css',
                chunkFilename: 'css/style.css'
            }),
            new CopyWebpackPlugin ([
              {
                from: './src/images',
                to: 'images'
              }
            ]),
            new webpack.ProvidePlugin({
              $: 'jquery',
              jQuery: 'jquery',
              'window.jQuery': 'jquery',
              Popper: ['popper.js', 'default']
            })
        ]
    }

【问题讨论】:

标签: javascript css webpack font-awesome font-awesome-5


【解决方案1】:

试试

  font-family: 'Font Awesome\ 5 Free';

【讨论】:

  • 感谢您的评论,但不幸的是没有运气。
【解决方案2】:

在 fontawesome-svg-core 配置对象中将 searchPseudoElements 设置为 true。 并验证 font-family 和 content 属性是否具有正确的值。

取自 fontawesome 文档:

https://fontawesome.com/how-to-use/javascript-api/setup/configuration

通过将 searchPseudoElements 设置为 true(默认为 false),您 可以让 Font Awesome 在您的 DOM 中搜索具有以下内容的任何元素:

A Font Awesome 匹配字体系列,

内容属性

有效的字体系列值为:Font Awesome 5 Solid、Font Awesome 5 Regular、Font Awesome > 5 Light 和 Font Awesome 5 Brands。

示例


import {library, dom, config} from "@fortawesome/fontawesome-svg-core";
import {faCheck} from "@fortawesome/free-solid-svg-icons/faCheck";

config.searchPseudoElements = true; //<----- config

export default () => {

    library.add(faCheck);
    dom.watch();

}

示例:

<head>
  <script src="https://use.fontawesome.com/releases/v5.13.1/js/all.js" data-search-pseudo-elements></script>
  <style>
  .glasses::before {
    display: none;
    font-family: 'Font Awesome 5 Solid';
    content: "\f530";
  }
  </style>
</head>
<body>
  <span class="glasses"></span>
</body>

【讨论】:

    【解决方案3】:
    <style>
    .element:before {
    content: "\f000";
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    text-decoration: inherit;
    color: #000;
    font-size: 18px;
    padding-right: 0.5em;
    position: absolute;
    top: 10px;
    left: 0;
    }
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 2018-05-22
    • 2019-01-13
    • 1970-01-01
    • 2018-06-02
    • 2017-11-25
    • 2018-11-13
    • 2020-03-26
    • 2014-07-28
    • 2018-11-13
    相关资源
    最近更新 更多