Il motivo per cui non è possibile ottenere la spaziatura per lavorare con il layout intelligente è perché il layout intelligente semplicemente non supporta la spaziatura. La spaziatura ha solo effetti sui layout orizzontale e verticale.
Detto questo, è possibile aggiungere supporto autonomamente se si è disposti a applicare il codice della bussola. Dovrai sostituire il metodo nel file layout_methods.rb
, che può essere trovato a lib/compass/sass_extensions/sprites/layout_methods.rb
(relativo alla directory di installazione della bussola).
Il metodo aggiornato dovrebbe essere simile a questo:
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
Si noti che questo a volte potrebbe non produrre un layout ottimale, perché è solo applicando la spaziatura dopo l'algoritmo di raccordo fila ha già deciso come gli sprite sono divisi in filari. Spero che dovrebbe essere abbastanza buono per la maggior parte dei casi però.
Devo anche menzionare che non ho assolutamente nessuna esperienza di programmazione in ruby, quindi questo potrebbe essere un codice estremamente mal scritto. Sembra funzionare comunque.
fonte
2013-06-01 15:54:12
quando si utilizza il layout intelligente, la spaziatura non può essere impostato. – agustibr