做拍卖网站有哪些,申请阿里巴巴网站首页,网页设计培训的课程,邯郸做网站推广多少钱花一个月时间为 vue3 重制了 vue-styled-components
前言
styled-components 在 React 是一个超级热门的 css in js 工具库。其实 styled-components 也有 Vue 版本#xff08;vue-styled-components#xff09;#xff0c;可惜的是只支持 Vue2#xff0c;并且该项目已有…花一个月时间为 vue3 重制了 vue-styled-components
前言
styled-components 在 React 是一个超级热门的 css in js 工具库。其实 styled-components 也有 Vue 版本vue-styled-components可惜的是只支持 Vue2并且该项目已有几年没有更新作者大概率不会发布 Vue3 版本了。
因此我决定重制一个支持 Vue3 版本的 vue-styled-components该项目前前后后大概花费了一个月的业余时间基本实现了 styled-components 的大部分核心功能不过可能存在部分场景考虑不全面的问题这个需要拜托广大朋友测试检验一下了因为不是照搬 原styled-components 的 api大部分是自己重新实现了的。
大家觉得可以的话点点star支持下 项目地址https://github.com/v-vibe/vue-styled-components ✨特性
✅ 样式化 Vue 组件或样式化组件
✅ 添加默认属性
✅ 传递属性
✅ 支持主题化
✅ 生成关键帧
✅ 生成 CSS 混合
✅ 创建全局样式
✅ 添加或覆盖Attrs
✅ 支持 CSS 嵌套。仅支持 web: https://drafts.csswg.org/css-nesting/#nesting
安装
npm i vvibe/vue-styled-componentsyarn add vvibe/vue-styled-componentspnpm i vvibe/vue-styled-components使用
样式化组件
script setup langtsimport { styled } from vvibe/vue-styled-components;
import OtherComponent from ./VueComponent.vue;const StyledDiv styled(div)width: 100px;height: 100px;background-color: #ccc;color: #000;
;const StyledStyledDiv styled(StyledDiv)width: 100px;height: 100px;background-color: #000;color: #fff;
;const StyledOtherComponent styled(OtherComponent)width: 100px;height: 100px;background-color: red;color: #fff;
;/scripttemplateStyledDivStyled Div/StyledDivStyledStyledDivStyled Styled Div/StyledStyledDivStyledOtherComponentStyled Other Vue Component/StyledOtherComponent
/templateAttributes 设置
script setup langtsimport { styled } from vvibe/vue-styled-components;const StyledDiv styled.div.attrs({class: styled-div
})width: 100px;height: 100px;background-color: #ccc;color: #000;
;
/scripttemplateStyledDivStyled Div/StyledDiv!-- div classstyled-divStyled Div/div --
/template通过 Props 动态控制样式
script setup langtsimport { styled } from vvibe/vue-styled-components;const StyledDiv styled(div, {color: #fff
})width: 100px;height: 100px;background-color: #ccc;color: ${(props) props.color};
;
/scripttemplateStyledDivStyled Div/StyledDiv
/template主题
script setup langtsimport { styled, ThemeProvider } from vvibe/vue-styled-components;const StyledDiv styled.divwidth: 100px;height: 100px;background-color: #ccc;color: ${(props) props.theme.color};
;
/scripttemplateThemeProvider :theme{ color: #fff }StyledDivStyled Div/StyledDiv/ThemeProvider
/template生成 keyframes
您可以使用 keyframes 函数来定义关键帧动画然后使用 keyframes 的返回值将其应用于样式化组件。
script setup langtsimport { styled, keyframes } from vvibe/vue-styled-components;const rotate keyframesfrom {transform: rotate(0deg);}to {transform: rotate(360deg);}
;const translate keyframes0 {transform: translateX(0);}50% {transform: translateX(250%);}60% {transform: rotate(360deg);}
;const StyledBaseDiv styled.divdisplay: inline-block;width: 100px;height: 100px;
; const StyledRotateDiv styled(StyledBaseDiv)background-color: skyblue;animation: ${rotate} 2s linear infinite;
;const StyledTranslateDiv styled(StyledBaseDiv)margin-left: 10px;background-color: darkred;animation: ${translate} 2s ease infinite alternate;
;
/scripttemplateStyledRotateDiv /StyledTranslateDiv /
/templateCreate Global Style
一个用于创建全局样式的函数。
script setupimport { createGlobalStyle } from vvibe/vue-styled-components;const GlobalStyle createGlobalStylebody {color: ${(props) props.color};}
;
/scripttemplateGlobalStyle colorwhite /
/templateGenerate CSS Mixin
一个用于从带有插值的模板字符串生成 CSS 的函数。
script setup langtsimport { styled, css } from vvibe/vue-styled-components;const mixin csscolor: red;background-color: blue;
;const DivWithStyles styled(div)${mixin}
;
/scripttemplateDivWithStylesDiv with mixin/DivWithStyles
/template添加或覆盖 Attributes
一个向 ComponentInstance or HTMLElements 添加或覆盖 Attributes 的函数.
script setup langtsimport { withAttrs } from vvibe/vue-styled-components;const DivWithAttrs withAttrs(div, {class: div-with-attrs
});const DivWithAttrs2 withAttrs(DivWithAttrs, {class: div-with-attrs-2
});
/scripttemplateDivWithAttrsDiv with attrs/DivWithAttrsDivWithAttrs2Div with attrs 2/DivWithAttrs2
/template
style scope
.div-with-attrs {color: red;
}.div-with-attrs-2 {color: blue;
}
/style更多细节请查看 官方文档