Cuando se usa la función rgba en Sass se puede tambÃen usar los colores declarados en variables para no usar los colores en rgba. E.g
rgba($color, 0.5)
Fundamentos del Desarrollo Web Profesional
Cuándo necesitas un framework de JavaScript
Qué son los componentes
Cómo estructurar un componente
Qué es reactividad
LibrerÃas vs. frameworks
Ecosistema de frameworks y librerÃas JavaScript
Contexto y funcionamiento de los Frameworks JavaScript
Qué es React y cómo se construyó
Qué es un componente en React y cómo funciona
Cómo usar React.js
Manejo del estado en React
Qué es Angular y cómo se construyó
Cómo usar Angular
Qué es Vue y cómo se construyó
Cómo usar Vue.js
Qué es Svelte y cómo se construyó
Cómo usar Svelte
Estilos con CSS, preprocesadores y CSS-in-JS
Qué es CSS-in-JS
Componentes en Angular con CSS
Trabajando con Vue Components
Vue Components con Preprocesadores de CSS
Trabajando en React con Styled Components
Estilos dinámicos con Styled Components en React
Trabajando en Svelte con Emotion
Cómo escalar sitios o aplicaciones web
Tipos de aplicaciones según su router: SPAs vs. SSR
Frameworks sobre frameworks: Next.js
Organización de archivos en el frontend
Retos y análisis para elegir tu próximo stack de desarrollo frontend
Cómo especializarte en Frameworks de JavaScript para Frontend
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Juan David Castro Gallego
Aportes 19
Preguntas 4
Cuando se usa la función rgba en Sass se puede tambÃen usar los colores declarados en variables para no usar los colores en rgba. E.g
rgba($color, 0.5)
Con scss tambien podemos hacer esto
form{
background: $color1;
&:hover{
background: $color2;
}
}
Me he enamorado de Vue 💚
lo hice con dos componentes para los botones 😄
<template>
<h1>{{ msg }}</h1>
<form v-for="movie in movies" v-bind:key="movie.name">
<h2>{{ movie.name }}</h2>
<SubstractButton
v-on:substract="subtractTickets(movie)"
v-bind:movie="movie"
/>
{{ movie.quantity }}
<AddButton v-on:add="addTickets(movie)" v-bind:movie="movie" />
</form>
</template>
<script>
import AddButton from "./AddButton.vue";
import SubstractButton from "./SubstractButton.vue";
export default {
name: "Form",
components: {
AddButton: AddButton,
SubstractButton: SubstractButton,
},
props: {
msg: String,
},
data() {
return {
movies: [
{ name: "DareDevil", quantity: 0, available: 5 },
{ name: "The Punisher", quantity: 0, available: 3 },
{ name: "Avengers", quantity: 0, available: 4 },
],
};
},
methods: {
addTickets(movie) {
movie.quantity += 1;
},
subtractTickets(movie) {
movie.quantity -= 1;
},
},
};
</script>
<template>
<button
type="button"
v-on:click="add"
:disabled="movie.quantity >= movie.available"
>
+
</button>
</template>
<script>
export default {
name: "AddButton",
methods: {
add() {
this.$emit("add");
},
},
props: ["movie"],
};
</script>
<template>
<button type="button" v-on:click="substract" :disabled="movie.quantity <= 0">
-
</button>
</template>
<script>
export default {
name: "SubstractButton",
methods: {
substract() {
this.$emit("substract");
},
},
props: ["movie"],
};
</script>
Ojo, el propio sass ya no recomienda usar import
, recomienda es el suo de used
y forward
Desde la W3C han atendido varias de las razones por las que surgieron scss y similares; implicando cambios que ya hacen parte de CSS Nivel 3, haciendo actualmente inecesario usar scss u otros preprocesadores, o por lo menos si para lo único que se quiere es para poder trabajar con variables, Por ejemplo:
/* Para declararlas con -- */
:root {
--mi-color: red;
}
/* Para usarlas, con var() */
em {
color: var(--mi-color);
}
(En otras palabras, no es necesario instalar ningun preprocesador, ya hay soporte nativo en navegadores que soporten CSS3, a la fecha la mayorÃa, se puede trabajar simplemente con CSS)
Por si a alguien le interesa debajo dejo el código.
**App.vue**
//HTML
<template>
<h2>PelÃculas</h2>
<Form/>
</template>
//JS - Vue
<script>
import Form from "./components/Form.vue";
export default {
name: "App",
components: {
Form: Form,
},
};
</script>
//CSS - SCSS
//En otro archivo llamado _variables.scss
//Se guardan las siguientes varibles con sus respectivos valores.
//$bg: #ccffcc
//$color: #030
<style lang="scss">
@import "./styles/_variables.scss";
html,
body {
background: $bg;
color: $color;
margin: 0;
font-family: sans-serif;
}
h2 {
border-bottom: 1px solid $color;
padding-bottom: 10px;
}
</style>
Form.vue
<template>
<form v-for="(movie, i) in movies" :key="i">
<h3>{{ movie.name }}</h3>
<button
type="button"
v-on:click="movie.quantity--"
v-bind:disabled="movie.quantity <= 0"
>
-
</button>
{{ movie.quantity }}
<button
type="button"
v-on:click="movie.quantity++"
v-bind:disabled="!(movie.quantity < movie.available)"
>
+
</button>
</form>
</template>
<script>
export default {
name: "Form",
data() {
return {
movies: [
{ name: "Avengers", available: 5, quantity: 0 },
{ name: "Wonder Woman", available: 15, quantity: 0 },
],
};
},
};
</script>
//<!-- Add "scoped" attribute to limit CSS to this component only -->
//CSS - SCSS
//En otro archivo llamado _variables.scss
//Se guardan las siguientes varibles con sus respectivos valores.
//$bg: #ccffcc
//$color: #030
//$color2: rgba(50, 100, 50, 0.5)
<style lang="scss" scoped>
@import "./styles/_variables.scss";
form {
background: $bg;
border: 1px solid $color;
margin: 0 50px 25px;
font-family: courier;
padding: 10px 25px 25px;
text-aling: center;
transform: scale(1);
transition: 0.3s transform;
}
form:hover {
transform: scale(1.2);
}
button {
background: $color2;
border: 1px solid transparent;
cursor: pointer;
padding: 5px 10px;
transition: border-color 0.15;
}
button:hover {
border-color: $color2;
}
button[disabled]{
opacity: 0.5;
}
</style>
Código final de esta clase:
Archivo app.vue
<template>
<h2>PelÃculas</h2>
<Form />
</template>
<script>
import Form from "./components/Form.vue";
export default {
name: "App",
components: {
Form,
},
};
</script>
<style lang="scss">
@import "./styles/_variables.scss";
html,
body {
background-color: $bg;
color: $color;
margin: 0;
font-family: sans-serif;
}
h2 {
border-bottom: 1px solid $color;
}
</style>
Archvo styles.scss
$bg:#ccffcc;
$color:#030;
$color2: rgba(50,100,50,0.5);
Archivo Form.vue
<template>
<form v-for="(movie,i) in movies" :key="i">
<h3>{{movie.name}}</h3>
<button
type="button"
@click="()=>movie.quantity--"
:disabled="movie.quantity<=0"
>
-
</button>
{{movie.quantity}}
<button
type="button"
@click="()=>movie.quantity++"
:disabled="movie.quantity>=movie.available"
>+
</button>
</form>
</template>
<script>
export default {
name: "HelloWorld",
// props: {
// msg: String,
// },
data(){
return {
movies:[
{
name: "Avengers",
available: 3,
quantity: 0,
},
{
name: "Terminator",
available: 5,
quantity: 0,
},
]
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
@import "../styles/_variables.scss";
form {
background-color: $bg;
border: 1px solid $color;
margin: 0 50px 25px;
font-family: "Courier New", Courier, monospace;
padding: 25px;
text-align: center;
transform: scale(1);
transition: 0.3 transform;
}
form:hover {
transform: scale(1.2);
}
button {
background: $color2;
border: 1px solid $color;
cursor: pointer;
padding: 5px 10px;
}
button:hover {
border-color: $color;
}
button[disabled] {
opacity: 0.5;
}
</style>
Un resumen del código y breve explicación
Cambiamos los estilos en la Aplicación principal App.vue
<style lang="scss">
@import "./styles/_variables.scss";
html,
body {
background: $bg;
color: $color;
margin: 0;
font-family: sans-serif;
}
h2 {
border-bottom: 1px solid $color;
padding-bottom: 10px;
}
</style>
En este aspecto se pone en la etiqueta style el atributo lang para trabajar con el lenguaje scss
Se importa los colores definidos en un archivo a través de
@import
En nuestro componente Form.vue se hace el mismo procedimiento quedando asÃ
```jsx
<style lang="scss" scoped>
@import "../styles/_variables.scss";
form {
background: $bg;
border: 1px solid $color;
margin: 0 50px 25px;
font-family: courier;
padding: 10px 25px;
text-align: center;
transform: scale(1);
transition: 0.3s transform;
}
form:hover {
transform: scale(1.2);
}
button {
background: $color2;
border: 1px solid transparent;
cursor: pointer;
padding: 5px 10px;
transition: border-color 0.15;
}
button:hover {
border-color: $color2;
}
button[disabled] {
opacity: 0.5;
}
</style>
No entiendo porque no se colocot todo los estilo en el archivo sass y ya. en de tener una parte separada en el js.
Yo hice un componente de un <div> con un <h2> y <p> anidados.
<template>
<div v-for="profile in profiles" :key="profile.name">
<h2>{{ profile.name }}</h2>
<p>{{ profile.occupation }}</p>
</div>
</template>
<script>
export default {
name: "Container",
data() {
return {
profiles: [
{
name: "Dahmer",
occupation: "Carnicero",
},
{
name: "Daniel",
occupation: "programador",
},
{
name: "Jo",
occupation: "Chef",
},
],
};
},
};
</script>
<style lang="scss" scoped>
div {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: rgba(130, 50, 40, 0.5);
border: 1px solid #000;
margin-top: 25px;
}
h2 {
color: #000;
}
</style>
Me esta gustando vue!
Sass
<template>
<button
v-if="math == `add`"
type="button"
:disabled="movie.quantity >= movie.available"
v-on:click="movie.quantity += 1"
>
+
</button>
<button
type="button"
v-else-if="math == `subs`"
:disabled="movie.quantity <= 0"
v-on:click="movie.quantity -= 1"
>
-
</button>
</template>
<script>
export default {
name: "Button",
props: {
math: String,
movie_prop: Object,
},
data() {
return {
movie: this.movie_prop,
};
},
};
</script>
<style lang="scss" scoped>
@import "../styles/_variables.scss";
button {
background-color: $btnbg;
border: none;
color: $color;
padding: 5px 15px;
transition: 0.2s background-color;
}
button:hover {
background-color: $btnbgHover;
cursor: pointer;
}
button[disabled] {
background-color: rgba($btnbg, 0.5);
}
button:hover[disabled] {
background-color: rgba($btnbg, 0.5);
cursor: default;
}
</style>
<template>
<Button math="subs" v-bind:movie_prop="movie" />
{{ movie.quantity }}
<Button math="add" v-bind:movie_prop="movie" />
</template>
<script>
import Button from "./Button";
export default {
name: "Adder",
components: {
Button,
},
props: {
movie_prop: Object,
},
data() {
return {
movie: this.movie_prop,
};
},
};
</script>
<style>
</style>
<template>
<h3>{{ msg }}</h3>
</template>
<script>
export default {
name: "Title",
props: {
msg: String,
},
};
</script>
<style>
</style>
<template>
<h2>PelÃculas</h2>
<form v-for="movie in movies" :key="movie.name">
<Title v-bind:msg="movie.name" />
<Adder v-bind:movie_prop="movie" />
</form>
</template>
<script>
import Adder from "./Adder";
import Title from "./Title";
export default {
name: "Form",
components: {
Adder,
Title,
},
data() {
return {
movies: [
{
name: "Avengers",
available: 3,
quantity: 0,
},
{
name: "Terminator",
available: 5,
quantity: 0,
},
],
};
},
// props: {
// msg: String,
// },
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
@import "../styles/_variables.scss";
form {
background: $bg;
border: 1px solid $color;
margin: 0 50px 25px;
padding: 10px 25px 25px;
text-align: center;
transform: scale(1);
transition: 0.2s transform;
border-radius: 15px;
}
form:hover {
transform: scale(1.1);
}
</style>
Viendo esta clase y recordando las cosas que sé que Vue.js me parece tan triste que la oferta laboral de Vue no sean tan grande como la de React… Vue tiene una construcción genial ^-^
Enamorado de vue!!!♥♥♥
. FINAL
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?