Я создаю систему на основе вкладок, в которой вы можете добавлять дни и добавлять информацию для каждого дня. Я пытаюсь добиться перекрывающегося вида, когда дело доходит до вкладок, и хотел бы добавить своего рода эффект тени, когда вкладка перекрывается другой с левой стороны. В этом конкретном примере, когда активен первый день, внутренняя левая часть дня 2 будет иметь небольшую тень, чтобы она выглядела так, как будто она перекрывается. Как я могу добиться этого эффекта?
.breakout-holder {
width: 100%;
border: 1px solid black;
}
.heading {
/* background-color: grey; */
height: 40px;
display: flex;
align-items: flex-end;
}
.active {
background-color: lightgreen !important;
/* box-shadow: inset 0 20px 20px -20px #000000; */
z-index: 5000;
}
.tab {
font-weight: bold;
background-color: lightgrey;
color: black;
height: 90%;
width: auto;
padding: 0 20px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid black;
border-right: 1px solid black;
border-left: 1px solid black;
border-radius: 15px 15px 0 0;
cursor: pointer;
}
.tab:not(:first-child) {
margin-left: -5px;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel = "stylesheet" href = "breakoutStyle.css">
<title>Breakout room form</title>
</head>
<body>
<div class = "breakout-holder">
<div class = "heading">
<div class = "tab active">
Day 1
</div>
<div class = "tab">
Day 2
</div>
<div class = "tab" style = "z-index: -10">
+
</div>
</div>
<div class = "body"></div>
</div>
</body>
<script src = "app.js"></script>
</html>
Я попытался добавить тень окна к элементам вкладки, которые находятся поверх другой вкладки. Этот метод не сработал, так как выглядит немного дешево, на мой взгляд.
Вот css, который я пытался добавить в класс css для вкладок
-webkit-box-shadow: 34px 0px 25px -13px rgba(0, 0, 0, 0.75);
-moz-box-shadow: 34px 0px 25px -13px rgba(0, 0, 0, 0.75);
box-shadow: 34px 0px 25px -13px rgba(0, 0, 0, 0.75);
🤔 А знаете ли вы, что...
CSS позволяет разработчикам разделять структуру и стиль веб-содержимого.
.breakout-holder {
width: 100%;
border: 1px solid black;
}
.heading {
/* background-color: grey; */
height: 40px;
display: flex;
align-items: flex-end;
}
.active {
background-color: lightgreen !important;
-webkit-box-shadow: 0px 10px 4px -2px rgba(0,0,0,0.75);
-moz-box-shadow: 0px 10px 4px -2px rgba(0,0,0,0.75);
box-shadow: 0px 10px 4px -2px rgba(0,0,0,0.75);
z-index: 5000;
}
.tab {
font-weight: bold;
background-color: lightgrey;
color: black;
height: 90%;
width: auto;
padding: 0 20px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid black;
border-right: 1px solid black;
border-left: 1px solid black;
border-radius: 15px 15px 0 0;
cursor: pointer;
}
.tab:not(:first-child) {
margin-left: -5px;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel = "stylesheet" href = "breakoutStyle.css">
<title>Breakout room form</title>
</head>
<body>
<div class = "breakout-holder">
<div class = "heading">
<div class = "tab active">
Day 1
</div>
<div class = "tab">
Day 2
</div>
<div class = "tab" style = "z-index: -10">
+
</div>
</div>
<div class = "body"></div>
</div>
</body>
<script src = "app.js"></script>
</html>
Добавьте это на активную вкладку: box-shadow: 2px 1px 2px 1px rgba(0, 0, 0, 0.4);
.breakout-holder {
width: 100%;
border: 1px solid black;
}
.heading {
/* background-color: grey; */
height: 40px;
display: flex;
align-items: flex-end;
}
.active {
background-color: lightgreen !important;
box-shadow: 2px 1px 2px 1px rgba(0, 0, 0, 0.4);
z-index: 5000;
}
.tab {
font-weight: bold;
background-color: lightgrey;
color: black;
height: 90%;
width: auto;
padding: 0 20px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid black;
border-right: 1px solid black;
border-left: 1px solid black;
border-radius: 15px 15px 0 0;
cursor: pointer;
}
.tab:not(:first-child) {
margin-left: -5px;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel = "stylesheet" href = "breakoutStyle.css">
<title>Breakout room form</title>
</head>
<body>
<div class = "breakout-holder">
<div class = "heading">
<div class = "tab active">
Day 1
</div>
<div class = "tab">
Day 2
</div>
<div class = "tab" style = "z-index: -10">
+
</div>
</div>
<div class = "body"></div>
</div>
</body>
<script src = "app.js"></script>
</html>
Вы можете использовать для этого псевдоэлементы, но предостережение: вы не можете использовать отрицательный z-index
из-за контекста стека и необходимости, чтобы вкладка active
находилась над другими вкладками.
Это в основном использование box-shadow
и transform: skew
для имитации любой стороны активной вкладки.
Затем у меня есть стили для первой и последней вкладок active
, поэтому :before
и :after
соответственно не отображаются, если они активны.
Этот подход дает вам немного более «полированный» вид вместо того, чтобы просто использовать box-shadow
на активной вкладке.
.breakout-holder {
width: 100%;
border: 1px solid black;
}
.heading {
/* background-color: grey; */
height: 40px;
display: flex;
align-items: flex-end;
position: relative;
}
.tab.active {
position: relative;
background-color: lightgreen !important;
z-index: 5;
}
.tab {
position: relative;
font-weight: bold;
background-color: lightgrey;
color: black;
height: 90%;
width: auto;
padding: 0 20px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid black;
border-right: 1px solid black;
border-left: 1px solid black;
border-radius: 15px 15px 0 0;
cursor: pointer;
}
.tab:not(:first-child) {
margin-left: -5px;
}
.tab::before,
.tab::after {
content: '';
position: absolute;
left: 0;
bottom: 2px;
box-shadow: -3px 0px 4px 1px rgba(0, 0, 0, .3);
transform: skew(-5deg,-10deg);
width: 1px;
height: 60%;
border-radius: 0;
display: none;
}
.tab::after {
left: auto;
right: 0;
box-shadow: 3px 1px 4px 1px rgba(0, 0, 0, .3);
transform: skew(5deg,10deg);
}
.tab.active::before,
.tab.active::after {
z-index: -1;
display: block;
}
.tab.active:first-child::before {
display: none;
}
.tab.active:last-child::after {
display: none;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel = "stylesheet" href = "breakoutStyle.css">
<title>Breakout room form</title>
</head>
<body>
<div class = "breakout-holder">
<div class = "heading">
<div class = "tab">
Day 1
</div>
<div class = "tab active">
Day 2
</div>
<div class = "tab">
+
</div>
</div>
<div class = "body"></div>
</div>
</body>
<script src = "app.js"></script>
</html>
Было бы неплохо, если бы вы могли связать несколько примеров того, что вы собираетесь делать, но вы можете сделать следующее:
/* background-image: linear-gradient(#134C13, #66AF66, lightgreen); */
.breakout-holder {
width: 100%;
border: 1px solid black;
}
.heading {
/* background-color: grey; */
height: 40px;
display: flex;
align-items: flex-end;
}
.tab {
font-weight: bold;
background-color: lightgrey;
color: black;
height: 90%;
width: auto;
padding: 0 20px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid black;
border-right: 1px solid black;
border-left: 1px solid black;
border-radius: 15px 15px 0 0;
cursor: pointer;
}
.active {
background-color: lightgreen !important;
border-right: 5px solid black;
border-bottom: 2px solid black;
/* box-shadow: inset 0 20px 20px -20px #000000; */
z-index: 5000;
}
.tab:not(:first-child) {
margin-left: -5px;
}
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel = "stylesheet" href = "breakoutStyle.css">
<title>Breakout room form</title>
</head>
<body>
<div class = "breakout-holder">
<div class = "heading">
<div class = "tab active">
Day 1
</div>
<div class = "tab">
Day 2
</div>
<div class = "tab" style = "z-index: -10">
+
</div>
</div>
<div class = "body"></div>
</div>
</body>
<script src = "app.js"></script>
</html>