рдлреБрдЧ-рдЖрдЗрдХреЙрди - рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рд░рд▓ рдЖрдЗрдХрди рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд┐рд▓реНрдХ рдЖрдЗрдХрдиреНрд╕ рд╕реВрдЯ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдкрд░реНрдпрд╛рдкреНрдд рдЖрдЗрдХрди рдирд╣реАрдВ рдереЗ, рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реА рдкрд╕рдВрдж Fugue Icons рдереА ред рдореИрдВрдиреЗ Google рдХреЛ CSS рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦреЛрдЬрд╛ рдФрд░ рджреЛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗред рдкрд╣рд▓рд╛: рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдХрди рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред рддреБрд░рдВрдд рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдмрд╣реБрдд рдЦрд░рд╛рдм рджрд┐рдЦрддрд╛ рд╣реИред рджреВрд╕рд░рд╛: рд╕реНрдкреНрд░рд╛рдЗрдЯ рдФрд░ рдПрдХ рдПрдХрд▓ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреАрдПрдирдЬреАред рдкреВрд░реА рдЪреАрдЬ рдХрд╛ рд╡рдЬрди 1.4 рдПрдордмреА рдерд╛, рдЬреЛ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдФрд╕рдд рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд░рдиреЗ рдФрд░ рдЦреБрдж рдЗрд╕рдХреЗ рд▓рд┐рдП CSS рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рд╕рд╛рдЗрдЯ рдкрд░ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдФрд░ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИред рд╣рдо рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрдЗрдХрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдВред

рд╕реНрд░реЛрдд (mkicons.py) рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде:

#!/usr/bin/env python #  .    PIL import Image import glob import os ICON_WIDTH, ICON_HEIGHT = 16, 16 #    (      ). OUTPUT_DIR_NAME = 'sprite' #,       OUTPUT_SPRITE_PNG = 'sprite.png' #    OUTPUT_SPRITE_CSS = 'sprite.css' # CSS- OUTPUT_SPRITE_HTML = 'test.html' # HTML-    CSS_SPRITE_TEMPLATE = '.fg_%s{background-position:0px %spx}' #     CSS #      HTML HTML_SPRITE_TEMPLATE = '''<span class="fg_sprite fg_%(spritename)s "></span> <input type="text" value=\'<span class="fg_sprite fg_%(spritename)s"> </span>\'><br /> ''' #  CSS-.      CSS_CONTENT=''' .fg_sprite{ display:inline; overflow:hidden; background-repeat:no-repeat; background-image:url('../img/%s'); height:16px; width:16px; overflow:hidden; margin:-2px 3px 3px 0; padding: 0px; display:-moz-inline-box;display:inline-block; vertical-align:middle; } ''' % OUTPUT_SPRITE_PNG #  png-   #  HTML-.  <body>  </body>      HTML_CONTENT = ''' <html><style>input{width:400px;}</style><head><link href="css/sprite.less" rel="stylesheet" type="text/css" /> </head><body>%s</body></html> ''' pngs = glob.glob('*.png') + glob.glob('*.PNG') #      sprite_height = len(pngs)*ICON_HEIGHT #     sprite = Image.new('RGBA', (ICON_WIDTH, sprite_height),(0,0,0,0)) #    .      html_include='' # HTML   #    . for idx,png in enumerate(pngs): icon = Image.open(png) #  offset = ICON_HEIGHT * idx #      sprite.paste(icon,(0, offset)) #     spritename=png.replace('.png','').replace('.PNG','').replace('--','-') # CSS -      CSS_CONTENT+=CSS_SPRITE_TEMPLATE % (spritename,-offset) #  CSS     html_include+=HTML_SPRITE_TEMPLATE % {'spritename':spritename} #  HTML #    ,     if not os.path.exists(OUTPUT_DIR_NAME): os.makedirs(OUTPUT_DIR_NAME) if not os.path.exists(os.path.join(OUTPUT_DIR_NAME, 'img')): os.makedirs(os.path.join(OUTPUT_DIR_NAME, 'img')) if not os.path.exists(os.path.join(OUTPUT_DIR_NAME, 'css')): os.makedirs(os.path.join(OUTPUT_DIR_NAME, 'css')) #   sprite.save(os.path.join(OUTPUT_DIR_NAME, 'img', OUTPUT_SPRITE_PNG),'PNG') cssfile = open(os.path.join(OUTPUT_DIR_NAME, 'css', OUTPUT_SPRITE_CSS),'w') cssfile.write(CSS_CONTENT) cssfile.close() htmlfile = open(os.path.join(OUTPUT_DIR_NAME, OUTPUT_SPRITE_HTML),'w') htmlfile.write(HTML_CONTENT % html_include) htmlfile.close() 


рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
  1. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ
  2. рд╣рдо mkicons.py рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╣рд╛рдБ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ (рдКрдкрд░ рд╕реНрд░реЛрдд)
  3. рдФрд░ рд╕реЗрдЯ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрдЗрдХрди
  4. "рдЕрдЬрдЧрд░ mkicons.py" рдЪрд▓рд╛рдПрдВ
  5. рд╣рдо рд╕реНрдкреНрд░рд╛рдЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рддреИрдпрд╛рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдард╛рддреЗ рд╣реИрдВ
  6. рдЖрдЗрдХрди рдХреЛрдб рджреЗрдЦрдиреЗ рдФрд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, test.html рдЦреЛрд▓реЗрдВ

test.html рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЫрд╡рд┐

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ Django рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдФрд░ рдЪрд┐рдкрдХрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ django-static рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдмрд╕ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП STATICFILES_DIRS рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдФрд░ рдлрд┐рд░ рднреА, рдЕрдЧрд░ рдХреЛрдИ рдХрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

 OUTPUT_SPRITE_CSS = 'sprite.css' 


рд▓рд┐рдЦреЗрдВ:

 OUTPUT_SPRITE_CSS = 'sprite.less' 


рдФрд░ рдлрд┐рд░ рд╣рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

 @import "/path/to/fg-icons/sprite/css/sprite.less"; 


рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In129546/


All Articles