在 Vue3 中如何使用 styled-components
前言
隨著組件化時代的興起,前端應用開始采用組件級別的 CSS 封裝:通過 JavaScript 聲明和抽象樣式,以提高組件的可維護性。在組件加載時動態(tài)加載樣式,并動態(tài)生成類名,從而避免全局污染。 styled-components 是其中的杰出代表。 正如其名稱所示,styled-components 以組件的形式聲明樣式,將樣式與組件分離,實現(xiàn)邏輯組件與展示組件的分離。
styled-components 的官方 Vue 版本目前已多年沒有更新,而且只支持到 Vue2。那么,在 Vue3 中怎么才能使用到 styled-components 呢?在 Github 翻了一下,大部分復刻 vue-styled-components 的庫要么不再更新,要么沒有任何文檔和說明。
不過還是找到一個質(zhì)量還可以的庫:
查看了一下文檔,還原了大部分核心 API,使用上與官方 styled-components
差別不大。下面來看看如何使用。
使用
安裝
npm i @vvibe/vue-styled-components
styled原生組件
<script setup lang="ts"> import { styled } from '@vvibe/vue-styled-components' const StyledLink = styled('a')` color: darkred; ` </script> <template> <StyledLink>鏈接</StyledLink> </template>
也可以直接鏈式調(diào)用
<script setup lang="ts"> import { styled } from '@vvibe/vue-styled-components' const StyledLink = styled.a` color: darkred; ` </script> <template> <StyledLink>鏈接</StyledLink> </template>
響應式樣式
<script setup lang="ts"> import { ref } from 'vue' import { styled } from '@vvibe/vue-styled-components' const borderColor = ref('darkred') const inputProps = { borderColor: String } const StyledInput = styled('input', inputProps)` width: 100%; height: 40px; padding: 4px 8px; border: 1px solid ${(props) => props.borderColor}; border-radius: 8px; ` const input = () => (borderColor.value = 'forestgreen') const focus = () => (borderColor.value = 'skyblue ') const blur = () => (borderColor.value = 'darkred') </script> <template> <StyledInput placeholder="Type something" :borderColor="borderColor" @input="input" @focus="focus" @blur="blur" /> </template>
擴展樣式
<script setup lang="ts"> import { styled } from '@vvibe/vue-styled-components'; const BlueButton = styled.button` width: 120px; height: 40px; margin-right: 8px; padding: 4px 8px; border-radius: 9999px; box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); background-color: skyblue; font-weight: bold; `; const RedButton = styled(BlueButton)` background-color: darkred; color: white; `; </script> <template> <BlueButton>Blue Button</BlueButton> <RedButton>Red Button</RedButton> </template>
動畫
<script setup lang="ts"> import { styled, keyframes } from '@vvibe/vue-styled-components' const rotate = keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); } ` const translate = keyframes` 0 { transform: translateX(0); } 50% { transform: translateX(250%); } 60% { transform: rotate(360deg); } ` const StyledBaseDiv = styled.div` display: 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; ` </script> <template> <StyledRotateDiv /> <StyledTranslateDiv /> </template>
主題
<script setup lang="ts"> import { styled, ThemeProvider } from '@vvibe/vue-styled-components' const Wrapper = styled.div` display: flex; justify-content: space-around; ` const StyledLink = styled.a` margin-right: 8px; color: ${(props) => props.theme.primary}; font-weight: bold; ` </script> <template> <Wrapper> <a>This a normal link</a> <ThemeProvider :theme="{ primary: 'red' }"> <StyledLink>This a theming link</StyledLink> </ThemeProvider> </Wrapper> </template>
更多細節(jié)查看文檔:https://vue-styled-components.com
到此這篇關(guān)于在 Vue3 中使用 styled-components的文章就介紹到這了,更多相關(guān)Vue3使用 styled-components內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3如何實現(xiàn)在style中使用響應式變量
- Vue3如何利用xlsx、xlsx-js-style導出Excel表格使用(適合新手)
- Vue3中使用styled-components的實現(xiàn)
- Vue使用xlsx和xlsx-style導出表格出現(xiàn)部分樣式缺失的問題解決
- vue使用xlsx庫和xlsx-style庫導入導出excel、設置單元格背景色、文字居中、合并單元格、設置列寬
- 使用Vue綁定class和style樣式的幾種寫法總結(jié)
- vue如何在style標簽中使用變量(數(shù)據(jù))詳解
- 在VUE style中使用data中的變量的方法
- 在vue中:style 的使用方式匯總
相關(guān)文章
elementUI select組件value值注意事項詳解
這篇文章主要介紹了elementUI select組件value值注意事項詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05使用Bootstrap4 + Vue2實現(xiàn)分頁查詢的示例代碼
本篇文章主要介紹了使用Bootstrap4 + Vue2實現(xiàn)分頁查詢的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Vue集成three.js并加載glb、gltf、FBX、json模型的場景分析
這篇文章主要介紹了Vue集成three.js,并加載glb、gltf、FBX、json模型,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09Electron自動更新失效報錯Error:?Object?has?been?destroyed的問題解決
本文主要講解如何解決?Error:?Object?has?been?destroyed?這個?Electron?中最常見的問題,以及?Electron?自動更新的流程,文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下2024-01-01