CSS Border Gradient / CSS Border Farbverlauf

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CSS Border Gradient / CSS Border Farbverlauf

    Mittels folgendem CSS Code habe ich mir eine Inhalts-Box
    mit runden Ecken, cross-browser-kompatibel, erstellt.
    Wie kann ich nun border-left und border-right mit
    einem Farbverlauf versehen?

    HTML-Code:
    #mainbox {
    	background-color: #FFFFFF;
    	width: 890px;
    	margin: 0 auto 15px auto;
    	padding: 30px;
    	border-top: 4px solid #8C8C8C;
    	border-right: 4px solid #CCCCCC;
    	border-bottom: 4px solid #CCCCCC;
    	border-left: 4px solid #CCCCCC;
    
    	-moz-border-radius: 25px;
    	-webkit-border-radius: 25px;
    	border-radius: 25px;
    	behavior: url(border-radius.htc);
    	
    	font-size: 24px;
    	font-family: Arial Narrow;
    	color: #A6A6A6;
    }
    
    // Inhalt der Datei border-radius.htc
    --Do not remove this if you are using--
    Original Author: Remiz Rahnas
    Original Author URL: http://www.htmlremix.com
    Published date: 2008/09/24
    
    Changes by Nick Fetchak:
    - IE8 standards mode compatibility
    - VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
    Published date : 2009/11/18
    
    
    <public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
    <script type="text/javascript">
    
    // findPos() borrowed from http://www.quirksmode.org/js/findpos.html
    function findPos(obj) {
    	var curleft = curtop = 0;
    
    	if (obj.offsetParent) {
    		do {
    			curleft += obj.offsetLeft;
    			curtop += obj.offsetTop;
    		} while (obj = obj.offsetParent);
    	}
    
    	return({
    		'x': curleft,
    		'y': curtop
    	});
    }
    
    function oncontentready(classID) {
      if (this.className.match(classID)) { return(false); }
    
    	if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
    
    	this.className = this.className.concat(' ', classID);
    	var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
    	                                this.currentStyle['-webkit-border-radius'] ||
    	                                this.currentStyle['border-radius'] ||
    	                                this.currentStyle['-khtml-border-radius']) /
    	                       Math.min(this.offsetWidth, this.offsetHeight), 1);
    	var fillColor = this.currentStyle.backgroundColor;
    	var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
    	var strokeColor = this.currentStyle.borderColor;
    	var strokeWeight = parseInt(this.currentStyle.borderWidth);
    	var stroked = 'true';
    	if (isNaN(strokeWeight)) {
    		strokeWeight = 0;
    		strokeColor = fillColor;
    		stroked = 'false';
    	}
    
    	this.style.background = 'transparent';
    	this.style.borderColor = 'transparent';
    
    	// Find which element provides position:relative for the target element (default to BODY)
    	var el = this;
    	var limit = 100, i = 0;
    	while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
    		el = el.parentElement;
    		i++;
    		if (i >= limit) { return(false); }
    	}
    	var el_zindex = parseInt(el.currentStyle.zIndex);
    	if (isNaN(el_zindex)) { el_zindex = 0; }
    	//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
    
    	var rect_size = {
    		'width': this.offsetWidth - strokeWeight,
    		'height': this.offsetHeight - strokeWeight
    	};
    	var el_pos = findPos(el);
    	var this_pos = findPos(this);
    	this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
    	this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
    
    	var rect = document.createElement('v:roundrect');
    	rect.arcsize = arcSize +'px';
    	rect.strokecolor = strokeColor;
    	rect.strokeWeight = strokeWeight +'px';
    	rect.stroked = stroked;
    	rect.style.display = 'block';
    	rect.style.position = 'absolute';
    	rect.style.top = this_pos.y +'px';
    	rect.style.left = this_pos.x +'px';
    	rect.style.width = rect_size.width +'px';
    	rect.style.height = rect_size.height +'px';
    	rect.style.antialias = true;
    	rect.style.zIndex = el_zindex - 1;
    
    	var fill = document.createElement('v:fill');
    	fill.color = fillColor;
    	fill.src = fillSrc;
    	fill.type = 'tile';
    
    	rect.appendChild(fill);
    	el.appendChild(rect);
    
    	var css = el.document.createStyleSheet();
    	css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
    	css.addRule("v\\:fill", "behavior: url(#default#VML)");
    
    	isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
    	// IE6 doesn't support transparent borders, use padding to offset original element
    	if (isIE6 && (strokeWeight > 0)) {
    		this.style.borderStyle = 'none';
    		this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
    		this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
    	}
    
    	if (typeof(window.rounded_elements) == 'undefined') {
    		window.rounded_elements = new Array();
    
    		if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
    		window.onresize = window_resize;
    	}
    	this.element.vml = rect;
    	window.rounded_elements.push(this.element);
    }
    
    function window_resize() {
    	if (typeof(window.rounded_elements) == 'undefined') { return(false); }
    
    	for (var i in window.rounded_elements) {
    		var el = window.rounded_elements[i];
    
    		var strokeWeight = parseInt(el.currentStyle.borderWidth);
    		if (isNaN(strokeWeight)) { strokeWeight = 0; }
    
    		var parent_pos = findPos(el.vml.parentNode);
    		var pos = findPos(el);
    		pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
    		pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
    
    		el.vml.style.top = pos.y +'px';
    		el.vml.style.left = pos.x +'px';
    	}
    
    	if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
    }
    </script>

  • #2
    Hallo,

    wenn es da nicht für den IE noch so eine behavior-Krücke gibt, geht das gar nicht. Rahmen sind per CSS nicht als Gradienten sondern nur als einzelne Farben definierbar. Eventuell kommst du besser, wenn du mit Hintergrundbildern arbeitest?

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Okay, danke

      Kommentar


      • #4
        Ich bekomme es einfach nicht hin

        Anbei ein Scrennshot der Grafik, die ich in W3C gerechtes Markup
        umsetzen möchte, aber einfach keinen Weg finde!
        Angehängte Dateien

        Kommentar


        • #5
          Zu wenig Information.

          Ist dieser Rahmen immer gleich groß oder muss er sich der Größe der Inhalts anpassen (schwierig)?

          Wo liegt konkret dein aktuelles Problem?

          Was meinst du mit W3C-gerechtem Markup? Hast du es bereits hinbekommen, dabei aber die Validität verletzt?
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Als erstes die wichigen Informationen:

            1) Rahmen muss sich an wachsenden Text anpassen
            2) Border ist mit Farbverlauf, also nicht in einer Farbe
            3) Mein konkretes Problem:
            Ich finde keine vernünftige, systematische Herangehensweise, wie ich
            a) die Ecken
            b) den Farbverlauf des Rahmens (Border) und
            c) die Box zum Mitwachsen
            umsetzen kann.

            Wegen W3C-gerechtem Markup:
            Ich möchte lediglich betonen, dass es mir wichtig ist,
            mich an Standards zu halten, auch wenn es durch die
            Informationsvielfalt und/oder Nichtwissen manchmal schwierig ist

            Kommentar


            • #7
              Okay, das ist schwierig und nur mit Abstrichen zu bewältigen:

              Der Farbverlauf muss so steil sein, dass er vollständig in die Minimalhöhe des Rahmens passt. Bei größeren Rahmen wird nur die mittlere Farbe auf die übrige Höhe gestreckt. Wenn du dir den Farbverlauf mit Buchstaben vorstellst, sieht das Prinzip so aus (allerdings aus praktischen Gründen horizontal):

              ABCDEFGHI (Minimalgröße)
              ABCDEEEEE…EEEEEFGHI (große Größe)

              Edit: Andere Variante. du benutzt JavaScript, um das aus dem Hintergrundbild ein img-Element zu machen, dass du dann auf die entsprechende Höhe streckst. (Ginge zwar auch direkt im HTML, aber das wäre dann schon wieder eine Vermischung von Inhalt und Layout.)
              Zuletzt geändert von AmicaNoctis; 01.10.2010, 00:07.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Das verstehe ich sehr gut.
                Wenn ich also eine Menge M mit n Elementen habe M:=n1,n2,n3,...,ni,...,n-1,n
                dann nehme ich mir das ni-te Element, das die Y-Achse trifft, an der
                der der Text beginnt, das Layout zu zerstören.

                Aber mir fällt keine gute Strukturierung für das Markup ein.

                Habe es schon damit versucht, wo ich mir gedacht hatte,
                die Ecken links und rechts innerhalb der 'Shell'-Divs mit
                zusätzlichen Platzhaltern zu versehen, aber irgendwie
                finde ich das selbst nicht logisch. Hiilllfffffe

                HTML-Code:
                <div id="shellTop" style="background-image: url(top_bg.jpg)">
                <div id="platzhalter_ecke_links"> <div id="topbox"></div> <div id="platzhalter_ecke_rechts"></div>
                </div>
                
                <-- hier fehlt border links und rechts, wie dort hin??? -->
                <div id="shellMiddle"> <div id="mainbox"></div> </div>
                
                <div id="shellBottom" style="background-image: url(bottom_bg.jpg)">
                <div id="platzhalter_ecke_links"> <div id="bottombox"></div> <div id="platzhalter_ecke_rechts"></div>
                </div>
                Add: Zusätzliche Hürde ist noch, dass die gesamte Box mit allen Inhalten in Abhängkeit
                des Engerätes (Desktop, Laptop, Tablet, PDA, Smartphone) und dessen Einstellungen interagieren soll.
                Soll heißen: Seite wird immer passend aufgelöst, inkl. Logo und Banner Grafiken...
                Zuletzt geändert von kerbstone; 01.10.2010, 00:26.

                Kommentar


                • #9
                  Ich würde das gar nicht mit Markup machen, das bringt später nur Probleme. Die zusätzlichen Elemente die du brauchst, kannst du alle mit JS einhängen, dann bleibt der HTML-Code sauber strukturiert.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Könnte ich wohl bitte ein Kick-Off Beispiel bekommen?

                    Kommentar


                    • #11
                      Du lässt keine Privatnachrichten zu und deine hinterlegte E-Mail-Adresse scheint ungültig zu sein.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Ich habe soeben unter Einstellungen PMs aktiviert.

                        Kommentar


                        • #13
                          Schönes neues CSS: border-image
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar

                          Lädt...
                          X