background-blend-mode
для простого оттенка Вы можете использовать свойство background-blend-mode
css:
.background-tint {
background-color: rgba(200,100,0,.5); // Tint color
background-blend-mode: multiply;
}
Поместить его на любой элемент с фоном изображение, и вы готовы идти.
Это свойство хорошо поддерживается в современных браузерах , НЕ , включая IE latest и Edge (состояние предварительного просмотра можно включить с флагом). Для не поддерживающих браузеров вы можете использовать polyfill .
.background-tint {
background-image:
linear-gradient( rgba(0,0,0,.5), rgba(0,0,0,.5) ),
url('http://placehold.it/420')
}
Я думаю, что это наиболее широко используемая техника, но у нее есть и обратная сторона: она жестко закодирована, т. Е. Нельзя просто взять урок, прикрепить его к элементу и сделать оттенок.
Вы могли бы сделать это в менее или дерзкий миксин, что-то вроде:
less
.background-tint(@tint-color, @image-url) {
background-image:
linear-gradient( @tint-color, @tint-color ),
url( @image-url )
}
sass
@mixin background-tint($tint_color, $image_url) {
background-image:
linear-gradient( $tint_color, $tint_color ),
url( $image_url )
}
.background-tint { position: relative; }
.background-tint::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,.5);
}
Этот метод имеет преимущество работы на большинство браузеров и это просто хороший класс, который вы добавляете к любому элементу. Недостатком является то, что если у вас есть что-то еще внутри этого элемента, вам придется обернуть его в div с некоторым видом позиционирования position: relative
, который будет работать лучше всего.
Пример:
Some text here
.u-relative { position: relative; }
Это распространенная проблема. У Microsoft есть некоторые рекомендации по именам параметров , но они не очень полезны в вашем случае.
Как упоминали другие респонденты, вы не можете «отключить» поведение разрешения области видимости языка C # - ваш лучший подход - это соглашения об именах. Другие упоминали «венгерскую» нотацию - у некоторых людей реакция на это коленным рефлексом из-за путаницы с первоначальным намерением обозначения.
Мой личный подход заключался в использовании символа « p 'как префикс к именам параметров публичных функций. Он ненавязчивый, простой, легко узнаваемый, и легко реализовать с помощью таких инструментов, как Resharper .
Конкретное соглашение об именах, которое вы выбираете, зависит от ваших предпочтений и стиля; однако есть некоторая выгода от согласованности в выбранной вами практике.
Используя предложенное мной соглашение об именах, вы должны написать свой конструктор по адресу:
class Foo
{
public Foo(bool pIsAction)
{
this.IsAction = pIsAction;
}
public bool IsAction { get; private set; }
}
Я только что попробовал ваш код в Visual Studio 2008. Включение встроенного статического анализа приводит к следующей ошибке:
Предупреждение 3 CA1801: Microsoft.Usage: Параметр isAction of 'Foo.Foo (bool)' никогда не используется. удалять параметр или используйте его в методе body.
Я предлагаю, включив это, вы обнаружите подобные ошибки на раннем этапе. Чтобы включить это, выберите свойства в контекстном меню проекта, затем выберите вкладку «Анализ кода» и выберите «Включить анализ кода при сборке»
FxCop будет жаловаться на это, потому что параметр isAction никогда не используется. В частности, он извлечет правило CA1801: ReviewUnusedParameters.
Лично я всегда считал, что компилятор C # должен выдавать предупреждение о неиспользуемых параметрах.
Это меня постоянно. Я начал добавлять переменные, передаваемые в конструктор, с помощью символа «_», например:
class Foo
{
public Foo(bool _isAction)
{
this.IsAction = _isAction;
}
public bool IsAction { get; private set; }}
Вы всегда можете вернуться к венгерской нотации [Я готовлюсь к огорчению, когда набираю это]. Если вы сможете справиться с уродством, это решит вашу проблему. Это предложение, а не рекомендация.
С другой стороны, я чертовски уверен, что статический анализ кода поймает это и предупредит вас об этом. Попробуйте FxCop.
РЕДАКТИРОВАТЬ
Я использую Resharper уже больше года и знаю, что он очень умен, помогая вам с учетом регистра. Помимо других преимуществ, ваша проблема с intellisense будет решена путем установки Resharper.
РЕДАКТИРОВАТЬ 2
Я только что проверил. Ни FxCop, ни Resharper напрямую эту ошибку не обнаруживают. Что оба улавливают, так это то, что параметр isAction не используется в методе Foo. В этом случае предупреждение укажет вам на ошибку.
Боюсь, что нет способа отключить функцию «неявное это
». Это часть спецификации языка и компилятора, и отключить его невозможно.
Лично я не считаю это большой проблемой. По общему признанию, важно быть осторожным с использованием заглавных букв в именах элементов и параметров, но это всегда происходит в языке с учетом регистра, таком как C #.
Мое рекомендуемое «решение» (которое вы, похоже, уже делаете) всегда использовать ключевое слово this
для ссылки на свойства / поля, чтобы оно сразу выделялось, когда вам следует использовать параметр. Это не решит проблему для вас, но если вы будете помнить об этом, это, несомненно, поможет.
Примечание:
Если вы используете Resharper, у вас есть несколько ярлыков, которые записывают большую часть этого кода за вас и позволяют избежать ошибки.
Вы можете либо сначала создать свойство, затем нажать Alt-Ins и выбрать «сгенерировать конструктор», либо вы можете добавить параметр «isAction» в конструктор, нажать Alt-Enter с кареткой в параметре Имя параметра и выбрать Действие «Создать и инициализировать автоматическое свойство IsAction» во всплывающем меню.
Это может раздражать в других возможностях, но вы можете отключить параметр, чтобы Intellisense заранее выбирал последний использованный элемент. Я понимаю, что это не решит проблему сразу, но, возможно, поможет предотвратить некоторые случайные вкладки, когда вы действительно не выбрали нужный элемент.
Я думаю, что более вероятно, что разработчик выбрал «IsAction» вместо «isAction» из Intellisense. Я не думаю, что Intellisense изменит "isA" на "this.IsAction".
Если имена различаются только регистром, то я думаю, что единственный способ предотвратить подобные ошибки - это осознавать их и осторожно, а также эффективное использование модульных тестов.
Это неприятная проблема в intellisense Visual Studio. Resharper в большинстве случаев понимает это правильно.