react-native-style-loader

0.0.11 • Public • Published

react-native-style-loader NPM version

此loader的灵感来自于gulp-react-native-stylesheet-css, 万分感谢该作者.

react-native-style-loader 致力于将reanct native中的css从js中分离出来, 其具有以下几个功能

分离react native中的css

支持css中的px, vw, vh, rem, pt 单位

支持媒体查询 @media query

支持react native stylesheet 的嵌套

引入less loader后, 还可以支持变量定义等功能

支持margin, padding, box-shadow等的简写

class和id的驼峰化

支持calc eg: calc(~'100vh - 49pt')

Installation

$ npm install react-native-style-loader --save-dev

Usage

within the webpack config:

// use less:
//webpack.config.js
// 启动命令 webpack --config webpack.config.js -w

//webpack 1
module.exports = {
    entry: './src/less/index.less',
    output: {
        path: './src/styles',
        filename: 'tmp.js'
    },
    module: {
        loaders: [{
            test: /\.less$/,
            loader: "react-native-style-loader!less"
        }]
    }
};

//webpack 2
var path = require('path');

module.exports = {
    entry: './src/less/index.less',
    output: {
        filename: 'tmp.js',
        path: path.resolve(__dirname, './src/styles')
    },
    module: {
        rules: [{
            test: /\.less$/,
            use: [
                {
                    loader: 'react-native-style-loader'
                },
                {
                    loader: 'less-loader'
                }
            ]
        }]
    }
};

然后你就可以在js 中这样引入了

import styles from './src/styles';

Properties supported

react native中支持的css属性皆全部支持

单位

px 所支持的做小线宽, 如: border: 1px solid #ccc;
pt 和ios中的pt, andorid中的dp一个道理
vw 和css中的vw含义一样, 如 50vw 表示屏幕宽度的50%
vh 和css中的vh含义一样, 如 50vh 表示屏幕高度的50%
rem 和css中的rem含义一样, 你可以像下面这样设置rem的基准
html {
    font-size: 20pt;
}

媒体查询

@media (min-width: 350px) and (max-width: 500px) {
    html {
        font-size: 100pt;
    }
}

嵌套的css

引入less后,你可以像下面这样书写css

.container {
    .box1 {
        width: 50pt;
        height: 20pt;
        background: orange;
    }
    .box2 {
        width: 50rem;
        height: 20pt;
        background: green;
    }
    .m-box {
        width: 50rem;
        height: 20pt;
        background: green;
    }
}

最后将生成如下的style sheet

{
   container: {
        box1: {
            width: 50;
            height: 20;
            backgroundColor: orange;
        }
        box1: {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
        "m-box": {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
        mBox: {
            width: 50;
            height: 20;
            backgroundColor: green;
        }
   }
}

注意, 不支持这样的嵌套

.container {
    .box1 {
        width: 50pt;
        height: 20pt;
        background: orange;
    }
    font-size: 12px;
}

额外支持的特殊属性

Property Example Values Notes
margin 2px
2px 4px
3px 1px 5px
1px 3px 2px 6px
padding 2px
2px 4px
3px 1px 5px
1px 3px 2px 6px
box-shadow none
0 2px 4px rgba(52, 21, 23, 0.32)
Inset shadows and spread values are not supported.
flex 1
1 30px
1 2 10%
Only the first value will be output and the rest will be ignored, as React Native does not support flex-basis or flex-shrink.
transform perspective(90)
rotate(10deg)
rotateX(5deg)
rotateY(10deg)
rotateZ(15deg)
rotate3d(5deg, 10deg, 15deg)
scale(1.2)
scaleX(1.5)
scaleY(0.5)
scale2d(1.5, 0.5) or scale3d(1.5, 0.5)
translateX(5px)
translateY(10px)
translate2d(5px, 10px) or translate3d(5px, 10px)
You may chain multiple transformations together with a space delimiter, like in CSS3 (see example above).

Readme

Keywords

Package Sidebar

Install

npm i react-native-style-loader

Weekly Downloads

3

Version

0.0.11

License

ISC

Last publish

Collaborators

  • dengchengmi