قراره بهتون تضمین موفقیت در برنامه‌نویسی و کلی آفر ویژه بدیم 😎 (برای شروع کلیک کن 👉)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Adib Moghimi
اضافه شدن border-bottom هنگام کلیک روی آخرین div
جامعه Html & CSS ایجاد شده در ۱۴ دی ۱۴۰۱

سلام خدمت اساتید گرامی. وقتتون بخیر.

1- من میخوام وقتی روی آخرین div کلیک کردم و زیرمنوها نمایان شدن، accordion. یک border-bottom بگیره

و وقتی دوباره زیرمنوها پنهان و slideUp شدند ( با کلیک بر روی هر کدام از divها )، آن border-bottom از بین بره.

البته من خودم تا حدودی یه سری تغییرات رو ایجاد کردم ولی به نتیجه مد نظرم نرسیدم و توی کدپن میفرستم براتون.

2- آیا برای ارسال کد در کدپن، حتما باید اونو در پروفایل کدپن خودم ذخیره کنم تا بتونم برا کسی بفرستم؟ ممنون میشم راهنمایی کنید و طرز صحیح انجامشو بهم بگین چون قبلا اینکار رو نکردم.

https://codepen.io/Adib27Moghimi/pen/OJwRzNr

3- یه سوال کلی: آیا وقتی بخوایم استایل‌ها رو به صورت اینترنال بنویسیم، بهتر است که تگ style درون تگ head باشه یا فرقی نداره خارج از تگ head و در کنار head و body باشه؟ سرچ کردم و اینطور فهمیدم که درون تگ head قرار بگیره، بهتره ولی می‌خوام مطمئن بشم. و دلیلش به صورت کامل چیه؟

ممنون.

درود

2- بله باید ذخیره کنید. نگران نباشید همین شیوه که فرستادید اوکی هست. (همیشه میتونید لینک رو با یه دستگاه دیگه - مثل موبایل خانواده - امتحان کنید و مطمئن بشید بعد بفرستید.)

1- اگر فقط رو div آخر که لیبلش لینکها هست میخواید این اتفاق بیفته به این صورت باید اصلاح بشه:

