Commit 2380ad62 by xuzhenghua

Merge branch 'master' of gitlab.julyedu.com:baiguangyao/mr-julyedu into xzhindex

parents 57494c3e 2e84c9c5
'use strict';
const fs = require('fs');
const path = require('path');
const webpack = require('webpack');
const resolve = require('resolve');
const PnpWebpackPlugin = require('pnp-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const InlineChunkHtmlPlugin = require('react-dev-utils/InlineChunkHtmlPlugin');
const TerserPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const safePostCssParser = require('postcss-safe-parser');
const ManifestPlugin = require('webpack-manifest-plugin');
const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');
const WorkboxWebpackPlugin = require('workbox-webpack-plugin');
const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin');
const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
const getCSSModuleLocalIdent = require('react-dev-utils/getCSSModuleLocalIdent');
const paths = require('./paths');
const getClientEnvironment = require('./env');
const ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin');
const ForkTsCheckerWebpackPlugin = require('react-dev-utils/ForkTsCheckerWebpackPlugin');
const typescriptFormatter = require('react-dev-utils/typescriptFormatter');
// Source maps are resource heavy and can cause out of memory issue for large source files.
const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false';
// Some apps do not need the benefits of saving a web request, so not inlining the chunk
// makes for a smoother build process.
const shouldInlineRuntimeChunk = process.env.INLINE_RUNTIME_CHUNK !== 'false';
// Check if TypeScript is setup
const useTypeScript = fs.existsSync(paths.appTsConfig);
const theme = require('../package.json').theme;
// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;
// This is the production and development configuration.
// It is focused on developer experience, fast rebuilds, and a minimal bundle.
module.exports = function(webpackEnv) {
const isEnvDevelopment = webpackEnv === 'development';
const isEnvProduction = webpackEnv === 'production';
// Webpack uses `publicPath` to determine where the app is being served from.
// It requires a trailing slash, or the file assets will get an incorrect path.
// In development, we always serve from the root. This makes config easier.
const publicPath = isEnvProduction
? paths.servedPath
: isEnvDevelopment && '/';
// Some apps do not use client-side routing with pushState.
// For these, "homepage" can be set to "." to enable relative asset paths.
const shouldUseRelativeAssetPaths = publicPath === './';
// `publicUrl` is just like `publicPath`, but we will provide it to our app
// as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript.
// Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
const publicUrl = isEnvProduction
? publicPath.slice(0, -1)
: isEnvDevelopment && '';
// Get environment variables to inject into our app.
const env = getClientEnvironment(publicUrl);
// common function to get style loaders
const getStyleLoaders = (cssOptions, preProcessor) => {
const loaders = [
isEnvDevelopment && require.resolve('style-loader'),
isEnvProduction && {
loader: MiniCssExtractPlugin.loader,
options: Object.assign(
{},
shouldUseRelativeAssetPaths ? { publicPath: '../../' } : undefined
),
},
{
loader: require.resolve('css-loader'),
options: cssOptions,
},
{
// Options for PostCSS as we reference these options twice
// Adds vendor prefixing based on your specified browser support in
// package.json
loader: require.resolve('postcss-loader'),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebook/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
require('postcss-preset-env')({
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
}),
],
sourceMap: isEnvProduction && shouldUseSourceMap,
},
},
].filter(Boolean);
if (preProcessor) {
loaders.push({
loader: require.resolve(preProcessor),
options: {
sourceMap: isEnvProduction && shouldUseSourceMap,
},
});
}
return loaders;
};
return {
mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development',
// Stop compilation early in production
bail: isEnvProduction,
devtool: isEnvProduction
? shouldUseSourceMap
? 'source-map'
: false
: isEnvDevelopment && 'cheap-module-source-map',
// These are the "entry points" to our application.
// This means they will be the "root" imports that are included in JS bundle.
entry: [
// Include an alternative client for WebpackDevServer. A client's job is to
// connect to WebpackDevServer by a socket and get notified about changes.
// When you save a file, the client will either apply hot updates (in case
// of CSS changes), or refresh the page (in case of JS changes). When you
// make a syntax error, this client will display a syntax error overlay.
// Note: instead of the default WebpackDevServer client, we use a custom one
// to bring better experience for Create React App users. You can replace
// the line below with these two lines if you prefer the stock client:
// require.resolve('webpack-dev-server/client') + '?/',
// require.resolve('webpack/hot/dev-server'),
isEnvDevelopment &&
require.resolve('react-dev-utils/webpackHotDevClient'),
// Finally, this is your app's code:
paths.appIndexJs,
// We include the app code last so that if there is a runtime error during
// initialization, it doesn't blow up the WebpackDevServer client, and
// changing JS code would still trigger a refresh.
].filter(Boolean),
output: {
// The build folder.
path: isEnvProduction ? paths.appBuild : undefined,
// Add /* filename */ comments to generated require()s in the output.
pathinfo: isEnvDevelopment,
// There will be one main bundle, and one file per asynchronous chunk.
// In development, it does not produce real files.
filename: isEnvProduction
? 'static/js/[name].[contenthash:8].js'
: isEnvDevelopment && 'static/js/bundle.js',
// There are also additional JS chunk files if you use code splitting.
chunkFilename: isEnvProduction
? 'static/js/[name].[contenthash:8].chunk.js'
: isEnvDevelopment && 'static/js/[name].chunk.js',
// We inferred the "public path" (such as / or /my-project) from homepage.
// We use "/" in development.
publicPath: publicPath,
// Point sourcemap entries to original disk location (format as URL on Windows)
devtoolModuleFilenameTemplate: isEnvProduction
? info =>
path
.relative(paths.appSrc, info.absoluteResourcePath)
.replace(/\\/g, '/')
: isEnvDevelopment &&
(info => path.resolve(info.absoluteResourcePath).replace(/\\/g, '/')),
},
optimization: {
minimize: isEnvProduction,
minimizer: [
// This is only used in production mode
new TerserPlugin({
terserOptions: {
parse: {
// we want terser to parse ecma 8 code. However, we don't want it
// to apply any minfication steps that turns valid ecma 5 code
// into invalid ecma 5 code. This is why the 'compress' and 'output'
// sections only apply transformations that are ecma 5 safe
// https://github.com/facebook/create-react-app/pull/4234
ecma: 8,
},
compress: {
ecma: 5,
warnings: false,
// Disabled because of an issue with Uglify breaking seemingly valid code:
// https://github.com/facebook/create-react-app/issues/2376
// Pending further investigation:
// https://github.com/mishoo/UglifyJS2/issues/2011
comparisons: false,
// Disabled because of an issue with Terser breaking valid code:
// https://github.com/facebook/create-react-app/issues/5250
// Pending futher investigation:
// https://github.com/terser-js/terser/issues/120
inline: 2,
},
mangle: {
safari10: true,
},
output: {
ecma: 5,
comments: false,
// Turned on because emoji and regex is not minified properly using default
// https://github.com/facebook/create-react-app/issues/2488
ascii_only: true,
},
},
// Use multi-process parallel running to improve the build speed
// Default number of concurrent runs: os.cpus().length - 1
parallel: true,
// Enable file caching
cache: true,
sourceMap: shouldUseSourceMap,
}),
// This is only used in production mode
new OptimizeCSSAssetsPlugin({
cssProcessorOptions: {
parser: safePostCssParser,
map: shouldUseSourceMap
? {
// `inline: false` forces the sourcemap to be output into a
// separate file
inline: false,
// `annotation: true` appends the sourceMappingURL to the end of
// the css file, helping the browser find the sourcemap
annotation: true,
}
: false,
},
}),
],
// Automatically split vendor and commons
// https://twitter.com/wSokra/status/969633336732905474
// https://medium.com/webpack/webpack-4-code-splitting-chunk-graph-and-the-splitchunks-optimization-be739a861366
splitChunks: {
chunks: 'all',
name: false,
},
// Keep the runtime chunk separated to enable long term caching
// https://twitter.com/wSokra/status/969679223278505985
runtimeChunk: true,
},
resolve: {
// This allows you to set a fallback for where Webpack should look for modules.
// We placed these paths second because we want `node_modules` to "win"
// if there are any conflicts. This matches Node resolution mechanism.
// https://github.com/facebook/create-react-app/issues/253
modules: ['node_modules'].concat(
// It is guaranteed to exist because we tweak it in `env.js`
process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
),
// These are the reasonable defaults supported by the Node ecosystem.
// We also include JSX as a common component filename extension to support
// some tools, although we do not recommend using it, see:
// https://github.com/facebook/create-react-app/issues/290
// `web` extension prefixes have been added for better support
// for React Native Web.
extensions: paths.moduleFileExtensions
.map(ext => `.${ext}`)
.filter(ext => useTypeScript || !ext.includes('ts')),
alias: {
// Support React Native Web
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
'react-native': 'react-native-web',
},
plugins: [
// Adds support for installing with Plug'n'Play, leading to faster installs and adding
// guards against forgotten dependencies and such.
PnpWebpackPlugin,
// Prevents users from importing files from outside of src/ (or node_modules/).
// This often causes confusion because we only process files within src/ with babel.
// To fix this, we prevent you from importing files out of src/ -- if you'd like to,
// please link the files into your node_modules/ and let module-resolution kick in.
// Make sure your source files are compiled, as they will not be processed in any way.
new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
],
},
resolveLoader: {
plugins: [
// Also related to Plug'n'Play, but this time it tells Webpack to load its loaders
// from the current package.
PnpWebpackPlugin.moduleLoader(module),
],
},
module: {
strictExportPresence: true,
rules: [
// Disable require.ensure as it's not a standard language feature.
{ parser: { requireEnsure: false } },
// First, run the linter.
// It's important to do this before Babel processes the JS.
{
test: /\.(js|mjs|jsx)$/,
enforce: 'pre',
use: [
{
options: {
formatter: require.resolve('react-dev-utils/eslintFormatter'),
eslintPath: require.resolve('eslint'),
},
loader: require.resolve('eslint-loader'),
},
],
include: paths.appSrc,
},
{
// "oneOf" will traverse all following loaders until one will
// match the requirements. When no loader matches it will fall
// back to the "file" loader at the end of the loader list.
oneOf: [
// "url" loader works like "file" loader except that it embeds assets
// smaller than specified limit in bytes as data URLs to avoid requests.
// A missing `test` is equivalent to a match.
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: require.resolve('url-loader'),
options: {
limit: 10000,
name: 'static/media/[name].[hash:8].[ext]',
},
},
// Process application JS with Babel.
// The preset includes JSX, Flow, TypeScript, and some ESnext features.
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
include: paths.appSrc,
loader: require.resolve('babel-loader'),
options: {
customize: require.resolve(
'babel-preset-react-app/webpack-overrides'
),
plugins: [
[
require.resolve('babel-plugin-named-asset-import'),
{
loaderMap: {
svg: {
ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
},
},
},
],
],
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
cacheCompression: isEnvProduction,
compact: isEnvProduction,
},
},
// Process any JS outside of the app with Babel.
// Unlike the application JS, we only compile the standard ES features.
{
test: /\.(js|mjs)$/,
exclude: /@babel(?:\/|\\{1,2})runtime/,
loader: require.resolve('babel-loader'),
options: {
babelrc: false,
configFile: false,
compact: false,
presets: [
[
require.resolve('babel-preset-react-app/dependencies'),
{ helpers: true },
],
],
cacheDirectory: true,
cacheCompression: isEnvProduction,
// If an error happens in a package, it's possible to be
// because it was compiled. Thus, we don't want the browser
// debugger to show the original code. Instead, the code
// being evaluated would be much more helpful.
sourceMaps: false,
},
},
// "postcss" loader applies autoprefixer to our CSS.
// "css" loader resolves paths in CSS and adds assets as dependencies.
// "style" loader turns CSS into JS modules that inject <style> tags.
// In production, we use MiniCSSExtractPlugin to extract that CSS
// to a file, but in development "style" loader enables hot editing
// of CSS.
// By default we support CSS Modules with the extension .module.css
{
test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
}),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
// Adds support for CSS Modules (https://github.com/css-modules/css-modules)
// using the extension .module.css
{
test: cssModuleRegex,
use: getStyleLoaders({
importLoaders: 1,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
}),
},
// Opt-in support for SASS (using .scss or .sass extensions).
// By default we support SASS Modules with the
// extensions .module.scss or .module.sass
{
test: sassRegex,
exclude: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: false
},
'sass-loader'
),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
// Adds support for CSS Modules, but using SASS
// using the extension .module.scss or .module.sass
{
test: sassModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
},
'sass-loader'
),
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
{ loader: 'less-loader', options: { modifyVars: theme } },
],
include: /node_modules/,
},
// "file" loader makes sure those assets get served by WebpackDevServer.
// When you `import` an asset, you get its (virtual) filename.
// In production, they would get copied to the `build` folder.
// This loader doesn't use a "test" so it will catch all modules
// that fall through the other loaders.
{
loader: require.resolve('file-loader'),
// Exclude `js` files to keep "css" loader working as it injects
// its runtime that would otherwise be processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.(js|mjs|jsx|ts|tsx)$/, /\.html$/, /\.json$/],
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
},
// ** STOP ** Are you adding a new loader?
// Make sure to add the new loader(s) before the "file" loader.
],
},
],
},
plugins: [
// Generates an `index.html` file with the <script> injected.
new HtmlWebpackPlugin(
Object.assign(
{},
{
inject: true,
template: paths.appHtml,
},
isEnvProduction
? {
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
}
: undefined
)
),
// Inlines the webpack runtime script. This script is too small to warrant
// a network request.
isEnvProduction &&
shouldInlineRuntimeChunk &&
new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime~.+[.]js/]),
// Makes some environment variables available in index.html.
// The public URL is available as %PUBLIC_URL% in index.html, e.g.:
// <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
// In production, it will be an empty string unless you specify "homepage"
// in `package.json`, in which case it will be the pathname of that URL.
// In development, this will be an empty string.
new InterpolateHtmlPlugin(HtmlWebpackPlugin, env.raw),
// This gives some necessary context to module not found errors, such as
// the requesting resource.
new ModuleNotFoundPlugin(paths.appPath),
// Makes some environment variables available to the JS code, for example:
// if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`.
// It is absolutely essential that NODE_ENV is set to production
// during a production build.
// Otherwise React will be compiled in the very slow development mode.
new webpack.DefinePlugin(env.stringified),
// This is necessary to emit hot updates (currently CSS only):
isEnvDevelopment && new webpack.HotModuleReplacementPlugin(),
// Watcher doesn't work well if you mistype casing in a path so we use
// a plugin that prints an error when you attempt to do this.
// See https://github.com/facebook/create-react-app/issues/240
isEnvDevelopment && new CaseSensitivePathsPlugin(),
// If you require a missing module and then `npm install` it, you still have
// to restart the development server for Webpack to discover it. This plugin
// makes the discovery automatic so you don't have to restart.
// See https://github.com/facebook/create-react-app/issues/186
isEnvDevelopment &&
new WatchMissingNodeModulesPlugin(paths.appNodeModules),
isEnvProduction &&
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: 'static/css/[name].[contenthash:8].css',
chunkFilename: 'static/css/[name].[contenthash:8].chunk.css',
}),
// Generate a manifest file which contains a mapping of all asset filenames
// to their corresponding output file so that tools can pick it up without
// having to parse `index.html`.
new ManifestPlugin({
fileName: 'asset-manifest.json',
publicPath: publicPath,
}),
// Moment.js is an extremely popular library that bundles large locale files
// by default due to how Webpack interprets its code. This is a practical
// solution that requires the user to opt into importing specific locales.
// https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
// You can remove this if you don't use Moment.js:
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
// Generate a service worker script that will precache, and keep up to date,
// the HTML & assets that are part of the Webpack build.
isEnvProduction &&
new WorkboxWebpackPlugin.GenerateSW({
clientsClaim: true,
exclude: [/\.map$/, /asset-manifest\.json$/],
importWorkboxFrom: 'cdn',
navigateFallback: publicUrl + '/index.html',
navigateFallbackBlacklist: [
// Exclude URLs starting with /_, as they're likely an API call
new RegExp('^/_'),
// Exclude URLs containing a dot, as they're likely a resource in
// public/ and not a SPA route
new RegExp('/[^/]+\\.[^/]+$'),
],
}),
// TypeScript type checking
useTypeScript &&
new ForkTsCheckerWebpackPlugin({
typescript: resolve.sync('typescript', {
basedir: paths.appNodeModules,
}),
async: isEnvDevelopment,
useTypescriptIncrementalApi: true,
checkSyntacticErrors: true,
tsconfig: paths.appTsConfig,
reportFiles: [
'**',
'!**/*.json',
'!**/__tests__/**',
'!**/?(*.)(spec|test).*',
'!**/src/setupProxy.*',
'!**/src/setupTests.*',
],
watch: paths.appSrc,
silent: true,
// The formatter is invoked directly in WebpackDevServerUtils during development
formatter: isEnvProduction ? typescriptFormatter : undefined,
}),
].filter(Boolean),
// Some libraries import Node modules but don't use them in the browser.
// Tell Webpack to provide empty mocks for them so importing them works.
node: {
module: 'empty',
dgram: 'empty',
dns: 'mock',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty',
},
// Turn off performance processing because we utilize
// our own hints via the FileSizeReporter
performance: false,
};
};
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={icoName + ' ' + styles.ico} />
<span className={styles.text}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={"icoName ico"} />
<span className={styles.text}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { Link } from 'react-router'
import styles from './index.scss'
export default class NavLink extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<Link
{...rest}
to={pathUrl}
activeClassName={active}
className={styles.root}
>
<i className={icoName + ' ' + styles.ico} />
<span className={styles.text}>{linkName}</span>
</Link>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
// className={"root"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
.root-item {
flex: auto;
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: center;
align-items: center;
line-height: 1;
color: #666;
&:hover {
color: #0099ff;
}
}
.ico {
font-size: 0.42rem;
display: block;
margin-bottom: 0.1rem;
}
.text {
display: block;
line-height: 1;
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root-item "}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root-item"}
>
<i className={"icoName ico"} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import './index.scss'
export default class NavLinks extends Component {
render() {
const { pathUrl, active, icoName, linkName, ...rest } = this.props;
return (
<NavLink
{...rest}
to={pathUrl}
activeClassName={active}
className={"root-item"}
>
<i className={icoName} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className={styles.root}>
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={styles.navOne}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={styles.navTwo}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={styles.navThree}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={styles.navFour}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className={styles.root}>
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={styles.navOne}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={styles.navTwo}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={styles.navThree}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={styles.navFour}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
.root {
height: 50px;
position: fixed;
z-index: 50;
bottom: 0;
left: 0;
width: 100%;
display: flex;
border-top: 1px solid #ccc;
}
.navOne, .navTwo, .navThree, .navFour, .navFive {
color: #09f;
&:hover, &:active {
color: #09f;
}
}
\ No newline at end of file
.root {
height: 50px;
position: fixed;
z-index: 50;
bottom: 0;
left: 0;
width: 100%;
display: flex;
border-top: 1px solid #ccc;
}
.navOne, .navTwo, .navThree, .navFour, .navFive {
color: #09f;
&:hover, &:active {
color: #09f;
}
}
.iconfont{
font-size: 24px;
margin-bottom: 4px;
}
\ No newline at end of file
.root {
height: 50px;
position: fixed;
z-index: 50;
bottom: 0;
left: 0;
width: 100%;
display: flex;
border-top: 1px solid #ccc;
}
.navOne, .navTwo, .navThree, .navFour, .navFive {
color: #09f;
&:hover, &:active {
color: #09f;
}
}
.iconfont{
font-size: 24px !important;
margin-bottom: 4px;
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className={styles.root}>
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
export default class Nav extends Component {
render() {
return (
<div className="root">
<div style={{ height: '50px' }}></div>
<div className={styles.root}>
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
.root {
height: 50px;
position: fixed;
z-index: 50;
bottom: 0;
left: 0;
width: 100%;
display: flex;
border-top: 1px solid #ccc;
flex: auto;
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: center;
align-items: center;
line-height: 1;
color: #666;
&:hover {
color: #0099ff;
}
}
.navOne, .navTwo, .navThree, .navFour, .navFive {
color: #09f;
&:hover, &:active {
color: #09f;
}
}
.iconfont{
font-size: 24px !important;
margin-bottom: 4px;
}
\ No newline at end of file
.root {
height: 50px;
position: fixed;
z-index: 50;
bottom: 0;
left: 0;
width: 100%;
display: flex;
border-top: 1px solid #ccc;
}
.navOne, .navTwo, .navThree, .navFour, .navFive {
color: #09f;
&:hover, &:active {
color: #09f;
}
}
.iconfont{
font-size: 24px !important;
margin-bottom: 4px;
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="iconfont iconiconfront-16"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="iconfont iconiconfront-16"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="iconfont iconxuexi"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React, { Component } from 'react';
import NavLink from './NavLink';
import './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="iconfont iconiconfront-16"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="iconfont iconxuexi"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="iconfont iconhome"
active={"navFour"}
linkName="我的"
/>
</div>
</div>
)
}
}
\ No newline at end of file
import React from 'react';
import ReactDOM from 'react-dom';
import Router from './router';
// import { Provider } from 'react-redux';
import './styles/index.scss';
ReactDOM.render(
<Router />,
document.getElementById('root'));
\ No newline at end of file
import React from 'react';
import ReactDOM from 'react-dom';
import Router from './router';
// import { Provider } from 'react-redux';
// 默认样式
import './styles/index.scss';
// iconfont
import './font/iconfont.css';
ReactDOM.render(
<Router />,
document.getElementById('root'));
\ No newline at end of file
// 使用建议
// --------------------------------------------------
// CSS Modules 是对现有的 CSS 做减法。为了追求简单可控,建议遵循如下原则:
// ·不使用选择器(id,伪类,标签等),只使用class名来定义样式
// ·不层叠多个class,只使用一个class把所有样式定义好
// ·所有样式通过 composes 组合来实现复用
// ·不嵌套
// --------------------------------------------------
// 公有样式引入mixins的目的是为了方便默认设置若干常用的样式
// 公有样式不可以使用composes
@import "./variable.scss";
// 颜色设置
$border-color: #e9e9e9; //边框颜色
$body-color: #333; //设置通用的字体颜色
$body-bg: #f2f2f2; //设置通用的 body 背景色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
$main-color: #1BBC9B; //主体颜色
// 字体
$font-family-zh: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
$font-family-en: Arial, sans-serif !default;
// 盒子模型
$box-model: border-box !default;
// z-index
$z-50: 50;
$z-100: 100;
$z-150: 150;
$z-200: 200;
$z-250: 250;
$z-max: 999999; //为了应付某些插件z-index 值过高的问题
// 全局设置
// --------------------------------------------------
//
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
border: 0 none;
font-size: inherit;
color: inherit;
margin: 0;
padding: 0;
vertical-align: baseline;
/* 在X5新内核Blink中,在排版页面的时候,会主动对字体进行放大,会检测页面中的主字体,当某一块字体在我们的判定规则中,认为字号较小,并且是页面中的主要字体,就会采取主动放大的操作。然而这不是我们想要的,可以采取给最大高度解决 */
max-height: 100000px;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
}
em, strong {
font-style: normal;
}
ul, ol, li {
list-style: none;
}
// 全局盒子模型设置
* {
box-sizing: $box-model;
}
*:before,
*:after {
box-sizing: $box-model;
}
// -webkit-tap-highlight-color 是一个 不规范的属性,它没有出现在 CSS 规范草案中。
// 当用户点击iOS的Safari浏览器中的链接或JavaScript的可点击的元素时,覆盖显示的高亮颜色。
html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: $font-family-zh;
line-height: 1.5;
color: $body-color;
background-color: $body-bg;
font-size: 0.24rem;
}
// Links
a {
text-decoration: none;
outline: none;
&:hover,
&:link,
&:focus {
text-decoration: none;
}
&:visited {
}
}
// 暂时放置样式,后期需处理
.homeImg {
display: block;
width: 100%;
}
// 字体颜色
.main-color {
color: $main-color;
}
.color333 {
color: #333
}
.color666 {
color: #666
}
.color999 {
color: #999
}
// 背景颜色
.bg-white { background-color: #fff }
// 间隔
.pt20 {
padding-top: 20px;
}
.pt30 {
padding-top: 30px;
}
.pt40 {
padding-top: 40px;
}
.pt50 {
padding-top: 50px;
}
.pt60 {
padding-top: 60px;
}
.plr20 {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
// 请保证你的设计稿为750px宽,如果有其余字体大小,请在私有样式中设置
.font-20 {font-size: 0.2rem;}
.font-24 {font-size: 0.24rem;}
.font-26 {font-size: 0.26rem;}
.font-28 {font-size: 0.28rem;}
.font-30 {font-size: 0.3rem;}
.font-32 {font-size: 0.32rem;}
.font-34 {font-size: 0.34rem;}
.font-36 {font-size: 0.36rem;}
.font-38 {font-size: 0.38rem;}
.font-40 {font-size: 0.4rem;}
// 设置block
.block {
display: block;
}
.show {
display: inherit;
}
.hide {
display: none;
}
// 最外层页面设置
.box {
max-width: 10rem;
margin-left: auto;
margin-right: auto;
}
// 半透明弹层
.alert-bg {
position: fixed;
z-index: $z-50;
width: 100%;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, .6);
display: none; //注意:默认隐藏!!
}
.alpha-bg {
position: fixed;
z-index: 100;
background: rgba(0, 0, 0, .7);
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.fixed-bottom {
position: fixed;
z-index: 99;
bottom: 0;
width: 100%;
}
// 布局相关
// 水平
.hor {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
// 水平居中
.hor-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
}
// 垂直居中
.ver-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
}
// 子元素内联垂直居中
.center-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 子元素块联水平垂直居中
.center-center-column {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 两边对齐
.space-between {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
// last-no-border
.last-no-border:last-child {
border: none;
background: none;
}
// 图片设置
img {
max-width: 100%;
}
.img-responsive {
display: block;
width: 100%;
}
// 这里主要应付 antd-mobile 的组件carousel 不能等比缩放的蛋疼问题
.home-swipe {
height: 40.625vw;
max-height: 406.25px;
}
// 文本控制类
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
// 字符溢出隐藏
.text-overflow-1 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
// 字符超出一行溢出隐藏
.text-overflow-one {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
// 字符超出两行溢出隐藏
.text-overflow-2 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
// 字符超出三行溢出隐藏
.text-overflow-3 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
// 浮动控制
.cf {
&:before,
&:after {
content: '';
display: table;
}
&:after {
clear: both;
}
}
.fl {
float: left;
}
.fr {
float: right;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.z-50 {
z-index: 50;
}
.z-100 {
z-index: 100;
}
.z-150 {
z-index: 150;
}
.z-200 {
z-index: 200;
}
.z-250 {
z-index: 250;
}
.z-max {
z-index: 999999;
}
.overflow-h {
overflow: hidden;
}
// 元素绝对定位的垂直水平居中
.absolute-center {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
// radio 样式重写
input[type="radio"] {
position: relative;
vertical-align: middle;
width: 0.36rem;
height: 0.36rem;
-webkit-appearance: none !important;
-moz-appearance: none;
border: none;
background: none;
outline: none;
}
input[type="radio"]:before {
position: absolute;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
z-index: 100;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:after {
position: absolute;
z-index: 50;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:before {
position: absolute;
z-index: 100;
content: '';
display: block;
width: 0.18rem;
height: 0.18rem;
left: 0.09rem;
top: 0.09rem;
background: #1abc9c;
border-radius: 50%;
border: none;
}
\ No newline at end of file
// 使用建议
// --------------------------------------------------
// CSS Modules 是对现有的 CSS 做减法。为了追求简单可控,建议遵循如下原则:
// ·不使用选择器(id,伪类,标签等),只使用class名来定义样式
// ·不层叠多个class,只使用一个class把所有样式定义好
// ·所有样式通过 composes 组合来实现复用
// ·不嵌套
// --------------------------------------------------
// 公有样式引入mixins的目的是为了方便默认设置若干常用的样式
// 公有样式不可以使用composes
@import "./variable.scss";
// 颜色设置
$border-color: #e9e9e9; //边框颜色
$body-color: #333; //设置通用的字体颜色
$body-bg: #f2f2f2; //设置通用的 body 背景色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
// 字体
$font-family-zh: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
$font-family-en: Arial, sans-serif !default;
// 盒子模型
$box-model: border-box !default;
// z-index
$z-50: 50;
$z-100: 100;
$z-150: 150;
$z-200: 200;
$z-250: 250;
$z-max: 999999; //为了应付某些插件z-index 值过高的问题
// 全局设置
// --------------------------------------------------
//
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
border: 0 none;
font-size: inherit;
color: inherit;
margin: 0;
padding: 0;
vertical-align: baseline;
/* 在X5新内核Blink中,在排版页面的时候,会主动对字体进行放大,会检测页面中的主字体,当某一块字体在我们的判定规则中,认为字号较小,并且是页面中的主要字体,就会采取主动放大的操作。然而这不是我们想要的,可以采取给最大高度解决 */
max-height: 100000px;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
}
em, strong {
font-style: normal;
}
ul, ol, li {
list-style: none;
}
// 全局盒子模型设置
* {
box-sizing: $box-model;
}
*:before,
*:after {
box-sizing: $box-model;
}
// -webkit-tap-highlight-color 是一个 不规范的属性,它没有出现在 CSS 规范草案中。
// 当用户点击iOS的Safari浏览器中的链接或JavaScript的可点击的元素时,覆盖显示的高亮颜色。
html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: $font-family-zh;
line-height: 1.5;
color: $body-color;
background-color: $body-bg;
font-size: 0.24rem;
}
// Links
a {
text-decoration: none;
outline: none;
&:hover,
&:link,
&:focus {
text-decoration: none;
}
&:visited {
}
}
// 暂时放置样式,后期需处理
.homeImg {
display: block;
width: 100%;
}
// 字体颜色
.main-color {
color: $main-color;
}
.color333 {
color: #333
}
.color666 {
color: #666
}
.color999 {
color: #999
}
// 背景颜色
.bg-white { background-color: #fff }
// 间隔
.pt20 {
padding-top: 20px;
}
.pt30 {
padding-top: 30px;
}
.pt40 {
padding-top: 40px;
}
.pt50 {
padding-top: 50px;
}
.pt60 {
padding-top: 60px;
}
.plr20 {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
// 请保证你的设计稿为750px宽,如果有其余字体大小,请在私有样式中设置
.font-20 {font-size: 0.2rem;}
.font-24 {font-size: 0.24rem;}
.font-26 {font-size: 0.26rem;}
.font-28 {font-size: 0.28rem;}
.font-30 {font-size: 0.3rem;}
.font-32 {font-size: 0.32rem;}
.font-34 {font-size: 0.34rem;}
.font-36 {font-size: 0.36rem;}
.font-38 {font-size: 0.38rem;}
.font-40 {font-size: 0.4rem;}
// 设置block
.block {
display: block;
}
.show {
display: inherit;
}
.hide {
display: none;
}
// 最外层页面设置
.box {
max-width: 10rem;
margin-left: auto;
margin-right: auto;
}
// 半透明弹层
.alert-bg {
position: fixed;
z-index: $z-50;
width: 100%;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, .6);
display: none; //注意:默认隐藏!!
}
.alpha-bg {
position: fixed;
z-index: 100;
background: rgba(0, 0, 0, .7);
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.fixed-bottom {
position: fixed;
z-index: 99;
bottom: 0;
width: 100%;
}
// 布局相关
// 水平
.hor {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
// 水平居中
.hor-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
}
// 垂直居中
.ver-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
}
// 子元素内联垂直居中
.center-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 子元素块联水平垂直居中
.center-center-column {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 两边对齐
.space-between {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
// last-no-border
.last-no-border:last-child {
border: none;
background: none;
}
// 图片设置
img {
max-width: 100%;
}
.img-responsive {
display: block;
width: 100%;
}
// 这里主要应付 antd-mobile 的组件carousel 不能等比缩放的蛋疼问题
.home-swipe {
height: 40.625vw;
max-height: 406.25px;
}
// 文本控制类
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
// 字符溢出隐藏
.text-overflow-1 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
// 字符超出一行溢出隐藏
.text-overflow-one {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
// 字符超出两行溢出隐藏
.text-overflow-2 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
// 字符超出三行溢出隐藏
.text-overflow-3 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
// 浮动控制
.cf {
&:before,
&:after {
content: '';
display: table;
}
&:after {
clear: both;
}
}
.fl {
float: left;
}
.fr {
float: right;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.z-50 {
z-index: 50;
}
.z-100 {
z-index: 100;
}
.z-150 {
z-index: 150;
}
.z-200 {
z-index: 200;
}
.z-250 {
z-index: 250;
}
.z-max {
z-index: 999999;
}
.overflow-h {
overflow: hidden;
}
// 元素绝对定位的垂直水平居中
.absolute-center {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
// radio 样式重写
input[type="radio"] {
position: relative;
vertical-align: middle;
width: 0.36rem;
height: 0.36rem;
-webkit-appearance: none !important;
-moz-appearance: none;
border: none;
background: none;
outline: none;
}
input[type="radio"]:before {
position: absolute;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
z-index: 100;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:after {
position: absolute;
z-index: 50;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:before {
position: absolute;
z-index: 100;
content: '';
display: block;
width: 0.18rem;
height: 0.18rem;
left: 0.09rem;
top: 0.09rem;
background: #1abc9c;
border-radius: 50%;
border: none;
}
\ No newline at end of file
// 使用建议
// --------------------------------------------------
// CSS Modules 是对现有的 CSS 做减法。为了追求简单可控,建议遵循如下原则:
// ·不使用选择器(id,伪类,标签等),只使用class名来定义样式
// ·不层叠多个class,只使用一个class把所有样式定义好
// ·所有样式通过 composes 组合来实现复用
// ·不嵌套
// --------------------------------------------------
// 公有样式引入mixins的目的是为了方便默认设置若干常用的样式
// 公有样式不可以使用composes
@import "./variable.scss";
// 颜色设置
$border-color: #e9e9e9; //边框颜色
$body-color: #333; //设置通用的字体颜色
$body-bg: #f2f2f2; //设置通用的 body 背景色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
$main-color: #09f; //主体颜色
// 字体
$font-family-zh: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
$font-family-en: Arial, sans-serif !default;
// 盒子模型
$box-model: border-box !default;
// z-index
$z-50: 50;
$z-100: 100;
$z-150: 150;
$z-200: 200;
$z-250: 250;
$z-max: 999999; //为了应付某些插件z-index 值过高的问题
// 全局设置
// --------------------------------------------------
//
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
border: 0 none;
font-size: inherit;
color: inherit;
margin: 0;
padding: 0;
vertical-align: baseline;
/* 在X5新内核Blink中,在排版页面的时候,会主动对字体进行放大,会检测页面中的主字体,当某一块字体在我们的判定规则中,认为字号较小,并且是页面中的主要字体,就会采取主动放大的操作。然而这不是我们想要的,可以采取给最大高度解决 */
max-height: 100000px;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
}
em, strong {
font-style: normal;
}
ul, ol, li {
list-style: none;
}
// 全局盒子模型设置
* {
box-sizing: $box-model;
}
*:before,
*:after {
box-sizing: $box-model;
}
// -webkit-tap-highlight-color 是一个 不规范的属性,它没有出现在 CSS 规范草案中。
// 当用户点击iOS的Safari浏览器中的链接或JavaScript的可点击的元素时,覆盖显示的高亮颜色。
html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: $font-family-zh;
line-height: 1.5;
color: $body-color;
background-color: $body-bg;
font-size: 0.24rem;
}
// Links
a {
text-decoration: none;
outline: none;
&:hover,
&:link,
&:focus {
text-decoration: none;
}
&:visited {
}
}
// 暂时放置样式,后期需处理
.homeImg {
display: block;
width: 100%;
}
// 字体颜色
.main-color {
color: $main-color;
}
.color333 {
color: #333
}
.color666 {
color: #666
}
.color999 {
color: #999
}
// 背景颜色
.bg-white { background-color: #fff }
// 间隔
.pt20 {
padding-top: 20px;
}
.pt30 {
padding-top: 30px;
}
.pt40 {
padding-top: 40px;
}
.pt50 {
padding-top: 50px;
}
.pt60 {
padding-top: 60px;
}
.plr20 {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
// 请保证你的设计稿为750px宽,如果有其余字体大小,请在私有样式中设置
.font-20 {font-size: 0.2rem;}
.font-24 {font-size: 0.24rem;}
.font-26 {font-size: 0.26rem;}
.font-28 {font-size: 0.28rem;}
.font-30 {font-size: 0.3rem;}
.font-32 {font-size: 0.32rem;}
.font-34 {font-size: 0.34rem;}
.font-36 {font-size: 0.36rem;}
.font-38 {font-size: 0.38rem;}
.font-40 {font-size: 0.4rem;}
// 设置block
.block {
display: block;
}
.show {
display: inherit;
}
.hide {
display: none;
}
// 最外层页面设置
.box {
max-width: 10rem;
margin-left: auto;
margin-right: auto;
}
// 半透明弹层
.alert-bg {
position: fixed;
z-index: $z-50;
width: 100%;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, .6);
display: none; //注意:默认隐藏!!
}
.alpha-bg {
position: fixed;
z-index: 100;
background: rgba(0, 0, 0, .7);
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.fixed-bottom {
position: fixed;
z-index: 99;
bottom: 0;
width: 100%;
}
// 布局相关
// 水平
.hor {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
// 水平居中
.hor-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
}
// 垂直居中
.ver-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
}
// 子元素内联垂直居中
.center-center {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 子元素块联水平垂直居中
.center-center-column {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
}
// 两边对齐
.space-between {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
// last-no-border
.last-no-border:last-child {
border: none;
background: none;
}
// 图片设置
img {
max-width: 100%;
}
.img-responsive {
display: block;
width: 100%;
}
// 这里主要应付 antd-mobile 的组件carousel 不能等比缩放的蛋疼问题
.home-swipe {
height: 40.625vw;
max-height: 406.25px;
}
// 文本控制类
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
// 字符溢出隐藏
.text-overflow-1 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
// 字符超出一行溢出隐藏
.text-overflow-one {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
// 字符超出两行溢出隐藏
.text-overflow-2 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
// 字符超出三行溢出隐藏
.text-overflow-3 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
// 浮动控制
.cf {
&:before,
&:after {
content: '';
display: table;
}
&:after {
clear: both;
}
}
.fl {
float: left;
}
.fr {
float: right;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.z-50 {
z-index: 50;
}
.z-100 {
z-index: 100;
}
.z-150 {
z-index: 150;
}
.z-200 {
z-index: 200;
}
.z-250 {
z-index: 250;
}
.z-max {
z-index: 999999;
}
.overflow-h {
overflow: hidden;
}
// 元素绝对定位的垂直水平居中
.absolute-center {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
// radio 样式重写
input[type="radio"] {
position: relative;
vertical-align: middle;
width: 0.36rem;
height: 0.36rem;
-webkit-appearance: none !important;
-moz-appearance: none;
border: none;
background: none;
outline: none;
}
input[type="radio"]:before {
position: absolute;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
z-index: 100;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:after {
position: absolute;
z-index: 50;
content: '';
display: block;
width: 0.36rem;
height: 0.36rem;
border: 2px solid #999;
background: #fff;
left: 0;
top: 0;
border-radius: 50%;
outline: 0;
}
input[type="radio"]:checked:before {
position: absolute;
z-index: 100;
content: '';
display: block;
width: 0.18rem;
height: 0.18rem;
left: 0.09rem;
top: 0.09rem;
background: #1abc9c;
border-radius: 50%;
border: none;
}
\ No newline at end of file
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$active: #09f;
$color_333: #333;
$color_666: #666;
$color_999: #999;
$color_0b0050: #0b0050;
$color_290: #29058c;
$color_470bc8: #470bc8;
$color_ff4f40: #ff4f40;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
\ No newline at end of file
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$active: #09f;
$color_333: #333;
$color_666: #666;
$color_999: #999;
$color_0b0050: #0b0050;
$color_290: #29058c;
$color_470bc8: #470bc8;
$color_ff4f40: #ff4f40;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_f4f4f4: #f4f4f4;
$bg_ffda09: #ffda09;
$bg_0b0050: #0b0050;
$bg_fadc7f: #fadc7f;
$bg_f7f4ff: #f7f4ff;
$bg_29058c: #29058c;
$bg_0f0070: #0f0070;
$bg_fefdfb: #fefdfb;
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$color_active: #09f;
$color_333: #333;
$color_666: #666;
$color_999: #999;
$color_0b0050: #0b0050;
$color_290: #29058c;
$color_470bc8: #470bc8;
$color_ff4f40: #ff4f40;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_f4f4f4: #f4f4f4;
$bg_ffda09: #ffda09;
$bg_0b0050: #0b0050;
$bg_fadc7f: #fadc7f;
$bg_f7f4ff: #f7f4ff;
$bg_29058c: #29058c;
$bg_0f0070: #0f0070;
$bg_fefdfb: #fefdfb;
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$color_333: #333;
$color_666: #666;
$color_999: #999;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_f4f4f4: #f4f4f4;
$bg_ffda09: #ffda09;
$bg_0b0050: #0b0050;
$bg_fadc7f: #fadc7f;
$bg_f7f4ff: #f7f4ff;
$bg_29058c: #29058c;
$bg_0f0070: #0f0070;
$bg_fefdfb: #fefdfb;
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$color_333: #333;
$color_666: #666;
$color_999: #999;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_active: #09f;
$bg_f4f4f4: #f4f4f4;
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$color_333: #333;
$color_666: #666;
$color_999: #999;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_active: #09f;
$bg_f4f4f4: #f4f4f4;
$body-bg: #f2f2f2; //设置通用的 body 背景色
/*
* @ 文字颜色
*/
$border-color: #e9e9e9; //边框颜色
$body-color: #333; //设置通用的字体颜色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
/*
* @ 边框颜色
*/
/*
* @ 文字颜色
*/
......@@ -423,7 +423,7 @@ module.exports = function(webpackEnv) {
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true
modules: false
},
'sass-loader'
),
......
import React, { Component } from 'react'
import { NavLink } from 'react-router-dom';
import styles from './index.scss'
import './index.scss'
export default class NavLinks extends Component {
render() {
......@@ -10,10 +10,10 @@ export default class NavLinks extends Component {
{...rest}
to={pathUrl}
activeClassName={active}
className={styles.root}
className={"root-item"}
>
<i className={icoName + ' ' + styles.ico} />
<span className={styles.text}>{linkName}</span>
<i className={icoName} />
<span className={"text"}>{linkName}</span>
</NavLink>
)
}
......
.root {
.root-item {
flex: auto;
display: flex;
flex-direction: column;
......
import React, { Component } from 'react';
import NavLink from './NavLink';
import styles from './index.scss';
import './index.scss';
export default class Nav extends Component {
render() {
return (
<div>
<div style={{ height: '50px' }}></div>
<div className={styles.root}>
<div className="root">
<NavLink
pathUrl="/"
exact
icoName={"i-zhuye42un"}
active={styles.navOne}
icoName={"iconfont iconshouye"}
active={"navOne"}
linkName="首页"
/>
<NavLink
pathUrl="/classify"
icoName="i-haodian42un"
active={styles.navTwo}
icoName="iconfont iconiconfront-16"
active={"navTwo"}
linkName="分类"
/>
<NavLink
pathUrl="/study"
icoName="i-youhui42un"
active={styles.navThree}
icoName="iconfont iconxuexi"
active={"navThree"}
linkName="学习"
/>
<NavLink
pathUrl="/my"
icoName="i-zhoubian42un"
active={styles.navFour}
icoName="iconfont iconhome"
active={"navFour"}
linkName="我的"
/>
</div>
......
......@@ -15,22 +15,8 @@
color: #09f;
}
}
.navOne i:before {
content: "\e93d";
}
.navTwo i:before {
content: "\e917";
}
.navThree i:before {
content: "\e936";
}
.navFour i:before {
content: "\e939";
}
.navFive i:before {
content: "\e913";
.iconfont{
font-size: 24px !important;
margin-bottom: 4px;
}
\ No newline at end of file
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1555470207785'); /* IE9 */
src: url('iconfont.eot?t=1555470207785#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1555470207785') format('woff'),
url('iconfont.ttf?t=1555470207785') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1555470207785#iconfont') format('svg'); /* iOS 4.1- */
src: url('iconfont.eot?t=1555554882037'); /* IE9 */
src: url('iconfont.eot?t=1555554882037#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1555554882037') format('woff'),
url('iconfont.ttf?t=1555554882037') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1555554882037#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
......@@ -27,10 +27,22 @@
content: "\e65f";
}
.iconxuexi:before {
content: "\e666";
}
.iconshouye:before {
content: "\e665";
}
.iconzhifubaox-:before {
content: "\e650";
}
.iconhome:before {
content: "\e600";
}
.iconhuabei:before {
content: "\e78c";
}
......@@ -43,6 +55,10 @@
content: "\e63c";
}
.iconfenlei:before {
content: "\e695";
}
.iconzhong:before {
content: "\e603";
}
......@@ -407,7 +423,7 @@
content: "\e664";
}
.icondanseshixintubiao-12:before {
.iconuser:before {
content: "\e643";
}
......
No preview for this file type
......@@ -29,9 +29,18 @@ Created by iconfont
<glyph glyph-name="erji" unicode="&#58975;" d="M908.2 412.1h-54.6C832.2 594.1 686.4 736 512 736c-174.1 0-320.2-142-341.6-323.9h-54.6C52 412.1 0 357 0 289.3v-134.4C0 87.1 52 32 115.8 32h83.8c8.5 0 16.6 3.4 22.6 9.4s9.4 14.2 9.4 22.6V208.8v0.9 161C234.2 536.9 359.9 672 512 672c152.7 0 278.4-135.7 280.3-302.5V64c0-17.7 14.3-32 32-32h83.8c63.9 0 115.8 55.1 115.8 122.8V289.3c0.1 67.7-51.9 122.8-115.7 122.8zM115.8 96C87.3 96 64 122.4 64 154.8V289.3c0 32.4 23.3 58.8 51.8 58.8h51.8v-252h-51.8v-0.1zM960 154.8c0-32.4-23.3-58.8-51.8-58.8h-51.8V348h51.8c28.6 0 51.8-26.4 51.8-58.8v-134.4z" horiz-adv-x="1024" />
<glyph glyph-name="xuexi" unicode="&#58982;" d="M768.28 762.62h-513c-52.77 0-95.71-40.87-95.71-91.11v-416.88c-0.07-0.74-0.11-1.49-0.11-2.26v-85c-0.13-2.31-0.2-4.63-0.2-7v-62.27a24.45 24.45 0 0 1 0.2-3.09v-18.88A121.06 121.06 0 0 1 280.34-44.7h559.45a24.19 24.19 0 0 1 0 48.38H280.34a72.64 72.64 0 0 0-72.55 72.56v65.04c0.07 0.74 0.11 1.49 0.11 2.26V167.1a70.43 70.43 0 0 0 21.2 44.42c14.25 13.86 33.81 21.48 55.07 21.48h458.9A121.06 121.06 0 0 1 864 354V671.51c0 50.23-42.93 91.11-95.71 91.11z m47.34-232.51V354a72.64 72.64 0 0 0-72.55-72.56H284.18c-28.19 0-54.71-8.63-76.27-24.57V671.51c0 23.57 21.24 42.74 47.34 42.74h513c26.1 0 47.34-19.17 47.34-42.74z m0 0M864.79 121.77a24.19 24.19 0 0 0-24.19-24.19h-532a24.19 24.19 0 0 0 0 48.38h532a24.19 24.19 0 0 0 24.19-24.19z m0 0" horiz-adv-x="1024" />
<glyph glyph-name="shouye" unicode="&#58981;" d="M362.666667 0.085333V256.149333c0 36.266667 33.109333 63.850667 72.533333 63.850667h153.6c39.253333 0 72.533333-27.648 72.533333-63.850667v-256.064h59.904c61.269333 0 110.762667 47.957333 110.762667 106.730667V481.834667L557.162667 756.672a63.808 63.808 0 0 1-90.325334 0L192 481.834667v-375.018667c0-58.88 49.386667-106.730667 110.762667-106.730667H362.666667z m42.666666 0h213.333334V256.149333c0 10.709333-12.586667 21.184-29.866667 21.184h-153.6c-17.408 0-29.866667-10.389333-29.866667-21.184v-256.064z m469.333334 439.082667v-332.352c0-82.645333-68.885333-149.397333-153.429334-149.397333H302.762667C218.133333-42.581333 149.333333 24.064 149.333333 106.816V439.168l-27.584-27.584a21.333333 21.333333 0 1 0-30.165333 30.165333L436.672 786.837333a106.474667 106.474667 0 0 0 150.656 0l345.088-345.088a21.333333 21.333333 0 0 0-30.165333-30.165333L874.666667 439.168z" horiz-adv-x="1024" />
<glyph glyph-name="zhifubaox-" unicode="&#58960;" d="M512 384m-512 0a512 512 0 1 1 1024 0 512 512 0 1 1-1024 0ZM826.6752 125.1328M293.0688 153.088c-128.6144 0-168.6528 101.5808-104.3456 155.8528a142.0288 142.0288 0 0 0 81.92 31.5392c76.4928 6.9632 147.7632-20.992 231.2192-62.976-60.8256-75.264-133.8368-124.3136-208.5888-124.3136m455.168 117.248c-33.0752 12.288-79.9744 38.5024-128.6144 56.0128 31.3344 52.5312 79.9744 112.0256 88.6784 176.8448 0-1.7408-175.5136 0-175.5136 0v43.7248h196.4032V590.848H532.48v87.4496H425.1648v-87.4496H228.7616v-43.7248h196.4032v-43.7248H249.6512V455.68H599.04c-12.1856-40.2432-36.5568-78.7456-55.6032-113.7664-102.4 36.7616-213.8112 62.976-285.0816 47.3088a176.4352 176.4352 0 0 1-90.4192-51.2 141.9264 141.9264 0 0 1-31.3344-124.3136v1.7408c8.704-59.4944 76.4928-115.5072 172.032-115.5072 97.28 0 194.56 49.0496 266.24 138.3424 50.3808-24.4736 154.7264-71.68 252.0064-113.7664A460.8 460.8 0 0 1 880.64 230.4c-13.9264 5.2224-52.1216 14.0288-132.096 40.2432" horiz-adv-x="1024" />
<glyph glyph-name="home" unicode="&#58880;" d="M955.46-78.21100000000001H110.046c-17.4763 0-34.9525 8.73813-45.8752 21.8453-10.9227 15.2917-15.2917 32.768-10.9227 50.2443 43.6907 222.822 225.007 388.847 443.46 406.323 8.73813 2.18453 15.2917 2.18453 26.2144 2.18453v-21.8453c-8.73813 0-15.2917 0-24.0299-2.18453-209.715-15.2917-384.478-174.763-425.984-388.847-2.18453-10.9227 0-24.0299 8.73813-32.768 6.5536-8.73813 17.4763-13.1072 28.3989-13.1072h845.414c10.9227 0 21.8453 4.36907 28.3989 13.1072 6.5536 8.73813 10.9227 19.6608 8.73813 32.768-26.2144 139.81-111.411 259.959-231.561 327.68-13.1072 8.73813-28.3989 15.2917-41.5061 21.8453l8.73813 19.6608c15.2917-6.5536 30.5835-15.2917 43.6907-21.8453 126.703-72.0896 214.084-196.608 242.483-342.972 4.36907-17.4763 0-34.9525-13.1072-50.2443-10.9227-13.1072-28.3989-21.8453-45.8752-21.8453Zm-425.984 458.752h-4.36907v21.8453h6.5536l-2.18453-21.8453ZM538.214 380.54100000000005c-137.626 0-251.221 113.596-251.221 251.221S400.589 882.9838 538.214 882.9838s251.221-113.596 251.221-251.221-113.596-251.221-251.221-251.221Zm0 480.597c-126.703 0-229.376-102.673-229.376-229.376s102.673-229.376 229.376-229.376 229.376 102.673 229.376 229.376S664.917 861.1385 538.214 861.1385Z" horiz-adv-x="1024" />
<glyph glyph-name="huabei" unicode="&#59276;" d="M81.6 510.4c-12-36.8-15.2-76.8-15.2-116.8 0-251.2 199.2-454.4 445.6-454.4 245.6 0 445.6 203.2 445.6 454.4 0 183.2-106.4 341.6-260 413.6-56.8 26.4-108.8 32.8-120 3.2-10.4-30.4 30.4-59.2 60-72.8 29.6-13.6 110.4-52 106.4-128-3.2-76-121.6-84.8-192-55.2-69.6 28.8-171.2 72-195.2 52s-28-70.4 28-104c56.8-33.6 180.8-101.6 198.4-187.2 17.6-85.6 4.8-256.8-241.6-184-56.8 16.8-117.6 106.4-135.2 145.6-50.4 112.8 9.6 226.4 32 260 32 48.8 32 96.8-24.8 117.6-54.4 20-98.4-39.2-132-144zM576.8 728.8c40.8-16 62.4-54.4 48-85.6-14.4-31.2-59.2-44-100-28s-62.4 54.4-48 85.6c14.4 31.2 59.2 44 100 28z" horiz-adv-x="1024" />
......@@ -41,6 +50,9 @@ Created by iconfont
<glyph glyph-name="youhuiquan" unicode="&#58940;" d="M839.7 549H87.3s7.9-5.3 7.7-17.6c0-12.4-22.9-36.9-22.9-36.9v-36.8S95 433.2 95 420.8c0-12.4-22.9-36.9-22.9-36.9V347S95 322.5 95 310.1c0-12.4-22.9-36.9-22.9-36.9v-36.9S95 211.79999999999995 95 199.39999999999998c0-12.4-22.9-36.9-22.9-36.9v-36.9S95 101.10000000000002 95 88.70000000000005c0-12.4-22.9-36.9-22.9-36.9v-36.9S95.3-9.600000000000023 95-22c-0.2-11.8-9.5-33.4-9.5-33.4h754.2c62.7 0 113.5 46.8 113.5 104.5V444.4c0 57.8-50.8 104.6-113.5 104.6z m70.2-490c0-38.2-31.1-72.1-56.3-72.1H133.7l-7.7 21.4v39.2s23.4 25.1 23.4 37.7c0 12.6-23.4 37.7-23.4 37.7v37.7s23.4 25.1 23.4 37.7c0 12.6-23.4 37.7-23.4 37.7v37.7s23.4 25.1 23.4 37.7-23.4 37.8-23.4 37.8v37.7s23.4 25.1 23.4 37.7c0 12.6-23.4 37.7-23.4 37.7v44.8l741.6-0.2c20.4 0 41-28.6 42.3-44.5V59zM506.3 172.20000000000005c-10.6 0-19.4-8.7-19.1-19.4 0-10.6 8.6-19.4 19.4-19.4v-0.3H596V55h0.6c-0.3-1.6-0.5-3.2-0.5-4.9 0-13.4 10.9-24.3 24.3-24.3s24.3 10.9 24.3 24.3c0 1.7-0.2 3.3-0.5 4.9h0.5v78.2h92.2v0.3c10.6 0 19.4 8.6 19.4 19.4 0 10.6-8.6 19.4-19.4 19.4v0.2h-92.2v54.3h92.2v0.3c10.6 0 19.4 8.6 19.4 19.4 0 10.6-8.6 19.4-19.4 19.4h-77.6l83.1 155-0.1 0.1c2.7 3.9 4.2 8.6 4.2 13.8 0 13.7-11.1 24.7-24.7 24.7-10.8 0-19.8-6.9-23.2-16.5h-0.2s-74.3-138.7-78.9-150.6h-1C615.2 302 543 443 543 443h-0.2c-3.5 9.6-12.6 16.5-23.4 16.5-13.9 0-25.1-11.2-25.1-25.1 0-5.5 1.9-10.5 4.9-14.7l83.4-153.8h-76.1c-10.6 0-19.4-8.6-19.4-19.4 0-10.6 8.6-19.4 19.4-19.4v-0.3h89.4v-54.3h-89.4v-0.3h-0.2zM348.7 413.2c0-12.2-11.9-21.9-26.7-21.9-14.7 0-26.7 9.9-26.7 21.9v32.7c0 12.2 11.9 21.9 26.7 21.9 14.7 0 26.7-9.9 26.7-21.9v-32.7zM348.7 292.5c0-12.2-11.9-21.9-26.7-21.9-14.7 0-26.7 9.9-26.7 21.9v32.7c0 12.2 11.9 21.9 26.7 21.9 14.7 0 26.7-9.9 26.7-21.9v-32.7zM348.7 171.79999999999995c0-12.2-11.9-21.9-26.7-21.9-14.7 0-26.7 9.9-26.7 21.9v32.7c0 12.2 11.9 21.9 26.7 21.9 14.7 0 26.7-9.9 26.7-21.9v-32.7zM348.7 51c0-12.2-11.9-21.9-26.7-21.9-14.7 0-26.7 9.9-26.7 21.9v32.7c0 12.2 11.9 21.9 26.7 21.9 14.7 0 26.7-9.9 26.7-21.9V51zM675.5 668.2c40.9 15.5 85.5-2.4 99.9-40l17.3-45.4H832l-25.4 66.8c-20.5 54-84.6 79.7-143.2 57.4L336.2 582.7h114.1l225.2 85.5zM266.9 595.7l183.8 157.4c47.6 40.8 116.6 38.3 154.2-5.6l16.2-19 25.4 9.5-45.4 53c-37.6 44-106.6 46.5-154.2 5.7L197 582.6h35l34.9 13.1z" horiz-adv-x="1024" />
<glyph glyph-name="fenlei" unicode="&#59029;" d="M327.834275 413.890772h-115.706215c-84.851224 0-154.274953 69.423729-154.274953 154.274953v115.706215c0 84.851224 69.423729 154.274953 154.274953 154.274953h115.706215c84.851224 0 154.274953-69.423729 154.274953-154.274953v-115.706215c0-84.851224-69.423729-154.274953-154.274953-154.274953z m-115.706215 347.118644c-42.425612 0-77.137476-34.711864-77.137476-77.137476v-115.706215c0-42.425612 34.711864-77.137476 77.137476-77.137476h115.706215c42.425612 0 77.137476 34.711864 77.137476 77.137476v115.706215c0 42.425612-34.711864 77.137476-77.137476 77.137476h-115.706215zM327.834275-87.502825h-115.706215c-84.851224 0-154.274953 69.423729-154.274953 154.274953v115.706215c0 84.851224 69.423729 154.274953 154.274953 154.274953h115.706215c84.851224 0 154.274953-69.423729 154.274953-154.274953v-115.706215c0-84.851224-69.423729-154.274953-154.274953-154.274953z m-115.706215 347.118644c-42.425612 0-77.137476-34.711864-77.137476-77.137476v-115.706215c0-42.425612 34.711864-77.137476 77.137476-77.137476h115.706215c42.425612 0 77.137476 34.711864 77.137476 77.137476v115.706215c0 42.425612-34.711864 77.137476-77.137476 77.137476h-115.706215zM829.227872-87.502825h-115.706215c-84.851224 0-154.274953 69.423729-154.274953 154.274953v115.706215c0 84.851224 69.423729 154.274953 154.274953 154.274953h115.706215c84.851224 0 154.274953-69.423729 154.274953-154.274953v-115.706215c0-84.851224-69.423729-154.274953-154.274953-154.274953z m-115.706215 347.118644c-42.425612 0-77.137476-34.711864-77.137476-77.137476v-115.706215c0-42.425612 34.711864-77.137476 77.137476-77.137476h115.706215c42.425612 0 77.137476 34.711864 77.137476 77.137476v115.706215c0 42.425612-34.711864 77.137476-77.137476 77.137476h-115.706215zM761.73258 413.890772c-36.640301 0-75.20904 13.499058-104.135593 42.425612l-75.20904 75.20904c-55.92467 55.92467-57.853107 148.489642 0 206.342749l77.137477 75.20904c57.853107 55.92467 150.418079 55.92467 206.342749 0l75.20904-75.20904c55.92467-55.92467 57.853107-148.489642 1.928437-204.414312l-1.928437-1.928437-75.20904-75.20904c-28.926554-28.926554-67.495292-42.425612-104.135593-42.425612z m-125.348399 268.052731c-25.06968-25.06968-25.06968-69.423729 1.928437-96.421846l75.209039-75.209039c26.998117-26.998117 71.352166-26.998117 98.350283 0l77.137476 77.137476c25.06968 26.998117 25.06968 69.423729 0 96.421846l-75.209039 75.209039c-26.998117 26.998117-71.352166 26.998117-98.350283 0l-79.065913-77.137476z" horiz-adv-x="1039" />
<glyph glyph-name="zhong" unicode="&#58883;" d="M328.2 70.5L218-55c-9-10.3-24.7-11.3-35-2.3s-11.3 24.7-2.3 35L291 103.3c9 10.3 24.7 11.3 35 2.3 10.3-9.1 11.3-24.8 2.2-35.1zM682.2 70.5L792.5-55c9-10.3 24.7-11.3 35-2.3s11.3 24.7 2.3 35L719.5 103.3c-9 10.3-24.7 11.3-35 2.3-10.3-9.1-11.3-24.8-2.3-35.1zM477.3 575.7l-1-189.4c-0.1-13.7 11-24.9 24.7-24.9 13.7-0.1 24.9 11 24.9 24.7l1 189.4c0.1 13.7-11 24.9-24.7 24.9-13.7 0.1-24.9-11-24.9-24.7zM484.2 366.7l111.4-103.2c10.1-9.3 25.7-8.7 35.1 1.3 9.3 10.1 8.7 25.7-1.3 35.1L518 403.1c-10.1 9.3-25.7 8.7-35.1-1.3-9.3-10.1-8.7-25.8 1.3-35.1zM508.5 766.1c-98.2 0-190.5-38.2-259.9-107.7-69.5-69.4-107.7-161.7-107.7-259.9 0-98.2 38.2-190.5 107.7-259.9 69.4-69.4 161.7-107.7 259.9-107.7 98.2 0 190.5 38.2 259.9 107.7 69.4 69.4 107.7 161.7 107.7 259.9S837.8 589 768.4 658.4C699 727.8 606.6 766.1 508.5 766.1z m0-701.8c-184.3 0-334.2 149.9-334.2 334.2s149.9 334.2 334.2 334.2c184.3 0 334.2-149.9 334.2-334.2s-150-334.2-334.2-334.2zM313.1 799.4c-33.6 30.4-77 47.2-122.2 47.2-51.3 0-100.4-21.8-134.9-59.7-67.4-74.3-61.8-189.7 12.5-257.1l12.4-11.2 244.6 269.7-12.4 11.1z m-35.5-14.2L79.2 566.5c-49.4 56.1-49 142.2 1.5 198 28.1 31 68.2 48.8 110.1 48.8 31.5-0.1 61.4-9.7 86.8-28.1zM966.7 786.9c-34.4 38-83.6 59.7-134.9 59.7-45.3 0-88.7-16.8-122.2-47.2l-12.4-11.2 244.6-269.7 12.4 11.2c36 32.7 57.2 77.4 59.5 126 2.4 48.6-14.3 95.2-47 131.2z m13.6-129.5c-1.6-33.7-14.7-65.8-36.8-90.9L745 785.2c25.4 18.3 55.3 28 86.8 28 41.9 0 82-17.8 110.1-48.8 26.7-29.4 40.3-67.4 38.4-107z" horiz-adv-x="1024" />
......@@ -314,7 +326,7 @@ Created by iconfont
<glyph glyph-name="danseshixintubiao-17" unicode="&#58980;" d="M915.7 569.2c-2.2 109.4-92.7 196.4-202.1 194.2-86.4-1.7-158.8-58.5-184.4-136.2-1.1-3.2-5.6-3.2-6.7 0-26.5 80.6-103.1 138-192.3 136.2-109.4-2.2-196.4-92.7-194.2-202.1 0.8-38.5 17.1-79.8 40.1-119 17.9-30.4 39.5-58.3 63.9-83.7l286.2-297.2L837 381.6c47.6 49.2 79.9 127.1 78.7 187.6z" horiz-adv-x="1024" />
<glyph glyph-name="danseshixintubiao-12" unicode="&#58947;" d="M523.3 539.5m-233.9 0a233.9 233.9 0 1 1 467.8 0 233.9 233.9 0 1 1-467.8 0ZM875.7 22.2C872 206.3 708.5 352.4 510.4 348.4S154.8 192 158.5 7.9l717.2 14.3z" horiz-adv-x="1024" />
<glyph glyph-name="user" unicode="&#58947;" d="M523.3 539.5m-233.9 0a233.9 233.9 0 1 1 467.8 0 233.9 233.9 0 1 1-467.8 0ZM875.7 22.200000000000045C872 206.29999999999995 708.5 352.4 510.4 348.4S154.8 192 158.5 7.899999999999977l717.2 14.3z" horiz-adv-x="1024" />
<glyph glyph-name="danseshixintubiao-23" unicode="&#58986;" d="M344.3 13.6l513 364.9c10 7.1 10 21.9 0 29l-513 364.9c-11.8 8.4-28.1 0-28.1-14.5v-729.7c-0.1-14.5 16.3-22.9 28.1-14.6z" horiz-adv-x="1024" />
......
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -4,8 +4,10 @@ import ReactDOM from 'react-dom';
import Router from './router';
// import { Provider } from 'react-redux';
// 默认样式
import './styles/index.scss';
// import App from './App';
// iconfont
import './font/iconfont.css';
ReactDOM.render(
<Router />,
......
......@@ -9,7 +9,7 @@
// 公有样式引入mixins的目的是为了方便默认设置若干常用的样式
// 公有样式不可以使用composes
// @import "./mixins.scss";
@import "./variable.scss";
// 颜色设置
$border-color: #e9e9e9; //边框颜色
......@@ -17,7 +17,7 @@ $body-color: #333; //设置通用的字体颜色
$body-bg: #f2f2f2; //设置通用的 body 背景色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
$main-color: #1BBC9B; //主体颜色
$main-color: #09f; //主体颜色
// 字体
$font-family-zh: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
......
/*
* @ 文字颜色
*/
$white: #fff;
$black: #000;
$color_333: #333;
$color_666: #666;
$color_999: #999;
/*
* @ 文字大小
*/
$font_30: 30px;
$font_28: 28px;
$font_26: 26px;
$font_24: 24px;
$font_22: 22px;
$font_20: 20px;
$font_18: 18px;
$font_16: 16px;
$font_14: 14px;
$font_12: 12px;
/*
* @ 背景颜色
*/
$bg_active: #09f;
$bg_f4f4f4: #f4f4f4;
$body-bg: #f2f2f2; //设置通用的 body 背景色
/*
* @ 文字颜色
*/
$border-color: #e9e9e9; //边框颜色
$body-color: #333; //设置通用的字体颜色
$link-color: #333; //设置通用的链接颜色
$link-visited: #333; //设置链接访问后的颜色
/*
* @ 边框颜色
*/
/*
* @ 文字颜色
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment