Есть несколько способов добиться этого. Если бы я собирался об этом, вот как я бы это сделал.
Кроме того, было бы очень разумно практиковать мобильную первую разработку. Используйте min-width
и идите вверх вместо max-width
, спускаясь вниз. То, как вы сейчас это структурируете, будет означать, что у вас не будет действительного URL, если эта переменная $i
не установлена в 1 в верхней части документа. Написание SASS или CSS станет намного проще, если вы к этому привыкнете.
$tablet: 768px;
$desktop: 1024px;
@mixin hero-image() {
.hero {
background-position: center;
background-size: cover;
background-image: url('../assets/hero-2.jpg');
@media screen and (min-width: $tablet) {
background-image: url('../assets/hero-3.jpg');
}
@media screen and (min-width: $desktop) {
background-image: url('../assets/hero-1.jpg');
}
}
}
@include hero-image();
Вам все равно придется написать свойство background-image
3 раза. То, как вы это делали, было близко, но вам пришлось бы @include modifier()
3 раза использовать ваш файл scss. В конце дня SASS компилируется в CSS. Вы можете потенциально использовать функцию SASS или For Loop для достижения этой цели, но миксины могут быть действительно сложными и мощными, но также невероятно трудными для чтения и понимания. Вот какой миксин, который я только что показал, компилируется в CSS.
.hero {
background-position: center;
background-size: cover;
background-image: url("../assets/hero-2.jpg");
}
@media screen and (min-width: 768px) {
.hero {
background-image: url("../assets/hero-3.jpg");
}
}
@media screen and (min-width: 1024px) {
.hero {
background-image: url("../assets/hero-1.jpg");
}
}
Я рекомендую поместить ваш SCSS / SASS в этот компилятор, чтобы увидеть ваши результаты перед компиляцией вашего фактического проекта.
https://www.sassmeister.com/
Даже если вы повторяете фоновое изображение 3 раза внутри миксина, это все еще СУХОЙ код, потому что вы можете включать этот миксины везде, где будут отображаться ваши изображения, и если вам нужно отредактировать его, вы можете отредактировать его в одном месте.