Writing CSS style data to a page via ethernet shield

int A = 6;
int B = 2;
int C = 3;
int D = 4;

Nice names for some pins.

  pinMode(6, OUTPUT); //pin selected to control

Names? We don't need no steenking names!

(Yes, we do!)

        if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }

Why limit the damage to 100 times? You've already shot your foot off using the String class. What's one more bullet going to do?

          if((digitalRead(A)) == HIGH)
          {
            client.println("<a href=\"/?lightAoff\"\"><img src='http://www.shedbass.com/dtokez/buttons/off2.png'></a>
");
          }

          else if((digitalRead(A)) == LOW)
          {
            client.println("<a href=\"/?lightAon\"\"><img src='http://www.shedbass.com/dtokez/buttons/on2.png'></a>
");
          }

If reading an OUTPUT pin doesn't result in HIGH, is there any possibility that the function will return something other than LOW?

Why are you reading from an OUTPUT pin? Surely you can (have the Arduino) remember what it set the pin to.

I'd suspect that you are running out of memory. Unpredictable things can happen when you are out of memory. The F() macro will cause all those massive literal strings from occupying both program memory (where they are OK) and SRAM (where they are not).

          else{
            if(readString.indexOf("?lightAoff") >0)//checks for off

Whyisn'tthisasimpleelseif?

(A subtle hint to use the space bar!)

What does your serial output show?