От автора.Шесть лет назад, если бы вы спросили меня, сколько я использовал transform
и псевдоэлементы , я бы сказал вам «нисколько». Теперь я использую их по сто раз в больших проектах, и я не могу представить проект любого размера в последние годы, где я не использовал бы эти инструменты для создания визуальных эффектов, анимации и гибких решений макетов.
Если вы когда-либо использовали :before
или :after
в своем селекторе, и у него был content
стиль, вы создали псевдоэлемент. Они вставляются в DOM и могут рассматриваться как свободные span
элементы, которые могут иметь текст, происходящий из CSS.
Я не использую их для текста очень часто: их поддержка в вспомогательных технологиях нечеткая, и внедрение текста из CSS — последнее средство для меня.
Они отлично подходят для создания дополнительных элементов, которые необходимы для макета или дизайна без необходимости загромождать ваш HTML. Самое популярное использование для .clearfix
, но это только верхушка айсберга.
transform: translate(<horizontal length>, [vertical length]);
Переместите элемент вокруг горизонтально или вертикально. Интересный факт: процент может быть использован, и он будет умножен на размеры элемента. Таким образом, если элемент шириной translate
200 пикселей переместится на 50% по горизонтали , он будет перемещен на 100 пикселей влево.
Например:
/* Move element 50px left */transform: translate(50px);
/* Move element 2rem right and 100% down *//* 100% = height of element being styled */transform: translate(-2rem, 100%);
Определяет, где преобразования будут инициированы. По умолчанию используется center center
, но может быть установлено другое, например left top
, right bottom
или вы можете использовать длины CSS, чтобы определить положение в верхнем левом углу. Посмотрите документы MDN для большой документации и примеров.
transform: rotate(<angle>);
Поверните элемент в градусах. При анимации вы можете вращать элемент несколько раз, давая угол больше, чем 360deg
. Важно обращать внимание на transform-origin
ротации, это будет иметь большое значение в том, как применяется ротация.
Например:
/* Rotate item 45deg from its center */transform: rotate(45deg);
/* Rotate item 3 times, if animated it will spin 3 times, if not item won’t change appearance */transform: rotate(1080deg);
transform: scale(<number>);
Масштаб будет увеличивать или уменьшать размер элемента. 1
это обычный размер, 2
удвоит его по размеру, 0.5
сделает его вдвое меньше. transform-origin
будет иметь большое значение и здесь.
transform
transform
сначала для CSS-переходов и анимацииЭто было покрыто много , но стоит повторить.
Поскольку преобразования могут отображаться в долях пикселя с использованием анимации сглаживания, они имеют тенденцию выглядеть более плавными и transform
всегда будут работать лучше в анимациях, чем другие свойства. Однако, если элемент не анимирован, лучше использовать другие методы макета (поле, отступы, положение).
Поэтому при анимации лучше всего поместить элемент в его начальную позицию (или как можно ближе) transform
, а затем добавить, transform
чтобы переместить его до конца.
За последние три года мы перешли от вертикального выравнивания, являющегося общей болью, к множеству разумных решений, но это мой путь. Не имеет значения, имеет ли ваш элемент и / или его родитель неизвестную высоту или эти высоты могут быть изменены. Он менее многословен, чем большинство других решений, и требует только стили для центрируемого элемента. Это просто аккуратно!
Пример Codepen : codepen.io/wesruv/pen/pEOAJz
Это работает, потому что top: 50%
рассчитывается по размерам родительского элемента, а translate рассчитывается по размерам стилизованного элемента.
Вот по сути, что происходит:
Понимание того , почему это работает, важно, потому что есть также единицы просмотра rem
, em
и px
которые могут включать некоторые удобные параметры макета. Например, в прошлом месяце Томас Латтимор поделился информацией о том position
, как , vw
и translate
может быть использован для создания элемента, такого же широкого, как браузер, вместо ограничения родительским контейнером .
Это очень удобно для таких компонентов, как карты, герои с изображениями и текстом над ними, а также видео. Давайте возьмем видео, так как они являются самым чистым примером.
Если вы знаете соотношение сторон ваших видео, вам не нужно решение JavaScript, такое как fitvids.js .
Обычно самый надежный способ заставить это работать правильно — это использовать псевдоэлемент и абсолютно позиционировать обертку содержимого, но в некоторых случаях может быть лучше обойти псевдоэлемент.
Допустим, HTML-разметка есть div.movie > iframe.movie__video
, а фильм 16: 9; Вот как я могу реализовать соотношение сторон, чтобы фильм мог иметь плавную ширину:
.movie {
position: relative;
}
.movie:before {
/* This will setup the aspect ratio of our screen */ content: '';
display: block;
/* content-box makes sure padding adds to declared height */ box-sizing: content-box;
width: 100%;
height: 0;
/* Vertical padding is based on parent element's width */ /* So we want 9/16, converted to % as our vertical padding */ padding: 0 0 56.25%;
}
.movie__video {
/* Now we need to absolutely position content */ /* Otherwise it'll be pushed down by the :before element */ position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Пример Codepen: codepen.io/wesruv/pen/peYPWo
Этот метод эффективен и вернется к IE5 .
Я также использовал эту технику для тизеров карт с большими изображениями. Осторожно, текст находится в абсолютно позиционированной области содержимого, которую вы должны гарантировать, что текст не будет вытекать из поля. Существуют современные методы переполнения текста, которые могут помочь, но в идеале автор контента должен следовать ограничениям длины дизайна.
Скажем, дизайн требует фонового изображения, которое покрывает половину его оболочки, и нам нужно, background-size: cover
чтобы изображение заполняло половину своего родителя, поскольку размеры родителя изменяются для отзывчивости.
Может быть добавлен другой элемент, загромождающий ваш HTML, или мы можем создать псевдоэлемент для разметки так, как мы хотим, и затем иметь доступ ко всем правилам фонового позиционирования поверх этого!
.hero--half-cover-image {
position: relative;
}
.hero--half-cover-image:before {
content: '';
position: absolute;
top: 0;
right: 0;
display: block;
width: 50%;
height: 100%;
background: gray url(/images/fillmurray.jpg) no-repeat;
background-size: cover;
}
Пример Codepen: codepen.io/wesruv/pen/PpLmoR
Под «CSS-искусством» я подразумеваю простые иконки, созданные с помощью CSS, а не иконки или шрифты. Это работает не для всех значков, которые могут быть в дизайне, но для шевронов, гамбургеров и значков поиска вы можете сохранить активы и передачу файлов и получить возможность изменять цвет, макет, размер или стиль значок на взаимодействиях или пользовательских триггеров.
Вы могли бы также сделать эти эффекты с SVG, но у этого есть больше проблем совместимости (в настоящее время) и может означать больше данных для загрузки пользователем, чтобы произвести тот же самый эффект.
Я создал несколько из них в Codepen и повторно использовал и настраивал их в нескольких проектах.
Я также недавно делал довольно витиеватую инфографику, используя эти методы, хотя это достаточно трудоемко, содержание в них должно быть доступно и оптимизировано для SEO, и, поскольку текст может измениться, мне нужно, чтобы контейнеры были гибкими и на основании копии.
Интерактивная графика предназначена для объяснения различных технологий и планирования, которые должны входить в искусственный интеллект.
Версия Codepen : codepen.io/wesruv/pen/VXzLpZ
Живая версия: ai.cs.cmu.edu/about#ai-stack
Графика использовалась для объяснения информации, которая была основной для страницы, к сожалению, в итоге она не выглядела как правильная визуальная метафора.
Версия Codepen : codepen.io/wesruv/pen/RjmVvV
То, что в итоге заменило диаграмму Венна, объясняет, каким образом компания или частное лицо может стать партнером Школы компьютерных наук Карнеги-Меллона.
Версия Codepen : codepen.io/wesruv/pen/ppOmVq
Живая версия: www.cs.cmu.edu/partnerships
Небольшой трюк, который я выучил — на более богато украшенном CSS Art, в котором есть небольшие части, которые нужно встретить, — я обычно добавляю div, чтобы содержать элемент. Я сделаю иконку намного больше, чем мне нужно, и использую transform: scale()
в div, чтобы уменьшить ее до соответствующего размера. Это позволяет избежать проблем округления субпикселей, из-за которых значок выглядит не так.
Например, на маленьком значке с увеличительным стеклом может быть очень трудно выровнять ручку (диагональная линия) с линзой (кольцом), если значок 20px
широкий. Округление пикселей может привести к тому, что ручка прокалывает круг, или может не совпадать с кругом в правильном положении. Работая больше, 100px
шире, а затем сжимаясь, масштабируя до 0.2
, мы избегаем этой проблемы.
transform
?transform
только визуально перемещает элементы, элемент все равно будет занимать то же пространство в макете, что и раньше, как если бы там transform
не было стилей.-webkit-
префикс вместе со стилем без префикса.::before
и ::after
, но IE8 поддерживает только :before
и :after
(одно двоеточие), что не имеет большого значения, но одинарное двоеточие работает везде и на один символ меньше.content
стиль соответствует стилю псевдоэлемента, даже если это пустая строка. Если вы этого не сделаете, псевдоэлемент не будет существовать.В Unity используется производительный язык программирования C#. Благодаря C# и Mono – кроссплатформенной реализации .NET,…