Jump to content
  • 0

SASS. Миксин медиазапросов, избыточный код


anvyd
 Share

Question

Решил освоить SASS, очень мне нравится его идея, большое коммьюнити, все нравится, но столкнулся с проблемой, собственно ниже и опишу.
Хочу сделать миксин медиазапросов
есть 4 переменные, в них описаны размеры экрана, и создан несложный миксин.

$screen_xs: 320px;$screen_s:  768px;$screen_m:  1024px;$screen_l:  1200px;$screen_xl: 1376px;@mixin mediaquery($media) { @if $media == screen_s {  @media only screen and (max-width: $screen_s + 1) { @content; } } @else if $media == screen_m {  @media only screen and (min-width: $screen_m + 1){ @content; } } @else if $media == screen_l {  @media only screen and (min-width: $screen_l + 1) { @content; } } @else if $media == screen_xl {  @media only screen and (min-width: $screen_xl + 1) { @content; } }}

дальше я этот миксин подключаю, например, к боди, пример абстрактный.
 

body{ background: $blue_grey; @include mediaquery(screen_s)  { background: $lime;} @include mediaquery(screen_m)  { background: $teal;} @include mediaquery(screen_l)  { background: $orange;} @include mediaquery(screen_xl) { background: $pink;} color: $color_base; font-family: $font_base; @include flexbox; @include flex-direction(column); min-height: 100vh;}

суть такая, что фон меняется в зависимости от разрешения. НА выходе мы имеем 
 

// outputbody {  background: #607D8B;  color: #cccccc;  font-family: "Proxima Nova", Tahoma, helvetica, sans-serif;  display: -webkit-box;  display: -moz-box;  display: -ms-flexbox;  display: -webkit-flex;  display: flex;  -webkit-flex-direction: vertical;  -moz-flex-direction: vertical;  -ms-flex-direction: column;  -webkit-flex-direction: column;  flex-direction: column;  min-height: 100vh;}@media only screen and (max-width: 769px) {  body {background: #CDDC39;}}@media only screen and (min-width: 1025px) {  body {background: #009688;}}@media only screen and (min-width: 1201px) {  body {background: #FF9800;}}@media only screen and (min-width: 1377px) {  body {background: #E91E63;}}

Казалось бы этого я и ждал, так и есть, результат достигнут, но теперь у меня есть другой элемент, который я хочу видоизменять в зависимости от экрана, и пишу следующее
 

.size:after{ content: "Size XS"; @include mediaquery(screen_s)  { content: "Size S";} @include mediaquery(screen_m)  { content: "Size M";} @include mediaquery(screen_l)  { content: "Size L";} @include mediaquery(screen_xl) { content: "Size XL";}}

Код несложный, есть блок, я в псевдоэлементе :after меняю слова в зависимости от разрешения.
Собственно тут я и сталкиваюсь с проблемой избыточности, у меня дублируется код. На выходе я получаю ОТДЕЛЬНЫЕ медиазапросы 

// output.size:after {content: "Size XS";}@media only screen and (max-width: 769px) { .size:after {content: "Size S";}}@media only screen and (min-width: 1025px) { .size:after {content: "Size M";}}@media only screen and (min-width: 1201px) { .size:after {content: "Size L";}}@media only screen and (min-width: 1377px) { .size:after {content: "Size XL";}}

так как же мне избавиться от этой избыточности? делать как и раньше в отдельном месте прописывать разрешение и в него вставлять все элементы, стили которых необходимо менять? но тогда пропадает прелесть использования SASS

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Можно скомбинировать.

Вот, например, модуль для «ноды» https://www.npmjs.com/package/group-css-media-queries

 

Или для систем сборки

https://www.npmjs.com/package/gulp-combine-media-queries

