Программно разделите таблицу стилей на подтаблицы стилей?

Честно говоря, я понимаю закрытия отлично кроме, я никогда не соглашался с тем, что точно является вещью, которая является "закрытием" и что является так "закрытием" об этом. Я рекомендую бросить искать любую логику позади выбора термина.

Так или иначе, вот мое объяснение:

def foo():
   x = 3
   def bar():
      print x
   x = 5
   return bar

bar = foo()
bar()   # print 5

идея ключа А здесь состоит в том, что функциональный объект, возвращенный из нечто, сохраняет рычаг к локальному var 'x' даже при том, что 'x' вышел из объема и должен быть более не существующим. Этот рычаг к самому var, не только значение, которое var имел в то время, поэтому когда панель называют, это печатает 5, не 3.

Также быть ясным, что Python 2.x ограничил закрытие: нет никакого способа, которым я могу изменить 'x' в 'панели', потому что запись 'x = bla' объявила бы локальный 'x' в панели, не присвоилась бы к 'x' нечто. Это - побочный эффект assignment=declaration Python. Для обхождения этого Python 3.0 представляет нелокальное ключевое слово:

def foo():
   x = 3
   def bar():
      print x
   def ack():
      nonlocal x
      x = 7
   x = 5
   return (bar, ack)

bar, ack = foo()
ack()   # modify x of the call to foo
bar()   # print 7
14
задан Cœur 3 July 2017 в 18:09
поделиться

11 ответов

Это должно помочь вам начать:

#!/usr/bin/env python
import cssutils

PATH_TO_CSS_FILE = 'old_huge_css_file.css'

LAYOUT = ('display', 'width', 'height', 'margin', 'padding',
          'position', 'top', 'left', 'bottom', 'right')
COLOR = ('color', 'background', 'border', 'background-color')
FONTS = ('font', 'font-size')

def strip_styles(infile_path, outfile_path, properties_to_keep):
    stylesheet = cssutils.parseFile(infile_path)

    for rule in stylesheet:
        if not rule.type == rule.STYLE_RULE:
            continue

        [ rule.style.removeProperty(p) for p in rule.style.keys() 
            if not p in properties_to_keep ]

    f = open(outfile_path, 'w')
    f.write(stylesheet.cssText)
    f.close()

segments = (
    ('layout.css', LAYOUT),
    ('color.css', COLOR),
    ('fonts.css', FONTS),
)

for segment in segments:
    strip_styles(PATH_TO_CSS_FILE, *segment)

Вам понадобится CssUtils

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

примечание : все комментарии будут оставлены в таблице стилей, даже если многие из них не будут относиться к разделенным стилям.

Кроме того, все стили не перечислены в переменных LAYOUT , COLOR и FONTS вверху будет отфильтрована.

Вы можете легко изменить функцию strip_styles , чтобы отфильтровать стили в этих трех переменных, чтобы создать 4-ю таблицу стилей, содержащую все разное. свойства, если вам нравится

5
ответ дан 1 December 2019 в 08:53
поделиться

