Ответ 1
Причина, по которой вы не можете получить интервал для работы со смарт-макетом, заключается в том, что интеллектуальный макет просто не поддерживает интервалы. Интервал только влияет на горизонтальные и вертикальные макеты.
Тем не менее, вы можете добавить поддержку самостоятельно, если хотите скопировать код компаса. Вам нужно будет заменить метод calculate_smart_positions
в файле layout_methods.rb
, который можно найти в lib/compass/sass_extensions/sprites/layout_methods.rb
(относительно каталога установки компаса).
Обновленный метод должен выглядеть следующим образом:
def calculate_smart_positions
fitter = ::Compass::SassExtensions::Sprites::RowFitter.new(@images)
current_y = 0
width = 0
height = 0
last_row_spacing = 9999
fitter.fit!.each do |row|
current_x = 0
row_height = 0
row.images.each_with_index do |image, index|
extra_y = [image.spacing - last_row_spacing,0].max
if index > 0
last_image = row.images[index-1]
current_x += [image.spacing, last_image.spacing].max
end
image.left = current_x
image.top = current_y + extra_y
current_x += image.width
width = [width, current_x].max
row_height = [row_height, extra_y+image.height+image.spacing].max
end
current_y += row.height
height = [height,current_y].max
last_row_spacing = row_height - row.height
current_y += last_row_spacing
end
@width = width
@height = height
end
Обратите внимание, что это иногда может не создавать оптимальный макет, поскольку он применяет только интервал после того, как алгоритм подгонки строк уже решил, как спрайты делятся на строки. Надеюсь, это должно быть достаточно хорошо для большинства случаев.
Я должен также упомянуть, что у меня есть необходимое программирование нулевого опыта в ruby, так что это может быть очень плохо написанный код. Кажется, он работает.