【问题标题】:Webpack loading SVG with white borderWebpack 加载带有白色边框的 SVG
【发布时间】:2017-12-16 01:22:50
【问题描述】:

我有一个通过文件加载器加载的 SVG,它指向我的 .scss 文件中的路径,并且出于某种奇怪的原因,它有一个白色边框。如果我设置一个 CSS 边界,它会设置在白色之外。

我检查了文件以确保它没有白色背景。这是确认的。

menubar.js

import React, { Component } from 'react';

class MenuBar extends Component {
    render() {
        return (
            <div className="menu-bar">
                <img className="logo" />

                <div className="nav">
                    <a className="selected" href="#">Sky</a>
                    <a href="#">HQ</a>
                    <a href="#">Settings</a>
                </div>
            </div>
        );
    }
}

export default MenuBar;

menubar.scss:

.menu-bar .logo {
    position: relative;
    background: url('../images/glimpse-menu-bar.svg') center center no-repeat;
    top: 50%;
    transform: translateY(-50%);
    padding-left: 20px;
    cursor: pointer;
}

我的webpack.dev.config.js

const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// Config directories
const SRC_DIR = path.resolve(__dirname, 'src');
const ASSETS_DIR = path.resolve(__dirname, 'assets');
const OUTPUT_DIR = path.resolve(__dirname, 'dist');

// Any directories you will be adding code/files into, need to be added to this array so webpack will pick them up
const defaultInclude = [SRC_DIR];

module.exports = {
    entry: ['babel-polyfill', SRC_DIR + '/index.js'],

    output: {
        path: OUTPUT_DIR,
        publicPath: '/',
        filename: 'bundle.js',
    },

    module: {
        rules: [
            { 
                test: /\.css$/, 
                loader: 'style-loader!css-loader',
            },
            { 
                test: /\.scss$/, 
                loader: 'style-loader!css-loader!sass-loader',
            },
            {
                test: /\.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    presets: ['react', 'es2015', 'stage-3'],
                },
            },
            {
                test: /\.(jpe?g|png|gif|svg)$/i,
                loader: "file-loader",
            },
            { 
                test: /.(ttf|eot|otf)(\?v=[0-9].[0-9].[0-9])?$/, 
                loader: "file-loader",
            },       
        ],
    },
    target: 'electron-renderer',
    plugins: [
        new HtmlWebpackPlugin(),
        new webpack.DefinePlugin({
            'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
        }),
    ],
    devtool: 'cheap-source-map',
    devServer: {
        contentBase: OUTPUT_DIR,
        stats: {
            colors: true,
            chunks: false,
            children: false,
        },
    },
};

这里有什么想法吗?

另一个例子:

这是 1 个 SVG 的代码。我项目中的每个 SVG 都显示边框

<svg width="53" height="54" viewBox="0 0 53 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>&#224;&#213;&#172;</title>
<desc>Created using Figma</desc>
<g id="Canvas" transform="translate(-6960 -4611)">
<g id="Ellipse 2">
<mask id="mask0_outline_ins">
<use xlink:href="#path0_fill" fill="white" transform="translate(6960 4611)"/>
</mask>
<g mask="url(#mask0_outline_ins)">
<use xlink:href="#path1_stroke_2x" transform="translate(6960 4611)" fill="#FFFFFF"/>
</g>
</g>
</g>
<defs>
<path id="path0_fill" d="M 53 27C 53 41.9117 41.1355 54 26.5 54C 11.8645 54 0 41.9117 0 27C 0 12.0883 11.8645 0 26.5 0C 41.1355 0 53 12.0883 53 27Z"/>
<path id="path1_stroke_2x" d="M 50 27C 50 40.3079 39.4261 51 26.5 51L 26.5 57C 42.845 57 56 43.5154 56 27L 50 27ZM 26.5 51C 13.5739 51 3 40.3079 3 27L -3 27C -3 43.5154 10.155 57 26.5 57L 26.5 51ZM 3 27C 3 13.6921 13.5739 3 26.5 3L 26.5 -3C 10.155 -3 -3 10.4846 -3 27L 3 27ZM 26.5 3C 39.4261 3 50 13.6921 50 27L 56 27C 56 10.4846 42.845 -3 26.5 -3L 26.5 3Z"/>
</defs>
</svg>

【问题讨论】:

  • 请提供相关代码示例,以便我们查看。
  • @MarioSantini 添加了代码示例
  • 您可以添加 svg 内容或链接吗?
  • @cameraman 添加了 svg 代码
  • 我之前使用过 SVG,它们在其他地方没有显示白色边框,只是因为我升级了 package.json 中的一堆项目

标签: javascript node.js reactjs webpack


【解决方案1】:

您使用的是&lt;img&gt; 标签,但没有为其提供实际来源,而是依赖于背景图片。浏览器会为你的图片渲染一个占位符,因为你没有给它一个实际的渲染资源,这就是奇怪的边框的来源。

设法在这里挑出来http://jsbin.com/difopib/

您应该在该图像上设置src 属性或使用不同的标签。 如果由于某种原因您对 &lt;img&gt; + 背景 svg 死心塌地,您可以将源设置为 1px 透明 gif,请参阅 https://css-tricks.com/snippets/html/base64-encode-of-1x1px-transparent-gif/

【讨论】:

  • 这是有道理的。我将imgs 更改为spans
【解决方案2】:

您的 img 标签没有来源。添加一个源(可能是透明png),边框就会消失。
你也可以设置一个空源:

 <img src=""/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多