3 Likes
ببساطة أخي محمود، نحن نعلم أن لكل عنصر حدود Border نستطيع أن ننسقها عن طريق الـ Css
وذلك بالذهاب إلى خاصية border
وإعطائها القيم التالية:
- اللون مثلا
red
- الحجم مثلا
1px
- الشكل مثلا
dotted
لتظهر على شكل نقاط مثلما تحتاجها أنت في مثالك هذا
border: red 1px dotted;
تستطيع أيضا تحديد فقط جانب من جوانب الحدود، فمثلا هنا نحتاج تنسيق عنصري English
و sawsan
فقط من ناحية اليسار، فبدلا من أن نحدد الخاصية border
، نستبدلها بـ border-left
هكذا:
border-left: red 1px dotted;
قد حاولت تجسيد المثال هنا تستطيع الإطلاع عليه واكتشاف مختلف أشكال الحدود:
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Lara Darine</title>
<link href="https://fonts.googleapis.com/css?family=Oxygen:400,700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="main.css">
</head>
<body>
<!-- layout 3 -->
<div id="container">
<!-- layout 1 -->
<div id="logo">
<img src="http://www.awfarmarket.com/img/general/top_bar_01.png" alt="Awfar logo">
</div>
<!-- layout 2 -->
<div id="menu">
<div id="apps">
<img src="http://www.awfarmarket.com/img/general/toplinks-02.png" alt="Android">
<img src="http://www.awfarmarket.com/img/general/toplinks-03.png" alt="Apple">
</div>
<div id="lang" class="left-border">
<div class="icons">
<img src="http://www.awfarmarket.com/img/general/toplinks-04.png" alt="Map">
</div>
<div class="choice">
<select name="language" id="language">
<option value="english">English</option>
<option value="arabic">عربي</option>
</select>
</div>
</div>
<div id="profile" class="left-border">
<div class="icons">
<img src="http://www.awfarmarket.com/img/general/toplinks-04.png" alt="User">
</div>
<div class="choice">
<select name="user" id="user">
<option value="sawsan">Sawsan</option>
<option value="settings">Settings</option>
<option value="logout">Logout</option>
</select>
</div>
</div>
</div>
</div>
<div id="test">
<div class="test" id="border">
<h2>Layout</h2>
<label for="div1" class="border inputs"> Layout 1
<input type="checkbox" name="div1">
<span class="checkmark"></span>
</label>
<label for="div2" class="border inputs"> Layout 2
<input type="checkbox" name="div2">
<span class="checkmark"></span>
</label>
<label for="div3" class="border inputs"> Layout 3
<input type="checkbox" name="div3">
<span class="checkmark"></span>
</label>
</div>
<div class="test" id="radio">
<h2>Border type</h2>
<label class="type inputs"> Dotted
<input type="Radio" name="radio" id="dotted" onclick="if(this.checked){changeBorderType(id)}" checked>
<span class="checkmark"></span>
</label>
<label class="type inputs"> Solid
<input type="Radio" name="radio" id="solid" onclick="if(this.checked){changeBorderType(id)}">
<span class="checkmark"></span>
</label>
<label class="type inputs"> Dashed
<input type="Radio" name="radio" id="dashed" onclick="if(this.checked){changeBorderType(id)}">
<span class="checkmark"></span>
</label>
<label class="type inputs"> Double
<input type="Radio" name="radio" id="double" onclick="if(this.checked){changeBorderType(id)}">
<span class="checkmark"></span>
</label>
<label class="type inputs"> Groove
<input type="Radio" name="radio" id="groove" onclick="if(this.checked){changeBorderType(id)}">
<span class="checkmark"></span>
</label>
<label class="type inputs"> Ridge
<input type="Radio" name="radio" id="ridge" onclick="if(this.checked){changeBorderType(id)}">
<span class="checkmark"></span>
</label>
</div>
</div>
<script src="app.js"></script>
</body>
</html>
CSS:
body {
margin: 0;
font-family: 'Oxygen', sans-serif;
}
#container {
width: 100%;
height: 120px;
margin: 0 auto;
display: flex;
}
#logo {
width: 231px;
height: 90px;
}
#menu {
width: 100%;
height: 16px;
border-bottom: 1px #e6e1e0 solid;
background-color: #f6f5f3;
display: flex;
flex-direction: row;
justify-content: flex-end;
padding: 8px 0;
}
#menu div {
display: flex;
flex-direction: row;
margin: 0 4px;
}
#apps img {
margin: auto 2px;
}
.left-border {
border-left: gray 2px dotted;
}
.outline {
outline: red 1px solid;
z-index: 99;
}
#test {
display: flex;
flex-flow: wrap;
justify-content: space-around;
margin: 20px auto;
width: 80%;
background: #f6f5f3;
border-radius: 5px;
box-shadow: #f6f5f3 1px 1px 8px;
}
.inputs {
display: block;
position: relative;
padding-left: 35px;
margin-bottom: 12px;
cursor: pointer;
font-size: 22px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.inputs input {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
.checkmark {
position: absolute;
top: 0;
left: 0;
height: 25px;
width: 25px;
background-color: #d6d5d2;
border-radius: 5px;
}
#radio .checkmark {
border-radius: 50%;
}
.inputs:hover input ~ .checkmark {
background-color: #e6e1e0;
}
.inputs input:checked ~ .checkmark {
background-color: #2196F3;
}
.checkmark:after {
content: "";
position: absolute;
display: none;
}
.inputs input:checked ~ .checkmark:after {
display: block;
}
.inputs .checkmark:after {
left: 9px;
top: 5px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
}
JS:
const container = document.querySelector('#container');
const logo = document.querySelector('#logo');
const menu = document.querySelector('#menu');
const checkLayouts = document.querySelectorAll('.border');
const borderType = document.getElementsByClassName('left-border');
const testContainer = document.getElementById('test');
checkLayouts.forEach(layout=> {
layout.addEventListener('click', () => {
const checkBox = layout.children[0];
const name = checkBox.getAttribute('name');
if (name == 'div1') {
logo.classList.toggle('outline');
} else if (name == 'div2') {
menu.classList.toggle('outline');
} else {
container.classList.toggle('outline');
}
checkBox.toggleAttribute('checked');
});
});
const changeBorderType = (id) => {
testContainer.style.borderLeft = `#659f41 8px ${id}`;
for (let index = 0; index < borderType.length; index++) {
const element = borderType[index];
element.style.borderLeft = `red 2px ${id}`;
}
}
يمكنك الإطلاع على النتيجة:
https://laradarine.github.io/dotted-border/
وهذا رابط المستودع:
3 Likes