https://www.npmjs.com/package/grunt-combine-media-queries

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By ket-verbitskaya
      Привет!
      Недавно проходила первый этап на собесе с заданием и провалила. Нужно было создать копию отправленного изображения (прикреплено). Предполагаю, что ошибка была изначально в том, что требование "Use SASS variables by changing width and background, it has to change completely, the shape must be responsive (all its parts grow or shrink respectively)" не было выполнено. Фидбека не было, к сожалению. Работа проделана была только с html css. Но быть может были допущены другие другие ошибки? Буду признательна, если кто-нибудь укажет на них.
      Код ниже и по ссылке: https://codepen.io/qizqepml-th... ls/LYeYqjX
       
      <div class="wrapper"> <div class="circle"> <div class="panel panel--1"> </div> <div class="panel panel--2"> </div> <div class="panel panel--3"> </div> <div class="panel panel--4"> </div> <div class="circle--2"> </div> </div> </div>  
      * { box-sizing: border-box; } body { background-color: #2b2b2b; } .wrapper { background-color: #2b2b2b; position: absolute; display: flex; align-items: center; justify-content: center; top: 50%; left: 50%; transform: translate(-50%, -50%); } .circle { height: 29vw; width: 29vw; border-radius: 50%; position: absolute; transform: rotateZ(25deg); background-color: #333333; } .panel { height: 17.5vw; width: 17.5vw; border-radius: 50%; border: 1.5vw solid #f14100; } .panel--1 { float: left; position: absolute; } .panel--2 { float: right; position: relative; } .panel--3 { bottom: 0; position: absolute; } .panel--4 { bottom: 0; right: 0; position: absolute; } .circle--2 { border: 1.5vw solid #f14100; position: relative; border-radius: 50%; height: 25vw; width: 25vw; top: 50%; left: 50%; margin-right: -50%; transform: translate(-50%, -50%); outline: 10vw solid #2b2b2b; }  

    • By yeldos23
      Всем привет народ! Очень надеюсь на вашу помощь! Дело в том что я создавал сайты по видео урокам некого Михаила Базарова. Вот собственно его видео уроки https://camouf.ru/video/new_store/phpstorm.html?PAGEN_2=2
      Теперь конкретно о проблеме: Дело в том, что данный человек использует bootstrap и sass. Он компилирует все стили в сжатый css. В этом то и проблема. У меня не компилируется, а стили на сайте не работают.
      Что я сделал: установил Ruby, прописал в командной строке gem install sass, успешно установился. Перезагрузил компьютер и подключился к своему удаленному серверу через PhpStorm. Обмен между локальным и удаленным сервером идет успешно. Но на сайте не работают стили прописанные в sass
      Скрин https://imgur.com/a/vV6QZBV
       
      UPD: Оказалось что путь к файлам неверный, мог бы кто нибудь помочь настроить?
    • By azaqwerty
      Здравствуйте! Не могу сделать импорт в sass. Не могу понять в чем дело? По урокам делал, как все показывали, но не выходит! Импорт для оптимизаций и адаптаций сайта 




    • By VeraVostro
      Заранее прошу прощения если этот вопрос уже задавался, но, несмотря на обширное кол-во информации по теме, найти ответа на свой вопрос я не смогла.

      Суть в следующем:
      Например, у меня есть два отдельных scss файла - header.scss и footer.scss. Стили футера почти полностью совпадают со стилями хедера, за исключением пары свойств.
      Но если я прописываю в файле footer.scss @extend header - стили хедера не могут использоваться, т.к. это другой файл.

      Подскажите, как идеологически вернее делать в данной ситуации? Чтобы новый класс/элемент получал стили существующего класса из другого файла + добавлял свои или менял некоторые стили на свои.
    • By Владимир Горинов
      Первый вопрос: - Нужно ли использовать эти кроссбраузерные плюшки для стилизации placeholder'a? Не устарели ли они?
      ::-webkit-input-placeholder {color:#c0392b;} ::-moz-placeholder {color:#c0392b;}/* Firefox 19+ */ :-moz-placeholder {color:#c0392b;}/* Firefox 18- */ :-ms-input-placeholder {color:#c0392b;} Второй вопрос - Использую Sass, как правильно стилизовать placeholder? Не могу понять куда писать этот код и как правильно он оформляется в sass
      &-form margin-top: 98px &_main-form input display: block margin: 0 auto height: 67px width: 370px padding: 29px 0 29px 36px По идее он должен писаться под паддингами, но коала ругается, так как у кроссбраузерных плюшек скобки и тд
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy