【Vue】动态样式

内联样式的动态样式

body(){ boxASelect:false, }
v-bind:style="{borderColor:boxASelect ? 'red' : '#ccc'}"

html 复制代码
  <body>
    <header>
      <h1>Vue Dynamic Styling</h1>
    </header>
    <section id="styling">
      <div class="demo" :class="boxAClasses" @click="boxSelected('A')"></div>
      <div class="demo" :class="boxBClasses" @click="boxSelected('B')"></div>
      <div class="demo" :class="boxCClasses" @click="boxSelected('C')"></div>
    </section>
  </body>
javascript 复制代码
const app = Vue.createApp({
	data() {
		return {
			boxASelected: false,
			boxBSelected: false,
			boxCSelected: false,
		};
	},
	computed: {
		boxAClasses() {
			return { active: this.boxASelected };
		},
		boxBClasses() {
			return { active: this.boxBSelected };
		},
		boxCClasses() {
			return { active: this.boxCSelected };
		},
	},
	methods: {
		boxSelected(box) {
			if (box === 'A') {
				this.boxASelected = !this.boxASelected;
			} else if (box === 'B') {
				this.boxBSelected = !this.boxBSelected;
			} else {
				this.boxCSelected = !this.boxCSelected;
			}
		},
	},
});

app.mount('#styling');

也可以使用:class="['demo' ,{ active: this.boxASelected }]"


作业题

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue Basics</title>
    <link
      href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap"
      rel="stylesheet"
    />
    <link rel="stylesheet" href="styles.css" />
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="app.js" defer></script>
  </head>

  <body>
    <header>
      <h1>Vue Styling</h1>
    </header>
    <section id="assignment">
      <!-- 1) Fetch the user input and use it as a CSS class -->
      <!-- The entered class should be added to the below paragraph -->
      <input type="text" v-model="inputClass" />
      <!-- (available classes: "user1", "user2") -->
      <p :class="paraClass">Style me!</p>
      <button @click="toggleParagraphvisibility">Toggle Paragraph</button>
      <!-- 2) Use the "visible" and "hidden" classes to show/ hide the above paragraph -->
      <!-- Clicking the button should toggle between the two options -->

      <!-- 3) Add dynamic inline styling to the below paragraph and let the user enter a background-color -->
      <input type="text" v-model="inputBackgroundColor" />
      <p :style="{backgroundColor:inputBackgroundColor}">Style me inline!</p>
    </section>
  </body>
</html>
css 复制代码
* {
  box-sizing: border-box;
}

html {
  font-family: 'Jost', sans-serif;
}

body {
  margin: 0;
}

header {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
  margin: 3rem;
  border-radius: 10px;
  padding: 1rem;
  background-color: #1b995e;
  color: white;
  text-align: center;
}

#assignment {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
  margin: 3rem;
  border-radius: 10px;
  padding: 1rem;
  text-align: center;
}

#assignment h2 {
  font-size: 2rem;
  border-bottom: 4px solid #ccc;
  color: #1b995e;
  margin: 0 0 1rem 0;
}

p {
  font-size: 1.25rem;
  font-weight: bold;
  background-color: #8ddba4;
  padding: 0.5rem;
  color: #1f1f1f;
  border-radius: 25px;
}

#assignment input {
  font: inherit;
  border: 1px solid #ccc;
}

#assignment input:focus {
  outline: none;
  border-color: #1b995e;
  background-color: #d7fdeb;
}

#assignment button {
  font: inherit;
  cursor: pointer;
  border: 1px solid #ff0077;
  background-color: #ff0077;
  color: white;
  padding: 0.05rem 1rem;
  box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26);
}

#assignment button:hover,
#assignment button:active {
  background-color: #ec3169;
  border-color: #ec3169;
  box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
}

.user1 {
  background-color: blue;
  color: white;
}

.user2 {
  background-color: purple;
  color: white;
}

.hidden {
  display: none;
}

.visible {
  display: block;
}
javascript 复制代码
const app = Vue.createApp({
  data() {
    return {
      inputClass: "",
      paragraphIsVisible: true,
      inputBackgroundColor: "",
    }
  },
  methods: {
    toggleParagraphvisibility() {
      this.paragraphIsVisible = !this.paragraphIsVisible
    },
  },
  computed: {
    paraClass() {
      return {
        user1: this.inputClass === "user1",
        user2: this.inputClass === "user2",
        visible: this.paragraphIsVisible,
        hidden: !this.paragraphIsVisible,
      }
    },
  },
})

app.mount("#assignment")

效果


相关推荐
xkxnq4 分钟前
第八阶段:工程化、质量管控与高级拓展(130天),Vue端到端测试:Cypress自动化测试(登录流程+表单提交+页面跳转)
前端·vue.js·flutter
老毛肚8 分钟前
jeecgboot vue API 拆分02
前端·javascript·vue.js
爱因斯坦乐11 小时前
Vue项目整合
前端·javascript·vue.js
ct97812 小时前
组件间的通信
前端·javascript·vue.js
左手吻左脸。13 小时前
Vue 全栈面试题大全(2026 最新版最详细)
前端·javascript·vue.js
小新11013 小时前
最简单但完整的 Vue 响应式示例(一个简单的计数器按钮)
前端·javascript·vue.js
刘海不能乱1615 小时前
Java JUC源码分析系列笔记-Synchronized
vue.js
whatever who cares16 小时前
Vue3中vue文件和composables的分工
前端·javascript·vue.js
薛先生_09916 小时前
vue-编程式跳转-基本跳转
前端·javascript·vue.js
码农君莫笑18 小时前
深入理解 CSS Grid 布局:从入门到实战
前端·css