ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสอบถามเรื่องการ override CSS ครับ ??
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถามเรื่องการ override CSS ครับ ??  (อ่าน 2208 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
renderer
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 4



ดูรายละเอียด
« เมื่อ: 23 เมษายน 2013, 17:41:27 »

พอดีจะเขียน CSS ให้คลุมในหน้า page ที่มี external CSS อยู่แล้วครับ

ปัญหาก็คือ เวลาเราเขียน tag <h1> ลงไป  <h1>  selector ของ external css ก็ถูกเรียกทำงานจาก


โค๊ด:
.module h1 {
height: 28px;
padding-top: 2px;
overflow: hidden;
padding-left: 25px;
background: url(images/header_bg.gif) no-repeat 0 -297px;
font-size: 14px;
color: #666666;
font-weight: bold;
line-height: 30px;
}


ซึ่ง DOM จะเป็นลักษณะนี้ครับ

<div class="module">  <!--ไม่สามารถเปลี่ยน class ได้-->
<h1>xxxxxxx</h1>

และถ้าผมจะเขียนให้ <h1> override ทุกๆ property แทนตัว .module h1 โดยที่ไม่แก้ไขไฟล์ external css พอมีวิธีที่ง่ายๆบ้างไหมครับ

เพราะผมลองทำแบบ inline กับ internal มันก็ต้องมานั่งไล่ override ทุกๆ property ที่ถูกประกาศไว้จาก External CSS อ่ะครับ

พูดง่ายๆคือ ไม่อยากให้ <h1> แสดงผลเหมือนใน external css ที่ถูกเรียกใช้เลย เฉพาะหน้านั้นๆครับ

ปัญหาคือ คือไม่อยากจะนั่ง override มันทุกอันอ่ะครับ งง ไหมเอ่ย

ตัวอย่างที่เขียนนะครับ

internal css ที่เราเขียน


โค๊ด:
<style type="text/css">
h1{
font-family:"PSL Kitithada", Tahoma;
        color: orangered;
}
</style>


external css


โค๊ด:
.module h1 {
height: 28px;
padding-top: 2px;
overflow: hidden;
padding-left: 25px;
background: url(images/header_bg.gif) no-repeat 0 -297px;
font-size: 14px;
color: #666666;
font-weight: bold;
line-height: 30px;
}


อยากให้ในส่วนของ property พวก อื่นๆที่มีใน external css มันไม่ทำงานไปเลยอ่ะครับ ให้ทำแต่ส่วนของ internal ที่เราเขียน

ผมใช้ FCKEDITOR ทำนะครับ เพราะมันเป็นตัว cms เลยไม่อยากแก้ไข css external เกรงว่าจะกระทบต่อการแสดงผลในหน้าอื่นๆ


ขอบคุณครับที่อ่านมาซะยาว >_< พอมี idea หรือทริคก็ช่วยกันได้นะครับ

 wanwan020 wanwan020 wanwan020 wanwan020

บันทึกการเข้า
hisupakorn
Newbie
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 44



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 24 เมษายน 2013, 01:09:42 »

!important ลองเติมไปด้านหลังเป็น อย่างอันนี้มี color ซ้ำกันก็

โค๊ด:
.module h1 {
height: 28px;
padding-top: 2px;
overflow: hidden;
padding-left: 25px;
background: url(images/header_bg.gif) no-repeat 0 -297px;
font-size: 14px;
color: #666666!important;
font-weight: bold;
line-height: 30px;
}

ไม่แนะนำให้เขียน style h1 โดดๆครับมันจะ overwrite แล้วจะเป็นเยี่ยงนี้ ควรจะใส่ใช้ style class ใน element ครับ
บันทึกการเข้า
MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #2 เมื่อ: 24 เมษายน 2013, 02:34:25 »

ผมลองคิดเล่นๆนะ

อันดับแรก ยังไง ext css ก็ถูกโหลดเข้ามา style ยังไงก็ถูกแสดงผลครับถ้ามันเข้า pattern แบบนี้ .module h1

ดังนั้น ถ้าไม่อยาก overide ก็ต้องทำให้มันไม่เข้า pattern ของ ext css ครับ

วิธีที่ 1 โดยการใช้ js remove .module ออกจาก element
จาก <div class="module"><h1>xxxxxxx</h1>
เป็น <div class=""><h1>xxxxxxx</h1>
วิธีนี้จะกระทบ sub element ตัวอื่นของ .module ด้วย ถ้าไม่กระทบก็ใช้วิธีนี้ได้ครับ

วิธีที่ 2 ไปเพิ่มเงื่อนไขใน ext css ครับ
//ตัวอย่างเป็น css3 นะครับ
เช่นแก้เป็น
.module h1:not(.no-external-css) {
...
}
<div class="module"><h1 class="no-external-css">xxxxxxx</h1>


วิธีที่ 3 เหมือน 2 แต่ใช้ js ช่วย process ครับ ซึ่งจะยาวกว่าแต่ไม่ require css3
ขั้นตอนก็
1. แก้ ext css selector เป็น .module h1.allow-external{...}
2. ตอนนี้จะใช้ jquery select element ที่เข้าเงื่อนไข $('.module h1[class!="not-allow-external"]')
นั่นคือ ถ้าไม่มี class "not-allow-external" ก็ให้เพิ่ม class allow-external ลงไป
3. เพิ่มclass not-allow-external ลงใน h1 ที่ไม่ต้องการ external css
ดังนี้ <h1 class="not-allow-external">xxxxx</h1>

ส่วนพวก <h1 class="text-center">xxx</h1>
หรือ <h1>xxx</h1>
ก็จะถูก javascript เพิ่ม class "allow-external" ลงไปแล้วก็จะเข้า pattern ของ external css ก็จะแสดงผลปรกติ


คิดออกก็ประมาณนี้
« แก้ไขครั้งสุดท้าย: 24 เมษายน 2013, 05:17:53 โดย MapTwoZa » บันทึกการเข้า

Good code quality Developer Cheesy
renderer
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 4



ดูรายละเอียด
« ตอบ #3 เมื่อ: 24 เมษายน 2013, 19:28:16 »

ขอบคุณท่านทั้งสองมากๆครับ เดี๋ยวผมจะเอาไปปรับใช้ดู ขอบคุณครับ

 wanwan017 wanwan017 wanwan017
บันทึกการเข้า
dtscript
ก๊วนเสียว
*

พลังน้ำใจ: 22
ออฟไลน์ ออฟไลน์

กระทู้: 358



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 24 เมษายน 2013, 19:31:35 »

สร้างไฟล์ site มาอีกอันเลยครับ แล้ว overide
บันทึกการเข้า

altonut
Newbie
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 89



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 02 พฤษภาคม 2013, 09:41:22 »

ผมลองคิดเล่นๆนะ

อันดับแรก ยังไง ext css ก็ถูกโหลดเข้ามา style ยังไงก็ถูกแสดงผลครับถ้ามันเข้า pattern แบบนี้ .module h1

ดังนั้น ถ้าไม่อยาก overide ก็ต้องทำให้มันไม่เข้า pattern ของ ext css ครับ

วิธีที่ 1 โดยการใช้ js remove .module ออกจาก element
จาก <div class="module"><h1>xxxxxxx</h1>
เป็น <div class=""><h1>xxxxxxx</h1>
วิธีนี้จะกระทบ sub element ตัวอื่นของ .module ด้วย ถ้าไม่กระทบก็ใช้วิธีนี้ได้ครับ

วิธีที่ 2 ไปเพิ่มเงื่อนไขใน ext css ครับ
//ตัวอย่างเป็น css3 นะครับ
เช่นแก้เป็น
.module h1:not(.no-external-css) {
...
}
<div class="module"><h1 class="no-external-css">xxxxxxx</h1>


วิธีที่ 3 เหมือน 2 แต่ใช้ js ช่วย process ครับ ซึ่งจะยาวกว่าแต่ไม่ require css3
ขั้นตอนก็
1. แก้ ext css selector เป็น .module h1.allow-external{...}
2. ตอนนี้จะใช้ jquery select element ที่เข้าเงื่อนไข $('.module h1[class!="not-allow-external"]')
นั่นคือ ถ้าไม่มี class "not-allow-external" ก็ให้เพิ่ม class allow-external ลงไป
3. เพิ่มclass not-allow-external ลงใน h1 ที่ไม่ต้องการ external css
ดังนี้ <h1 class="not-allow-external">xxxxx</h1>

ส่วนพวก <h1 class="text-center">xxx</h1>
หรือ <h1>xxx</h1>
ก็จะถูก javascript เพิ่ม class "allow-external" ลงไปแล้วก็จะเข้า pattern ของ external css ก็จะแสดงผลปรกติ


คิดออกก็ประมาณนี้

ผมไม่เคยรู้แบบนี้เลยนะเนี่ย แจ่มครับ  wanwan003
บันทึกการเข้า

kowit2
สมุนแก๊งเสียว
*

พลังน้ำใจ: 29
ออฟไลน์ ออฟไลน์

กระทู้: 529



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 02 พฤษภาคม 2013, 10:28:12 »

ลองใช้ !important; ต่อท้าย css ตัวนั้นครับ

เช่น

font-size: 16px !important;
บันทึกการเข้า

Be patient because patience looks natural.
ผลงานการทำเนื้อหา บทความ ที่มีคุณภาพในความเป็นจริงครับ

ฟรีอีเมล ดีจริงหรือ ? : ฟรีอีเมล ที่ให้ใช้งานทั่วไป เหมาะกับธุรกิจของคุณหรือไม่ หรือว่าถึงเวลาแล้วที่ต้องเปลี่ยนมาใช้ Email แบบเสียเงิน
ไวรัสคอมพิวเตอร์ รู้ไว้ป้องกันได้ : ไวรัสคอม ป้องกันได้ หากลองศึกษาวิธีการใช้งานที่ถูกต้อง และอย่าลืมติดตั้งโปรแกรมสแกนไวรัสด้วยนะ
yorushop
หน้า: [1]   ขึ้นบน
พิมพ์