Подтвердить что ты не робот

Visual Studio (2012 и ниже) удаляет свойства CSS

У меня действительно странная проблема с Visual Studio 2010. Когда я добавляю CSS-свойства для градиента в мою таблицу стилей, Visual Studio собирается удалить его после некоторых отладок.

Пример кода, который я добавляю в таблицу стилей:

.button
{
    /* Firefox */
    background-image: -moz-linear-gradient(top, #fff, #efefef);
    /* Chrome, Safari */
    background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #fff),color-stop(1, #efefef));
    /* Modern Browsers*/
    background-image: linear-gradient(top, #fff, #efefef);
    /* IE */
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#efefef'); 
}

Иногда, когда я начинаю отладку, Visual Studio редактирует CSS:

.button
{
    /* Firefox */
    background-image: linear-gradient(top, #fff, #efefef);
    /* Chrome, Safari */
    /* Modern Browsers*/
    }

Итак, Visual Studio, похоже, удаляет некоторые атрибуты, которые он не знает. Это действительно раздражает. Любая идея, как я могу это остановить?

Это не проблема комментариев CSS. Это также происходит без комментариев.

Обновление

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

И проблема с НЕ для CSS3, потому что она не касается моих классов и идентификаторов границ. Возможно, это свойство фильтра. Однако я хочу, чтобы Visual Studio меняла свои вещи в файле css без прав.

Обновление 27. Июнь 2014

Проблема решена в Visual Studio 2013 https://connect.microsoft.com/VisualStudio/feedback/details/782677/visual-studio-is-deleting-css

4b9b3361

Ответ 1

Хорошо, я нашел временное решение для этого:

Существование стиля "filter:" - это то, что приводит к исчезновению всех стилей "background-image:", кроме последнего. Это не то, что он удаляет то, что он не делает знаете, он просто удаляет все, кроме последнего стиля "фонового изображения". Должен быть Microsoft (предполагаемый) способ сделать фильтр, а стиль специфического фонового изображения MS хорошо сочетается вместе, однако они не очень хорошо его кодировали. Определенно дефект MS VS. Для воспроизведения просто щелкните правой кнопкой мыши в классе CSS, у которого есть код, похожий на этот:

background-color: #EBEBEB; /* Fallback background color for non supported browsers */  
background-image: -webkit-gradient(linear, left top, right top, from(#FFFFFF), to(#DAD6E7));  
background-image: -webkit-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -moz-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -ms-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -o-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: linear-gradient(left, #FFFFFF, #DAD6E7);  
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#DAD6E7', gradientType='1'); /* IE6 - IE9 */

а затем выберите "Стиль сборки...". Затем нажмите "ОК", не меняя ничего и наблюдая, как он удаляет все, кроме последнего фонового изображения. Попробуйте изменить порядок "стилей фонового изображения" и оставить webkit последним, а затем просмотреть сами.

Вы заметите, что если вы удалите стиль "filter:" , проблема исчезнет, ​​однако нам нужно это (для этого примера), поэтому решение, похоже, перемещает стиль "filter:" , прежде всего Строки "background-image:". Как только вы это сделаете, он оставит их в покое, и проблема исчезнет.

Изменение вышеуказанного CSS для этого, похоже, облегчает проблему:

filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#DAD6E7', gradientType='1'); /* IE6 - IE9 */
background-color: #EBEBEB; /* Fallback background color for non supported browsers */  
background-image: -webkit-gradient(linear, left top, right top, from(#FFFFFF), to(#DAD6E7));  
background-image: -webkit-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -moz-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -ms-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: -o-linear-gradient(left, #FFFFFF, #DAD6E7);  
background-image: linear-gradient(left, #FFFFFF, #DAD6E7);  

UPDATE: Обходной путь выше работает только тогда, когда VS применяет форматирование, когда вы используете диалог "Стиль сборки..." → "Изменить стиль", потому что я просто видел его снова с исправлением выше на месте, так что это должно быть от чего-то еще.

Ответ 2

Градиенты - это свойства CSS3.

Visual Studio не поддерживает CSS3 и HTML5, и это может быть проблемой здесь. Но есть поддержка HTML5 и CSS3 в Visual Studio 2010 SP1
Итак, почему бы вам не загрузить Visual Studio 2010 SP1 и попробовать?

Ответ 3

В Visual Studio попробуйте: Инструменты > Параметры > Текстовый редактоp > CSS > Разное отключить Обнаружение ошибок. Я сделал это и, используя файл с вашим примером выше, запустил решение, закрыл файл, закрыл решение, и мой код все еще там: -)

Ответ 4

Я тоже столкнулся с этой проблемой в VS2010 и могу подтвердить, что проблема не влияет на стили CSS3. Единственная работа, которую я могу предложить, - это разместить копию исчезающей строки над собой в комментарии, так что, по крайней мере, ее легко скопировать обратно.

/* filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#efefef'); */
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#efefef');

Ответ 5

У меня нет Visual Studio для проверки этого, но, читая информацию из других комментариев и ответов, кажется, что вы можете полностью отделить filter от повторного выбора селектора. Например:

.someClass {
  background-color: #EBEBEB; /* Fallback background color for non supported browsers */  
  background-image: -webkit-gradient(linear, left top, right top, from(#FFFFFF), to(#DAD6E7));  
  background-image: -webkit-linear-gradient(left, #FFFFFF, #DAD6E7);  
  background-image: -moz-linear-gradient(left, #FFFFFF, #DAD6E7);  
  background-image: -ms-linear-gradient(left, #FFFFFF, #DAD6E7);  
  background-image: -o-linear-gradient(left, #FFFFFF, #DAD6E7);  
  background-image: linear-gradient(left, #FFFFFF, #DAD6E7);  
}

.someClass { /* repeated to isolate filter */
  filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#DAD6E7', gradientType='1'); /* IE6 - IE9 */
}

Это настоящая боль, но если она решает вашу проблему, пока MS не выработает ошибку...

Ответ 6

У меня была точно такая же проблема!

У меня были установленные инструменты IDE DevX, и удаление, похоже, решило проблему для меня. Я сделал это несколько дней назад, и проблема не возникла.

Ответ 7

Я понимаю, что это более старый поток, но у меня все еще есть одна и та же проблема.

Я еще не нашел, как предотвратить это, но есть намного более простой способ исправить CSS-обход:

Как только вы заметите, что VS2010 испортил код CSS, остановите отладку, перейдите на вкладку "Файл CSS" и нажмите кнопку отмены. Ваш код Css возвращается до того, как VS2010 испортил его. Скомпилируйте и он работает.

Я собираюсь попробовать VS2012 в ближайшее время, кто-нибудь знает, если он был там решен?