j("ul.accordion li div:last").css({ //line 16
j("ul.accordion li div").css({ //line 22

3- استایل درون هد قرار میگیره تا بهینگی حفظ بشه و باعث حذف تاخیر در لود صفحه بشه و درنتیجه صفحه سریعتر بالا بیاد.

نازنین کریمی مقدم ۱۴ دی ۱۴۰۱، ۱۵:۳۰

ممنون بابت پاسخ سوالات 2 و 3 .

ولی در مورد سوال 1 : نه، میخواستم اون border-bottom برای accordion. قرار بگیره و خیلی هم براش وقت گذاشتم ولی نتونستم به نتیجه برسم. و این بخش دوم از کدهای jQ رو خودم نوشتم و اضافه کردم به کدهای استاد صالحی (به صورت پایین) :


بخش اول (کدهای استاد صالحی):


  var j = $.noConflict();        
j(document).ready(function () {
  j(".accordion > li > div").click(function () {
    if (j(this).next().is(":hidden")) {
      j(".accordion li ul").slideUp();
    }
    j(this).next().slideToggle();
  });
});    


بخش دوم (کدهایی که خودم نوشتم و اضافه کردم) :


j(document).ready(function () {
  j(".accordion li div")
    .last()
    .click(function () {
      j("ul.accordion").css({
        borderBottom: "10px solid #5780b8",
      });
    });
  j(".accordion > li > div").click(function () {
    if (j(".accordion > li > div").last().next().is(":hidden")) {
      j("ul.accordion").css({
        borderBottom: "none",
      });
    }
  });
});


ولی فک کنم بهتر اینه که یه استایل border-bottom ثابت به accordion. بدهم و بی‌خیال این کدنوشته خودم بشم و ظاهرشم بد نمیشه.


Adib Moghimi ۱۴ دی ۱۴۰۱، ۱۷:۲۶

بذارید یه مرور کنیم تا کامل متوجه شم.

الان شما یه accordion سه پله ای دارید و وقتی روی هر کدوم از پله‌ها کلیک میکنید، زیرمنوش زیرش ظاهر میشه و تا اینجا اوکیه.

حالا قراره وقتی کلیک کردید کجای این تصویر بوردر بگیره؟ بی زحمت در این دو تصویر مشخص میکنید کجا میشه؟ چون accordion که میگید سوتفاهم پیش میاد، معلوم نیست منظورتون بدون زیرمنو هست، اون پله‌ها هست و....

629f-1.PNG517e-image.png

نازنین کریمی مقدم ۱۴ دی ۱۴۰۱، ۲۱:۰۱

عکس دوم سمت چپ. عذر خواهی میکنم اگه بد منظورمو گفتم ( اونجاهایی که گفتم accordion. منظورم تگ ul بود با کلاس accordion )



در کل میخواستم وقتی روی آخرین div با لیبل لینک‌ها که کلیک کردم، یه بوردر بیفته زیر تگ ul با کلاس accordion


و وقتی دوباره روی همون آخرین div و یا div اول یا دوم کلیک کردم ( طبق آموزش استاد و کدهای بخش اول که اشاره کردم: با این کار؛ زیرمنوهای مرتبط


با لیبل لینک‌ها، بالا رفته و بسته میشن ) و زیرمنوهای مرتبط با لیبل لینک‌ها بسته شدند؛ همزمان اون بوردر هم که به تگ ul با کلاس accordion اعمال شده بود، از بین برود.


چند تا عکس هم میفرستم ومنظورم همچین چیزیه ک داخل عکسا هستش.

f489-Screenshot (42).pngdc15-Screenshot (43).pngc074-Screenshot (44).png7a9b-Screenshot (45).png


و دوباره که زیرمنوی آخری بسته شد، اون بوردر هم از بین بره و مثل اولش بشه. مانند 3تا عکس اول بشه دوباره.

Adib Moghimi ۱۵ دی ۱۴۰۱، ۱۱:۲۲

خیلی ممنونم بابت توضیحاتتون

بنده یک متغیر بولین گرفتم که کد کمی تمیزتر و بهینه‌تر بشه. به این صورت اوکی شد:

var j = $.noConflict();
var open = false;
j(document).ready(function () {
  j(".accordion > li > div").click(function () {
    if (j(this).next().is(":hidden")) {
      j(".accordion li ul").slideUp();
    }
    j(this).next().slideToggle();
  });
});
j(document).ready(function () {
  j(".accordion > li > div")
    .last()
    .click(function () {
    if (open) {
      console.log('hidden')
      j("ul.accordion").css({
        borderBottom: "none"
      });
    }
    else{
      console.log('show')
      j("ul.accordion:last").css({
        borderBottom: "10px solid #5780B8"
      });
    }
    open = !open;
    });
});
بهترین پاسخ
نازنین کریمی مقدم ۱۶ دی ۱۴۰۱، ۱۵:۲۴

سلام مجدد و خسته نباشین.

ممنونم ولی اون چیزی که میخواستم نشد و موقع کلیک روی divها در حالتهای مختلف، نتایج مطلوب و کامل حاصل نمیشه و نقص داره.

اما در مورد متغیر بولین، کمی مطالعه کردم و جالب بود برام. به هر حال ممنون.

راستش یاد یکی از آموزش‌های استاد صالحی افتادم و ازش استفاده کردم و دقیقا رسیدم به اون چیزی که میخواستم.

البته بحث js بود که تا اینجای اموزشم فقط در این مورد از js گفتند و منم به اجبار استفاده کردم.

آدرس آموزش این مورد: (آموزش html و css مقدماتی- بخش آخر:" پروژه html5 و css3 و طراحی رسپانسیو"- ویدیوی دوم:"منوی رسپانسیو"

زمان دقیق ویدیو= > 22:00 الی 41:30 ولی قسمت اصلیش از 28:20 شروع میشه )


یه عکس میذارم از کدهایی که اضافه کردم که کامل همه رو یکجا نشون میده.

اگه مطلبی، موردی هست خوشحال میشم بفرمایید.

1fcf-withborder.jpg

Adib Moghimi ۱۷ دی ۱۴۰۱، ۱۶:۰۳