Geforce gtx 970 vs 285

Float — создание плавающих элементов в CSS коде

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

Но в CSS имеются два правила, которые могут это изменить. Речь идет о float и position. Когда к тэгам не применяются эти два правила, то такой вариант называется кодом в нормальном потоке.

С помощью float мы создаем так называемые плавающие элементы. Кстати, даже в чистом Html мы уже с вами сталкивались с подобным, когда для картинок прописывали атрибут Align со значениями Left или Right (читайте про ).

Значения Left и Right как раз и позволяют создавать плавание. При этом свойства такого тега поменяются и он иначе будет взаимодействовать с другими. Давайте рассмотрим все это на примере. Возьмем один строчный тэг Span и два блочных элемента Div.

Помните, в статье про назначение height и width я говорил, что для строчных элементов эти правила работать не будут, т.е. для них нельзя задать высоту и ширину. Поэтому для демонстрации изменения свойств плавающего элемента я добавляю строчному тегу Span правила height и width, которые в обычной ситуации работать, естественно, не будут.

Все правила я буду прописывать с помощью (в профессиональной верстке этот способ практически не используется), о котором вы сможете прочитать по приведенной ссылке. Также для наглядности я подсвечу тэги фоном с помощью правила background:

Строчный
Блочный
Блочный

Теперь давайте пропишем для Span правило float со значение Left и посмотрим что из этого выйдет (для наглядности еще зададим нашему вновь испеченному плавающему блоку еще и отступ margin в 5px со всех сторон (margin:5px), чтобы было понятнее его взаимоотношение с соседними тэгами:

Наш элемент начинает плавать влево (ибо мы прописали float:left). При этом заработали ширина и высота, заданные в правилах height и width, не смотря на то, что Span изначально был строчным тегом. Кроме этого заработал и margin по высоте (отступ до соседей), который для строчных тэгов изначально был бесполезен.

Отсюда мы делаем вывод, что после прописывания float элемент стал совершенно другим и не похожим на то, чем он был до этого. Кроме этого он стал по другому взаимодействовать с другими тегами.

Способы взаимодействия зависят от того, какое значение Display для него прописано, но в основном мы будет работать с блоками (поэтому и верстка называется блочной), для которых это CSS правило имеет значение block.

Чаще всего это будет контейнер Div — идеален для построения блочной схемы, т.к. изначально имеет нулевые margin и padding, а height и width у него имеют значение Auto. Т.о. Div является структурным блоком, так же как и Span, у которого тоже все нулевое.

Но давайте вернемся к нашим баранам, а именно опишем все те изменения, которые происходят с тегом, когда к нему применяется правило Float со значением Left или Right:

  1. В не зависимости от того, каким он был до этого, он становится блочным (соответствует display:block)
  2. Не смотря на то, что он становится блочным, его размер будет определяться объемом заключенного в него контента (проявляется некоторая специфика). Т.е. если я в нашем примере уберу значение ширины плавающего контейнера (width:250px), то ширина его будет уже определяться количеством заключенного в него текста:
  3. Плавающий элемент (с float left или right) в «Margin-colloapse» не участвует, т.е. не делится с соседними элементами своими отступами.
  4. Они не замечают соседние блочные элементы (с display: block), т.е. они с ними не взаимодействуют. Это можно видеть из приведенного чуть выше скриншота, где зеленый блок (div — зеленый прямоугольник) стоит так, как будто бы плавающего Span и не существует.
  5. А вот строчные тэги (с display: inline) обтекают плавающие блоки. На приведенном чуть выше скриншоте это видно по тому, что текст заключенный в Div обтекает Span.

Пример c использованием фона для текста:

Еще один вариант сделать текст прозрачным — это наложить на него такой же фон, как и в блоке под ним (см.: Background для текста).

Прозрачный текст

HTML данного варианта:

Прозрачный текст

1
2
3

class=»background»>

class=»background-text»>Прозрачный текст

CSS данного варианта:

.background {
text-align: center;
padding: 120px 10px;
background: url(«background.jpg») top center;
}
.background-text {
padding: 10px 20px;
background: #BFE2FF;
display: inline-block;
}
.background-text span {
font-family: Tahoma, sans-serif;
font-weight: bold;
font-size: 48px;
line-height: 48px;
text-transform: uppercase;
background: url(«background.jpg») top -130px center;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

.background {

text-aligncenter;

padding120px10px;

backgroundurl(«background.jpg»)topcenter;

}

.background-text {

padding10px20px;

background#BFE2FF;

displayinline-block;

}

.background-text span {

font-familyTahoma,sans-serif;

font-weightbold;

font-size48px;

line-height48px;

text-transformuppercase;

backgroundurl(«background.jpg»)top-130pxcenter;

-webkit-background-cliptext;

-webkit-text-fill-colortransparent;

}

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

А минус в том, что текст с заданным ему фоном должен умещаться в 1 строку.

Fetch option

The option accepts a function which handles remote resource fetching, e.g.

var request =require('request');var source ='@import url(http://example.com/path/to/stylesheet.css);';newCleanCSS({fetchfunction(uri,inlineRequest,inlineTimeout,callback){request(uri,function(error,response,body){if(error){callback(error,null);}elseif(response &&response.statusCode!=200){callback(response.statusCode,null);}else{callback(null, body);}});}}).minify(source);

This option provides a convenient way of overriding the default fetching logic if it doesn’t support a particular feature, say CONNECT proxies.

Optimization levels

The option can be either , (default), or , e.g.

newCleanCSS({  level2})

or a fine-grained configuration given via a hash.

Please note that level 1 optimization options are generally safe while level 2 optimizations should be safe for most users.

Level 0 optimizations simply means «no optimizations». Use it when you’d like to inline imports and / or rebase URLs but skip everything else.

Level 1 optimizations (default) operate on single properties only, e.g. can remove units when not required, turn rgb colors to a shorter hex representation, remove comments, etc

Here is a full list of available options:

newCleanCSS({  level{1{      cleanupCharsetstrue,      normalizeUrlstrue,      optimizeBackgroundtrue,      optimizeBorderRadiustrue,      optimizeFiltertrue,      optimizeFonttrue,      optimizeFontWeighttrue,      optimizeOutlinetrue,      removeEmptytrue,      removeNegativePaddingstrue,      removeQuotestrue,      removeWhitespacetrue,      replaceMultipleZerostrue,      replaceTimeUnitstrue,      replaceZeroUnitstrue,      roundingPrecisionfalse,      selectorsSortingMethod'standard',      specialComments'all',      tidyAtRulestrue,      tidyBlockScopestrue,      tidySelectorstrue,      semicolonAfterLastPropertyfalse,transformfunction(){}}}});

There is an shortcut for toggling all options at the same time, e.g.

newCleanCSS({  level{1{      allfalse,      tidySelectorstrue}}});

Level 2 optimizations operate at rules or multiple properties level, e.g. can remove duplicate rules, remove properties redefined further down a stylesheet, or restructure rules by moving them around.

Please note that if level 2 optimizations are turned on then, unless explicitely disabled, level 1 optimizations are applied as well.

Here is a full list of available options:

newCleanCSS({  level{2{      mergeAdjacentRulestrue,      mergeIntoShorthandstrue,      mergeMediatrue,      mergeNonAdjacentRulestrue,      mergeSemanticallyfalse,      overridePropertiestrue,      removeEmptytrue,      reduceNonAdjacentRulestrue,      removeDuplicateFontRulestrue,      removeDuplicateMediaBlockstrue,      removeDuplicateRulestrue,      removeUnusedAtRulesfalse,      restructureRulesfalse,      skipProperties}}});

There is an shortcut for toggling all options at the same time, e.g.

newCleanCSS({  level{2{      allfalse,      removeDuplicateRulestrue}}});

How to apply arbitrary transformations to CSS properties?

If clean-css doesn’t perform a particular property optimization, you can use callback to apply it:

var source = '.block{background-image:url(/path/to/image.png)}';
var output = new CleanCSS({
  level {
    1 {
      transform function (propertyName, propertyValue, selector /* `selector` available since 4.2.0-pre */) {
        if (propertyName == 'background-image' && propertyValue.indexOf('/path/to') > -1) {
          return propertyValue.replace('/path/to', '../valid/path/to');
        }
      }
    }
  }
}).minify(source);

console.log(output.styles); # => .block{background-imageurl(..validpathtoimage.png)}

Note: returning from callback will drop a property.

Теги HTML

lass=»block_content scroll»>

  • Все теги
  • Валидация тегов
    • accesskey
    • charset
    • coords
    • download
    • href
    • hreflang
    • name
    • rel
    • rev
    • shape
    • tabindex
    • target
    • title
    • type
  • title

    • align
    • alt
    • archive
    • code
    • codebase
    • height
    • hspace
    • vspace
    • width
    • accesskey
    • alt
    • coords
    • href
    • hreflang
    • nohref
    • shape
    • tabindex
    • target
    • type
    • autoplay
    • controls
    • loop
    • muted
    • preload
    • src
    • href
    • target
    • color
    • face
    • size
  • dir

    • balance
    • loop
    • src
    • volume
    • alink
    • background
    • bgcolor
    • bgproperties
    • bottommargin
    • leftmargin
    • link
    • rightmargin
    • scroll
    • text
    • topmargin
    • vlink
  • clear

    • accesskey
    • autofocus
    • disabled
    • form
    • formaction
    • formenctype
    • formmethod
    • formnovalidate
    • formtarget
    • name
    • type
    • value
    • align
    • valign
    • align
    • char
    • charoff
    • span
    • valign
    • width
    • align
    • char
    • charoff
    • span
    • valign
    • width
    • cite
    • datetime
    • align
    • title
    • align
    • height
    • hidden
    • hspace
    • pluginspage
    • src
    • type
    • vspace
    • width
    • disabled
    • form
    • title
    • color
    • face
    • size
    • accept-charset
    • action
    • autocomplete
    • enctype
    • method
    • name
    • novalidate
    • target
    • bordercolor
    • frameborder
    • name
    • noresize
    • scrolling
    • src
    • border
    • bordercolor
    • cols
    • frameborder
    • framespacing
    • rows
  • align

  • align

  • align

  • align

  • align

  • align

  • profile

    • align
    • color
    • noshade
    • size
    • width
    • manifest
    • title
    • xmlns
    • align
    • allowtransparency
    • frameborder
    • height
    • hspace
    • marginheight
    • marginwidth
    • name
    • sandbox
    • scrolling
    • seamless
    • src
    • srcdoc
    • vspace
    • width
    • align
    • alt
    • border
    • height
    • hspace
    • ismap
    • longdesc
    • lowsrc
    • src
    • usemap
    • vspace
    • width
    • accept
    • accesskey
    • align
    • alt
    • autocomplete
    • autofocus
    • border
    • checked
    • disabled
    • form
    • formaction
    • formenctype
    • formmethod
    • formnovalidate
    • formtarget
    • list
    • max
    • maxlength
    • min
    • multiple
    • name
    • pattern
    • placeholder
    • readonly
    • required
    • size
    • src
    • step
    • tabindex
    • type
    • value
    • cite
    • datetime
    • accesskey
    • for
    • accesskey
    • align
    • title
    • type
    • value
    • charset
    • href
    • media
    • rel
    • sizes
    • type
  • name

    • behavior
    • bgcolor
    • direction
    • height
    • hspace
    • loop
    • scrollamount
    • scrolldelay
    • truespeed
    • vspace
    • width
    • label
    • type
    • charset
    • content
    • http-equiv
    • name
    • high
    • low
    • max
    • min
    • optimum
    • value
    • align
    • archive
    • classid
    • code
    • codebase
    • codetype
    • data
    • height
    • hspace
    • tabindex
    • type
    • vspace
    • width
    • reversed
    • start
    • type
    • disabled
    • label
    • disabled
    • label
    • selected
    • value
  • align

    • name
    • type
    • value
    • valuetype

Типы тегов

HTML5

Блочные элементы

Строчные элементы

Универсальные элементы

Нестандартные теги

Осуждаемые теги

Видео

Документ

Звук

Изображения

Объекты

Скрипты

Списки

Ссылки

Таблицы

Текст

Форматирование

Формы

Фреймы

Объяснение:

У меня есть базовый макет, 1 Заголовок, 1 боковая панель, 1 область содержимого и 1 нижний колонтитул.

Нет поплавков для , далее идет тег , который я буду использовать для боковой панели моего сайта, поэтому я буду перемещать элемент влево.

  1. Нормальное Поведение Элемента Уровня Блока

  2. Плавающее Поведение Элемента Уровня Блока

Итак, как вы заметили, левый плавающий оставляет пространство справа неиспользуемым, что позволит после него переместиться в оставшееся пространство.

  1. ‘ ы будут отображаться один за другим, если они NOT плавают

  2. будет смещаться рядом друг с другом, если плавает влево или вправо

Итак, вот как ведут себя элементы уровня блока при перемещении влево или вправо, так почему же теперь требуется и почему?

Так что если вы заметите в макете демо-на случай, если вы забыли, вот он..

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

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

Таким образом, голубая вода понятия не имеет, какова площадь плавающих элементов, они могут быть больше бассейна или меньше, поэтому здесь возникает общий вопрос, который беспокоит 90% из CSS новичков: почему фон элемента контейнера не растягивается, когда он держит плавающие элементы. Это потому, что элемент контейнера здесь является POOL, а POOL не имеет представления, сколько объектов плавает, или какова длина или ширина плавающих элементов, поэтому он просто не будет растягиваться.

  1. Нормальный Поток Документа

  2. Секции Поплыли Влево

  3. Очищенные Плавающие Элементы Растягивают Цвет Фона Контейнера

(См. раздел этого ответа для аккуратного способа сделать это. Я намеренно использую пустой пример для объяснения цели)

Я привел 3 примера выше, 1-й-это обычный документооборот, где фон будет просто отображаться, как и ожидалось, так как контейнер не содержит плавающих объектов.

Во втором примере, когда объект перемещается влево, элемент контейнера (POOL) не будет знать размеры перемещаемых элементов и, следовательно, он не будет растягиваться до высоты перемещаемых элементов.

После использования элемент контейнера будет растянут до размеров плавающего элемента.

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

Допустим, вы хотите, чтобы два элемента располагались рядом, а другой элемент-под ними… Таким образом, вы будете плавать 2 элемента влево, и вы хотите, чтобы другие ниже них.

  1. поплыл влево, в результате чего переместился в оставшееся пространство

  2. Сплавлялись установлен так, что тег будет отображаться ниже плавали х

По названию

Internet Explorer Chrome Opera Safari Firefox Android iOS
4.0+ 1.0+ 3.5+ 1.3+ 1.0+ 1.0+ 1.0+

Браузеры поддерживают некоторые цвета по их названию. В табл. 1 приведены названия, шестнадцатеричный код, значения в формате RGB, HSL и описание.

Табл. 1. Названия цветов
Имя Цвет Код RGB HSL Описание
white   #ffffff или #fff rgb(255,255,255) hsl(0,0%,100%) Белый
silver   #c0c0c0 rgb(192,192,192) hsl(0,0%,75%) Серый
gray   #808080 rgb(128,128,128) hsl(0,0%,50%) Темно-серый
black   #000000 или #000 rgb(0,0,0) hsl(0,0%,0%) Черный
maroon   #800000 rgb(128,0,0) hsl(0,100%,25%) Темно-красный
red   #ff0000 или #f00 rgb(255,0,0) hsl(0,100%,50%) Красный
orange   #ffa500 rgb(255,165,0) hsl(38.8,100%,50%) Оранжевый
yellow   #ffff00 или #ff0 rgb(255,255,0) hsl(60,100%,50%) Желтый
olive   #808000 rgb(128,128,0) hsl(60,100%,25%) Оливковый
lime   #00ff00 или #0f0 rgb(0,255,0) hsl(120,100%,50%) Светло-зеленый
green   #008000 rgb(0,128,0) hsl(120,100%,25%) Зеленый
aqua   #00ffff или #0ff rgb(0,255,255) hsl(180,100%,50%) Голубой
blue   #0000ff или #00f rgb(0,0,255) hsl(240,100%,50%) Синий
navy   #000080 rgb(0,0,128) hsl(240,100%,25%) Темно-синий
teal   #008080 rgb(0,128,128) hsl(180,100%,25%) Сине-зеленый
fuchsia   #ff00ff или #f0f rgb(255,0,255) hsl(300,100%,50%) Розовый
purple   #800080 rgb(128,0,128) hsl(300,100%,25%) Фиолетовый

Block formatting contexts

There’s only one way to do both of these. And that is to establish a new block formatting context. Elements that establish a block formatting context are an insulated rectangle in which floats interact with each other. A block formatting context will always be tall enough to visually wrap its floating descendants, and no floats outside of a block formatting context may interact with elements inside. This two-way insulation is exactly what you want. In IE, this same concept is called hasLayout, which can be set via .

There are several ways to establish a block formatting context, but the solution I recommend is with . (Of course, there are the usual caveats with using , so use or put , , and on a different element.)

Container with overflow: auto;

The simplest way to clear floated elements is using the style on the containing element. This solution works in every modern browsers.

One downside, using certain combinations of margin and padding on the external element can cause scrollbars to appear but this can be solved by placing the margin and padding on another parent containing element.

Using ‘overflow: hidden’ is also a clearfix solution, but will not have scrollbars, however using will crop any content positioned outside of the containing element.

Note: The floated element is an tag in this example, but could be any html element.

RGBA

Internet Explorer Chrome Opera Safari Firefox Android iOS
9.0+ 1.0+ 10.0+ 3.1+ 3.0+ 2.1+ 2.0+

Формат RGBA похож по синтаксису на RGB, но включает в себя альфа-канал, задающий прозрачность элемента. Значение 0 соответствует полной прозрачности, 1 — непрозрачности, а промежуточное значение вроде 0.5 — полупрозрачности.

RGBA добавлен в CSS3, поэтому валидацию CSS-кода надо проводить именно по этой версии. Следует отметить, что стандарт CSS3 еще находится в разработке и некоторые возможности в нем могут поменяться. К примеру, цвет в формате RGB добавленный к свойству background-color проходит валидацию, а добавленный к свойству background уже нет. При этом браузеры вполне корректно понимают цвет для того и другого свойства.

Formatting options

By default output CSS is formatted without any whitespace unless a option is given.
First of all there are two shorthands:

newCleanCSS({  format'beautify'})

and

newCleanCSS({  format'keep-breaks'})

however option also accept a fine-grained set of options:

newCleanCSS({  format{    breaks{      afterAtRulefalse,      afterBlockBeginsfalse,      afterBlockEndsfalse,      afterCommentfalse,      afterPropertyfalse,      afterRuleBeginsfalse,      afterRuleEndsfalse,      beforeBlockEndsfalse,      betweenSelectorsfalse},    breakWith'\n',    indentBy,    indentWith'space',    spaces{      aroundSelectorRelationfalse,      beforeBlockBeginsfalse,      beforeValuefalse},    wrapAtfalse}})

CSS Reference

CSS ReferenceCSS Browser SupportCSS SelectorsCSS FunctionsCSS Reference AuralCSS Web Safe FontsCSS AnimatableCSS UnitsCSS PX-EM ConverterCSS ColorsCSS Color ValuesCSS Default ValuesCSS Entities

CSS Properties

align-content
align-items
align-self
all
animation
animation-delay
animation-direction
animation-duration
animation-fill-mode
animation-iteration-count
animation-name
animation-play-state
animation-timing-function

backface-visibility
background
background-attachment
background-blend-mode
background-clip
background-color
background-image
background-origin
background-position
background-repeat
background-size
border
border-bottom
border-bottom-color
border-bottom-left-radius
border-bottom-right-radius
border-bottom-style
border-bottom-width
border-collapse
border-color
border-image
border-image-outset
border-image-repeat
border-image-slice
border-image-source
border-image-width
border-left
border-left-color
border-left-style
border-left-width
border-radius
border-right
border-right-color
border-right-style
border-right-width
border-spacing
border-style
border-top
border-top-color
border-top-left-radius
border-top-right-radius
border-top-style
border-top-width
border-width
bottom
box-decoration-break
box-shadow
box-sizing
break-after
break-before
break-inside

caption-side
caret-color
@charset
clear
clip
clip-path
color
column-count
column-fill
column-gap
column-rule
column-rule-color
column-rule-style
column-rule-width
column-span
column-width
columns
content
counter-increment
counter-reset
cursor

direction
display
empty-cells
filter
flex
flex-basis
flex-direction
flex-flow
flex-grow
flex-shrink
flex-wrap
float
font
@font-face
font-family
font-feature-settings
font-kerning
font-size
font-size-adjust
font-stretch
font-style
font-variant
font-variant-caps
font-weight

grid
grid-area
grid-auto-columns
grid-auto-flow
grid-auto-rows
grid-column
grid-column-end
grid-column-gap
grid-column-start
grid-gap
grid-row
grid-row-end
grid-row-gap
grid-row-start
grid-template
grid-template-areas
grid-template-columns
grid-template-rows

hanging-punctuation
height
hyphens
@import
isolation
justify-content
@keyframes
left
letter-spacing

line-height
list-style
list-style-image
list-style-position
list-style-type

margin
margin-bottom
margin-left
margin-right
margin-top
max-height
max-width
@media
min-height
min-width
mix-blend-mode

object-fit
object-position
opacity
order
outline
outline-color
outline-offset
outline-style
outline-width
overflow
overflow-x
overflow-y

padding
padding-bottom
padding-left
padding-right
padding-top
page-break-after
page-break-before
page-break-inside
perspective
perspective-origin
pointer-events
position
quotes

resize
right

scroll-behavior

tab-size
table-layout
text-align
text-align-last
text-decoration
text-decoration-color
text-decoration-line
text-decoration-style
text-indent
text-justify
text-overflow
text-shadow
text-transform
top

transform
transform-origin
transform-style
transition
transition-delay
transition-duration
transition-property
transition-timing-function

unicode-bidi
user-select

vertical-align
visibility

white-space
width
word-break
word-spacing
word-wrap
writing-mode

z-index

Compatibility modes

There is a certain number of compatibility mode shortcuts, namely:

  • (default) — Internet Explorer 10+ compatibility mode
  • — Internet Explorer 9+ compatibility mode
  • — Internet Explorer 8+ compatibility mode
  • — Internet Explorer 7+ compatibility mode

Each of these modes is an alias to a fine grained configuration, with the following options available:

new CleanCSS({
  compatibility {
    colors {
      opacity true // controls `rgba()` / `hsla()` color support
    },
    properties {
      backgroundClipMerging true, // controls background-clip merging into shorthand
      backgroundOriginMerging true, // controls background-origin merging into shorthand
      backgroundSizeMerging true, // controls background-size merging into shorthand
      colors true, // controls color optimizations
      ieBangHack false, // controls keeping IE bang hack
      ieFilters false, // controls keeping IE `filter` / `-ms-filter`
      iePrefixHack false, // controls keeping IE prefix hack
      ieSuffixHack false, // controls keeping IE suffix hack
      merging true, // controls property merging based on understandability
      shorterLengthUnits false, // controls shortening pixel units into `pc`, `pt`, or `in` units
      spaceAfterClosingBrace true, // controls keeping space after closing brace - `url() no-repeat` into `url()no-repeat`
      urlQuotes false, // controls keeping quoting inside `url()`
      zeroUnits true // controls removal of units `0` value
    },
    selectors {
      adjacentSpace false, // controls extra space before `nav` element
      ie7Hack true, // controls removal of IE7 selector hacks, e.g. `*+html...`
      mergeablePseudoClasses , // controls a whitelist of mergeable pseudo classes
      mergeablePseudoElements , // controls a whitelist of mergeable pseudo elements
      mergeLimit 8191, // controls maximum number of selectors in a single rule (since 4.1.0)
      multiplePseudoMerging true // controls merging of rules with multiple pseudo classes / elements (since 4.1.0)
    },
    units {
      ch true, // controls treating `ch` as a supported unit
      in true, // controls treating `in` as a supported unit
      pc true, // controls treating `pc` as a supported unit
      pt true, // controls treating `pt` as a supported unit
      rem true, // controls treating `rem` as a supported unit
      vh true, // controls treating `vh` as a supported unit
      vm true, // controls treating `vm` as a supported unit
      vmax true, // controls treating `vmax` as a supported unit
      vmin true // controls treating `vmin` as a supported unit
    }
  }
})

You can also use a string when setting a compatibility mode, e.g.

new CleanCSS({
  compatibility 'ie9,-properties.merging' // sets compatibility to IE9 mode with disabled property merging
})

Important: 4.0 breaking changes

clean-css 4.0 introduces some breaking changes:

  • , , and options are replaced by a single option — this means that rebasing URLs and import inlining is much simpler but may not be (YMMV) as powerful as in 3.x;
  • option is gone as stats are always provided in output object under property;
  • is disabled by default;
  • applies to all units now, not only as in 3.x;
  • and are merged into option which defaults to . Remote rules are NOT inlined by default anymore;
  • splits option into and options;
  • remote resources without a protocol, e.g. , are not inlined anymore;
  • changes default Internet Explorer compatibility from 9+ to 10+, to revert the old default use flag;
  • renames to ;
  • moves and to level 1 optimizations options, see examples;
  • moves , , , and to level 2 optimizations options, see examples below;
  • renames option to ;
  • level 1 optimizations are the new default, up to 3.x it was level 2;
  • option is replaced with to ease transition;
  • option has to be a boolean from now on — to specify an input source map pass it a 2nd argument to method or via a hash instead;
  • option is removed as aggressive merging is replaced by smarter override merging.

What level 2 optimizations do?

  • — does all the following operations on a nested block, like or ;
  • — optimizes properties in rulesets and flat at-rules, like @font-face, by splitting them into components (e.g. into ), optimizing, and restoring them back. You may want to use option to control whether you want to turn multiple components into shorthands;
  • — gets rid of duplicate rulesets with exactly the same set of properties, e.g. when including a Sass / Less partial twice for no good reason;
  • — merges adjacent rulesets with the same selector or rules;
  • — identifies which properties are overridden in same-selector non-adjacent rulesets, and removes them;
  • — identifies same-selector non-adjacent rulesets which can be moved (!) to be merged, requires all intermediate rulesets to not redefine the moved properties, or if redefined to have the same value;
  • — same as the one above but for same-selector non-adjacent rulesets;
  • — tries to reorganize different-selector different-rules rulesets so they take less space, e.g. into ;
  • — removes duplicated rules;
  • — removes duplicated nested blocks;
  • — merges non-adjacent at-rules by the same rules as above;

How

The process by which UnCSS removes the unused rules is as follows:

  1. The HTML files are loaded by jsdom and JavaScript is executed.
  2. All the stylesheets are parsed by PostCSS.
  3. filters out selectors that are not found in the HTML files.
  4. The remaining rules are converted back to CSS.

Please note:

  • UnCSS cannot be run on non-HTML pages, such as templates or PHP files. If you need to run UnCSS against your templates, you should probably generate example HTML pages from your templates, and run uncss on those generated files; or run a live local dev server, and point uncss at that.
  • UnCSS only runs the Javascript that is run on page load. It does not (and cannot) handle Javascript that runs on user interactions like button clicks. You must use the option to preserve classes that are added by Javascript on user interaction.

How to apply arbitrary transformations to CSS properties?

If clean-css doesn’t perform a particular property optimization, you can use callback to apply it:

var source ='.block{background-image:url(/path/to/image.png)}';var output =newCleanCSS({  level{1{transformfunction(propertyName,propertyValue,selector){if(propertyName =='background-image'&&propertyValue.indexOf('/path/to')>-1){returnpropertyValue.replace('/path/to','../valid/path/to');}}}}}).minify(source);console.log(output.styles); # =>.block{background-imageurl(..validpathtoimage.png)}

Note: returning from callback will drop a property.

Ссылка на основную публикацию