2015-12-11 3 views
0

Я использую AngleSharp для анализа некоторых файлов CSS, сравнения их структуры и создания выходного файла из них. Инструмент делает все заявления явными, то есть, если правило источника:Как скомбинировать несколько объявлений CSS с сокращением

.recent-work-wrap .overlay { 
    padding: 15px; 
} 

я получаю следующий выход из AngleSharp:

.recent-work-wrap .overlay { 
    padding-top: 15px; 
    padding-right: 15px; 
    padding-bottom: 15px; 
    padding-left: 15px; 
} 

Это хорошо для сравнения правил и выявления изменений, но вопрос в том, как это правило можно объединить с сокращением, как указано выше?

Так как еще один пример, как получить от этого:

.sample-rule { 
     margin-right: auto; 
     margin-left: auto; 
     margin-top: 30px; 
     margin-bottom: 30px; 
    } 

к этому

.sample-rule { 
     margin: 30px auto; 
    } 

Ситуация ухудшается с декларациями CSS3, потому что они действительно могут иметь много параметров .. Я проверил некоторые инструменты minifier/uglifier CSS, но они в основном используют RegEx для удаления пробелов и меньших оптимизаций. Существует ли известный способ/инструмент/библиотека для написания оптимальных сокращений из нескольких деклараций?

ответ

1

Как получить этот выход? Пробовали ли вы просмотреть сокращенные объявления (например, Margin) объекта Style?

Внутри, AngleSharp использует только объявления с длинными руками, поэтому выход такой же подробный, как и может быть. Тем не менее, AngleSharp знает большинство сокращений и должен иметь возможность рекомбинировать эти длинные полосы в их сокращенную форму.

Я не знаю, поможет ли это вам уже. Если нет, то, пожалуйста, напишите какой-то код (MWE), и я попытаюсь уточнить этот ответ.

+0

Я попытаюсь построить минимальный пример. Но в основном, я повторяю правила в ICssStyleSheet и сохраняя/создавая вывод для каждого правила. Итак, что вы говорите, я мог бы создавать правила программным способом (не разбирать строку CSS) в AngleScript и получать сокращенный код, вызывая 'ToCss()'? – gpinkas

+0

Несколько, да. Обычно 'ToCss()' уже должен пытаться получить сокращенные обозначения (если это возможно), однако вы можете принудительно выполнить это представление, вызвав стенографические объявления напрямую (см. Выше пример с «Margin», который является сокращением для «MarginTop», «MarginBottom» и т. Д., Отражающие соответствующую декларацию CSS «margin-top», ...). –

+0

Это прекрасно работает, AngleSharp просто УДИВИТЕЛЬНО! :) Я не уверен, что эти «начальные» значения верны. – gpinkas

Смежные вопросы