CSS вычисляет выбранный элемент тега
Это обычное требование социальной платформы.Например, на платформе Nuggets, чтобы позволить пользователям выбирать интересующие теги, JS обычно используется для обработки количества выбранных тегов. дать сегодняcss
Версия:
<p>请选择你感兴趣的标签:</p>
<input type="checkbox" id="topic1"><label for="topic1" class="topic">Vue</label>
...
<p>您已选择<span class="topic-counter"></span>个标签。</p>
Первое местоcheckbox
Скрытый:
[type="checkbox"]{
position: absolute;
clip: rect(0 0 0 0);
}
затем настроитьlabel
стиль, затем установитеCSS
калькулятор.
// 在body中创建或者重置计算器
body {
counter-reset: topicCounter;
}
// 当checkbox在选中状态时递增变量
:checked + .topic {
counter-increment: topicCounter;
}
//使用counter()函数将计算器的值添加到元素中。
.topic-counter::before {
color: red;
content: counter(topicCounter);
}
Схема эффекта выглядит следующим образом:
Переполнение многострочного текста исключено
Исключение переполнения текста является очень распространенным бизнес-требованием, однако большинство из них имеют дело с отдельными строками текста:
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
эти 3CSS
Предложение означает:
- Устанавливает, если длина текста превышает указанную ширину, скрывает содержимое, превышающее ширину.
- Установите текст, который будет отображаться на одной строке без переноса.
- При настройке переполнения текста используйте многоточие для представления обрезанного текста.
Так что же делать с многострочным текстом? ВотCSS
Версия:
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
надCSS
Предложение означает:
- Установите для элемента упруго масштабируемую блочную модель.
- Устанавливает количество строк отображаемого текста.
- Установите расположение дочерних элементов элемента телескопической коробки (вышеуказанные три должны использоваться вместе)
- При настройке переполнения текста используйте многоточие для представления обрезанного текста.
Эффект следующий:
Однако недостатки этого метода также очевидны, и он подходит только дляWebKit
Браузер ядра.
Увеличить приоритет селектора CSS
При нормальном развитии будет много шансов столкнуться с необходимостью увеличенияCSS
Сценарии для приоритета селектора. Как добиться этого будет лучше, например, нужно доработать следующееCSS
Приоритет селектора:
.bar { background: #DDD; }
Я считаю, что многие люди предпочтут увеличить метод вложенности:
.foo .bar { background: #DDD; }
Или добавьте селектор тегов:
div.bar{ background: #DDD; }
Это не лучшие методы, поскольку вышеупомянутые методы увеличит муфту и уменьшают ремонтопригодность. Если последующее имя родительского узла изменяется или заменяется другой меткой, это повлияет на эффект стиля.
лучший способ
- Повторить сам селектор
.bar.bar { background: #DDD; }
- С помощью существующих селекторов атрибутов
.bar[class] { background: #DDD; }
#bar[id] { background: #DDD; }
Это увеличивает приоритет без увеличения связи.
Коробчатая модель глобальной настройки
box-sizing
Значение по умолчаниюcontent-box
, что означает, что указанные ширина и высота будут устанавливать только размер блока содержимого. Если установлен отступ или граница, ширина и высота элемента будут больше, чем указанные ширина и высота. Самый глупый способ - уменьшитьwidth
илиheight
, что не является идеальным решением, т. к. пробуется путем изменения значения, и часто бывает сложно объяснить, почему генерируется это значение.
настраиватьbox-sizing
значениеborder-box
,такheight
а такжеwidth
Свойство будет установлено равным сумме размера содержимого, заполнения и границы, что решает указанную выше проблему.
.main{
box-sizing: border-box
}
такmain
элементы лучше, как и ожидалось, но то же самое происходит и с другими элементами. Так что установите его как глобальный
*,
::before,
::after{
box-sizing: box;
}
Это установит все элементы и псевдоэлементы на страницеborder-box
.
Но все еще есть некоторые проблемы.Многие предприятия теперь используют стилизованные сторонние компоненты, которые могут нарушить макет некоторых из этих компонентов, особенно когда сторонние компоненты разрабатываются.css
Процесс не учитывает, что пользователь будет изменять блочную модель.
Использование наследования может решить вышеуказанные проблемы:
:root{
box-sizing: border-box;
}
*,
::before,
::after{
box-sizing: inherit;
}
Коробчатые модели обычно не передаются по наследству, а используютinherit
Ключевое слово обеспечивает наследование. Контейнер верхнего уровня для сторонних компонентов можно проверить, при необходимости восстановить его доcontent-box
. Таким образом, внутренние элементы компонента будут наследовать блочную модель:
.third-component{
box-sizing: content-box;
}
наведите раскрывающийся список псевдокласса и задержки реализации
Реализуйте кнопку наведения мыши для отображения взаимодействия с раскрывающимся меню:
<button class='btn'>菜单</button>
<ul class='panel'>
<li class='panel-item'>苹果</li>
<li class='panel-item'>葡萄</li>
<li class='panel-item'>香蕉</li>
<li class='panel-item'>橙子</li>
</ul>
Цель состоит в том, чтобы отобразить раскрывающееся меню, когда мышь находится над кнопкой.css
Код прост:
.btn:hover + .panel, .panel:hover{
visibility: visible
}
.panel{
visibility: hidden;
width: 100px;
height: 200px;
background: #DDD;
}
.panel-item{
width: 100%;
height: 50px;
list-style: none;
line-height: 50px;
}
Однако у приведенной выше реализации есть небольшой недостаток: если между кнопкой и меню есть зазор, раскрывающийся список будет закрыт до того, как мышь наведется на раскрывающийся список. с помощьюtransition
Добавление эффекта задержки может решить эту проблему.
просто нужно.panel
Добавьте следующие свойства:
.panel{
transition: visibility .2s;
}
Схема эффекта выглядит следующим образом:
Определите размер шрифта, используя единицы измерения окна просмотра
Вообще говоря, создание адаптивных панелей заключается в использовании медиа-запросов для отображения панелей разных размеров путем изменения размера шрифта элементов в соответствии с размером экрана различных моделей.Конечно, предполагается, что используются относительные единицы.em
илиrem
. Например:
@media (min-width: 800px) {
:root{
font-size: 0.875em;
}
}
@media (min-width: 1200px) {
:root{
font-size: 1em;
}
}
Отзывчивый переопределяет размер шрифта всей страницы в соответствии с установкой разных размеров шрифта для корневого элемента страницы.em
а такжеrem
. Но это жестко закодировано и реагирует только на установленный размер экрана.
Мы знаем единицы просмотраvm
а такжеvh
Это относительно экрана.Если единица просмотра используется для установки размера шрифта, это более практично, чем установка ширины.
font-size: 2vw;
Что происходит, когда установлено указанное выше свойство? Когда ширина экрана1440px
размер шрифта28.8px
. в1920px
экране размер шрифта становится38.4px
. Преимущество этого в том, что элементы могут плавно переходить между этими двумя размерами, без резких изменений в определенной точке останова.
Но есть еще некоторые проблемы, общие1920px
экран,38.4px
слишком велик. На мобильных телефонах, таких какiPhone6
вплоть до7.5px
, это было бы слишком мало.
использоватьCSS
изcal
c комбинация функцийem
а такжеvw
Две единицы сделают свое дело:
:root{
font-size: calc(0.5em + 1vw);
}
0.5em
Гарантированный минимальный размер шрифта,1vw
Это гарантирует, что шрифт масштабируется вместе с областью просмотра. Гарантированный базовый размер шрифта отiPhone6
внутренний11.75px
переход к1200px
экран20px
.
взаимодействие-заполнитель
Конкретный эффект: когда поле ввода находится в сфокусированном состоянии, содержимое заполнителя поля ввода анимированно перемещается в левый верхний угол в качестве заголовка. с помощью:placeholder-shown
Псевдоклассы могут просто использоватьCSS
добиться этого эффекта.
<div class="input-box">
<input class="input-control input-outline" placeholder="账号">
<label class="input-label">账号</label>
</div>
Во-первых, пусть браузер по умолчаниюplaceholder
Эффект не виден
.input-control:placeholder-shown::placeholder {
color: transparent;
}
Во-вторых, используйте.input-label
Элемент заменяет заполнитель для саундтрека браузера
.input-box{
position: relative;
}
.input-label {
position: absolute;
left: 16px; top: 14px;
pointer-events: none;
}
Наконец, когда поле ввода сфокусировано, а заполнитель не отображается<label>
Элемент перемещается, эффект заключается в сжатии и перемещении вверх
.input-control:not(:placeholder-shown) ~ .input-label,
.input-control:focus ~ .input-label {
color: #2486ff;
transform: scale(0.75) translate(-2px, -32px);
}
Эффект следующий:
Смешивание элементов с помощью режима смешивания
использоватьmix-blend-mode
Атрибуты не только для смешивания изображений, но и для смешивания текста и границ элемента с фоновым изображением контейнера.
Цель состоит в том, чтобы добавить подпись к изображению:
<div class='blend'>
<h1>熊出没</h1>
</div>
Добавьте стили к h1, и конечным результатом будет красный простой фоновый баннер с ярко-серыми верхними и нижними широкими рамками. Затем примените режим наложения Blend, и весь элемент будет рассматриваться как слой, смешанный с фоновым изображением в контейнере ниже.
.blend{
background-image: url('image');
background-size: cover;
background-position: center;
}
.blend > h1{
mix-blend-mode: hard-light;
background-color: #c33;
color: #808080;
border: 0.1em solid #ccc;
border-width: 0.1em 0;
}
Эффект следующий:Эффект слияния очень интересный, текст выглядит прозрачным, как будто красное знамя обрезано. использовать здесьhard-light
Режим наложения и средне-серый цвет текста. Режимы наложения контраста лучше работают при использовании очень светлых или очень темных цветов.
конец
Если вы считаете это полезным, пожалуйста, поставьте лайк и поддержите.
Расширенное чтение
Модульное тестирование VUE — начните тестовое путешествие
Модульное тестирование ВУЭ - продвинутая дорога
модульный тест vue — конечная точка
Больше статей, пожалуйста, переместитеГитхаб арендодателя, Если вам это нравится, пожалуйста, нажмите звездочку, это также поощрение автора.