Брось свой. Правильный CSS не должен быть очень сложным для синтаксического анализа.

  • Разделите весь файл на }
  • В каждом из них, то, что идет до {, - это селектор
  • Разделить то, что идет после { по ; , чтобы получить каждое отдельное правило для каждого селектора
  • Оценить каждое правило и соответствующим образом построить свои файлы

Полу-псевдо-код VB.NET ...

 Dim CssFile as String = System.IO.File.ReadAllText("MyFile.css")
 Dim CssRules as String() = CssFile.Split("}")

 For Each Rule as String in CssRules
     Dim Selector as String = Rule.Substring(0, Rule.IndexOf("{")).Trim();
     Dim Styles as String() = Rule.Substring(Rule.IndexOf("{") + 1).Trim().Split(";");

     For Each Style as String in Styles
         If Style.StartsWith("font") Then 
              ' Build your files... yada, yada, yada
         End If
     Next
 Next
7
ответ дан 1 December 2019 в 08:53
поделиться

I don't know of any methods that will separate out your css automatically, but the Blueprint CSS framework has this already broken out for you & in times past I've just plugged in my styles where needed & it took care of all the misc browser differences.

www.blueprintcss.org

2
ответ дан 1 December 2019 в 08:53
поделиться

Похоже на полезный инструмент, я думал, что он уже существует, но ничего не нашел.

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

Быстрый поиск обнаруживает несколько библиотек в .NET, Java, Ruby и т. Д. На StackOverflow есть даже вопросы по этому поводу.

1149554]

0
ответ дан 1 December 2019 в 08:53
поделиться

За последние месяцы я сделал два больших проекта с несколькими стилями.

В одном случае на странице были разные цвета и стили. В другом случае некоторые цвета и изображения были другими для целевых групп.

Я создал таблицу стилей main.css , которая содержала позиционирование, шрифты по умолчанию, интервалы и все остальное, что вы ожидаете от таблицы стилей. Затем для каждой целевой группы я создал дополнительную таблицу стилей, содержащую определенные цвета, шрифты и (фоновые) изображения.

В вашем случае, создавая структуру, я бы, по крайней мере, предложил следующие компоненты:

  • Reset
  • Main
  • Типографика

Следует помнить о количестве HTTP-запросов, которые вы делаете, вызывая другие таблицы стилей. По возможности используйте как можно меньше таблиц стилей.

  • Сброс
  • Main
  • Типография

Следует помнить о количестве HTTP-запросов, которые вы делаете, вызывая другие таблицы стилей. По возможности используйте как можно меньше таблиц стилей.

  • Сброс
  • Main
  • Типография

Следует помнить о количестве HTTP-запросов, которые вы делаете, вызывая другие таблицы стилей. По возможности используйте как можно меньше таблиц стилей.

-1
ответ дан 1 December 2019 в 08:53
поделиться

Вот как бы я это сделал:

  1. Скопируйте вашу большую таблицу стилей в 3 файла.
  2. Откройте каждый и удалите ненужные стили.

Для шага 2, вы можете сэкономить много времени, используя поиск / замену в редакторе, таком как Notepad ++. Например, в layout.css вы можете выполнить поиск по регулярному выражению для ^. * Background:. + $ и ничего не заменить. (Затем в конце удалите все пустые строки.)

Теоретически вы сможете уменьшить это количество до пары регулярных выражений на файл, но Notepad ++, похоже, не любит вертикальную черту или круглые скобки в этом отношении. ^. * Background (-color | -image)?:. + $ должно работать, но это не так.

Это не программно, но TBH к тому времени, когда вы написали ваш собственный код, чтобы делать то, что вы

9
ответ дан 1 December 2019 в 08:53
поделиться

У вас есть grep в командной строке? Вы заботитесь о комментариях в выводе? Можете ли вы сделать первый проход, чтобы очистить форматирование? Например, в выбранном вами редакторе убедитесь, что за {, } и ; следует новая строка. Тогда это может вас закрыть:

grep -i '[{]\|[}]\|background\|border\|color' source.css > color.css
grep -i '[{]\|[}]\|font\|letter\|line-height' source.css > font.css
grep -v 'background\|border\|color\|font\|letter\|line-height' source.css > layout.css

Вам придется внести изменения, если вы не хотите использовать какие-либо из следующих тегов в layout.css: outline - * , text- * , пробел , межсловный интервал . Это если ваш CSS использует их. Я бы также быстро посмотрел, какие теги вы на самом деле используете. Например,

grep -v '[{]\|[}]' test2.css | sed -e 's/:.*$//g' | sort -u
7
ответ дан 1 December 2019 в 08:53
поделиться

Действительно легко создать собственный сценарий. Здесь библиотека для css на Ruby, я уверен, что вы сможете найти ее на любой платформе, которую используете

0
ответ дан 1 December 2019 в 08:53
поделиться

Самая простая часть - это синтаксический анализ CSS. Сложная часть - это классификация различных директив CSS и предвидение сокращенных селекторов CSS.

CSSTidy может быть билетом с некоторыми изменениями. Он не только анализирует CSS, но и по возможности объединяет свойства CSS:

http://csstidy.sourceforge.net/download.php

4
ответ дан 1 December 2019 в 08:53
поделиться
* Split the entire file by }
* In each of those, what comes before the { is the selector
* Split what comes after { by ; to get each individual rule for each selector
* Evaluate each rule and build your files accordingly
0
ответ дан 1 December 2019 в 08:53
поделиться

Задумывались ли вы об использовании программы, которая позаботится о CSS, вместо того, чтобы вручную просматривать и редактировать все это самостоятельно? Недавно я начал использовать стилизатор , и я впечатлен всеми функциями, которые он имеет (даже в бесплатной версии). Хотя, насколько я могу судить, он не разделит файлы CSS так, как вы хотите.

-2
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: